C# Excel Shapes.AddPicture

Visual Studeio 2008
I am creating an Excel file and exporting it to PDF.  In the beginning of my code, I add a picture to the top left of the worksheet.  I want to add the picture when I pagebreak.  I need to know how to figure out the "top" value (offset from the top of the page to the current location).  Can anyone assist with this?

Thank you in advance for your help.
Alex
Excel.Application myExcelApplication = new Excel.Application();
                Excel._Workbook myWorkbook;
                Excel._Worksheet mySheet;
                Excel.Range myRange;
                Excel.Range firstRange;
                int currentRow = 0;
mySheet.Shapes.AddPicture(Server.MapPath(imageFile),
                    Office.Core.MsoTriState.msoFalse,
                    Office.Core.MsoTriState.msoTrue,
                    left,
                    top,
                    width,
                    height);

Open in new window

alexvdbAsked:
Who is Participating?
 
Roshan DavisConnect With a Mentor Commented:
can you try this?
				ThisSheet.Shapes.AddPicture(imageFile,
					Microsoft.Office.Core.MsoTriState.msoFalse,
					Microsoft.Office.Core.MsoTriState.msoTrue,
					System.Convert.ToSingle(oRange.Left.ToString()),
					System.Convert.ToSingle(oRange.Top.ToString()),
					100,
					100);

Open in new window

0
 
Roshan DavisCommented:
can you try something like this?
Excel.Range oRange = (Excel.Range)mySheet.Cells[yourSheetRow,yourSheetCol];
Image oImage = Image.FromFile(Server.MapPath(imageFile));
oRange.set_Item(1,1,oImage);

Open in new window

0
 
alexvdbAuthor Commented:
This is close.  I get the string below in the cell.

System.Drawing.Bitmap

Thank you for your help.
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
Roshan DavisCommented:
if the comment helped you, you can rate the comment. Or you want to wait some more time?
0
 
alexvdbAuthor Commented:
Well, it hasn't solved my issue yet.  I am not getting the image.
0
 
Roshan DavisCommented:
are you getting the image in the object "oImage" (in my previous code). Can you do a null check on that? if image is getting, i can check in the function set_Item.
0
 
alexvdbAuthor Commented:
I tested for not null and it is not.  Is there perhaps something I could do with Range.AutoFormat to format the object as an image?
0
 
Roshan DavisCommented:
can you try this?
Excel.Range oRange = (Excel.Range)mySheet.Cells[yourSheetRow,yourSheetCol];
Image oImage = Image.FromFile(Server.MapPath(imageFile));
oRange.set_Item(1,1,oImage);
System.Windows.Forms.Clipboard.SetDataObject(oImage,true);
mySheet.Paste(oRange,imageFile);

Open in new window

0
 
alexvdbAuthor Commented:
I got the error below on the SetDataObject.
at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay) at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy) at InstructorDB.ACICSExcel.MakeExcelFile() in c:\TFS\Westwood Faculty\InstructorDB\ACICSExcel.aspx.cs:line 931
0
 
Roshan DavisCommented:
oh, Web-forms cannot use the Clipboard I think. let me check any other options
0
 
Roshan DavisCommented:
can you try this?
Excel.Application myExcelApplication = new Excel.Application();
                Excel._Workbook myWorkbook;
                Excel._Worksheet mySheet;
                Excel.Range myRange;
                Excel.Range firstRange;
                int currentRow = 0;
Excel.Range oRange = (Excel.Range)mySheet.Cells[yourSheetRow,yourSheetCol];
mySheet.Shapes.AddPicture(Server.MapPath(imageFile),
                    Office.Core.MsoTriState.msoFalse,
                    Office.Core.MsoTriState.msoTrue,
                  (float)oRange.Left,
		  (float)oRange.Top,
                    width,
                    height);

Open in new window

0
 
alexvdbAuthor Commented:
I'm getting a rather generic error message on the new code.

at InstructorDB.ACICSExcel.MakeExcelFile() in c:\TFS\Westwood Faculty\InstructorDB\ACICSExcel.aspx.cs:line 946

0
 
Roshan DavisCommented:
have you filled the values of row, column in yourSheetRow,yourSheetCol?
can you show me the latest function of yours?
0
 
alexvdbAuthor Commented:
Here it is.  I think the cast to float of the range.top and left is what is failing.

Excel.Range oRange = (Excel.Range)mySheet.Cells[currentRow, 1];
mySheet.Shapes.AddPicture(Server.MapPath(imageFile),
                    Office.Core.MsoTriState.msoFalse,
                    Office.Core.MsoTriState.msoTrue,
                    (float)oRange.Left,
                    (float)oRange.Top,
                    width,
                    height);
0
 
Roshan DavisCommented:
can you cast it to double?
0
 
alexvdbAuthor Commented:
Well, I got an error on thet too.  But, I checked the actual value of top.  It was 540.75.  WHen I tried to set the value of my float (top) I got a message indicateing I need to add a "F" suffix.  Itried this line of code and it worked.
top = 540.75F;
So I added "F" to the convert lines of code like below and it now works.
mySheet.Shapes.AddPicture(imageFile,
                    Microsoft.Office.Core.MsoTriState.msoFalse,
                    Microsoft.Office.Core.MsoTriState.msoTrue,
                    System.Convert.ToSingle(oRange.Left.ToString() + "F"),
                    System.Convert.ToSingle(oRange.Top.ToString() + "F"),
                    100,
                    100);

Thank you so muc for sticking with me on this.  I really appreciate it.
Alex
0
 
alexvdbAuthor Commented:
Check that I ran the wrong file.  I need to figure out how to get the "F" suffix in there somehow.
0
 
alexvdbAuthor Commented:
OK.  Here is the code that workds...
Single left = (Single)(1.5);
Single top = (Single)(1.5);
top = System.Convert.ToSingle(oRange.Top.ToString());
mySheet.Shapes.AddPicture(Server.MapPath(imageFile),
                    Office.Core.MsoTriState.msoFalse,
                    Office.Core.MsoTriState.msoTrue,
                    left,
                    top,
                    width,
                    height);

Thanks again.
0
 
Roshan DavisCommented:
I think you have used some of the code that is mentioned in my comment, that deserves some points :)
0
 
alexvdbAuthor Commented:
roshmon,  
You deserve all of the credit or points or what ever.  It was not my intention to claim anythin.  My only intention was to mark the last comment as the one that work by setting the top variable with System.Convert before using it in the AddShapes.  You get all of the kudos.  Can you tell me how I can correct this?

Thank you.
0
 
alexvdbAuthor Commented:
roshmon, you were most helpful and I appreciate the fact that you stuck with me on this.

Thank you very much.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.