Excel image in cell

How to insert an image (of type Image) into a specific cell in an Excel worksheet

taperSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item("Taper"); Microsoft.Office.Interop.Excel.Range cell = GetMyPictureCELL(taperSheet); Image myImage = new Image(); RenderTargetBitmap bmp; bmp = new RenderTargetBitmap((int)this.Width, (int)this.Height, 96, 96, PixelFormats.Pbgra32); bmp.Render(myViewPort); myImage.Source = bmp; myImage.Stretch = Stretch.Uniform; 

and now? I was hoping for

 cell.Add(myImage) 

But I guess this is not so simple.

/ Stefan

Thanks for your input doitgood

The following code works for me

In my case, my image source is a viewport (myViewPort) The placement of the image is determined by the cell

 try { Image myImage = new Image(); RenderTargetBitmap bmp; PngBitmapEncoder encoder; string fileName; System.IO.Stream stream; object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Picture pic = null; Microsoft.Office.Interop.Excel.Pictures p = null; bmp = new RenderTargetBitmap((int)this.Width, (int)this.Height, 96, 96, PixelFormats.Pbgra32); bmp.Render(myViewPort); myImage.Source = bmp; myImage.Stretch = Stretch.Uniform; fileName = System.IO.Path.GetTempFileName(); stream = System.IO.File.OpenWrite(fileName); encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); encoder.Save(stream); stream.Close(); p = taperSheet.Pictures(missing) as Microsoft.Office.Interop.Excel.Pictures; pic = p.Insert(fileName, missing); pic.Left = cell.Left; pic.Top = cell.Top; } catch { } 
+6
source share
2 answers

Try the following:

 object missing = System.Reflection.Missing.Value; Excel.Range picPosition = GetPicturePosition(); // retrieve the range for picture insert Excel.Pictures p = yourWorksheet.Pictures(missing) as Excel.Pictures; Excel.Picture pic = null; pic = p.Insert(yourImageFilePath, missing); pic.Left = Convert.ToDouble(picPosition .Left); pic.Top = Convert.ToDouble(picPosition .Top); pic.Placement = // Can be any of Excel.XlPlacement.XYZ value 

And don't forget to release it all!

+15
source

Or try the following:

 private void PlacePicture(Image picture, Range destination) { Worksheet ws = destination.Worksheet; Clipboard.SetImage(picture); ws.Paste(destination, false); Pictures p = ws.Pictures(System.Reflection.Missing.Value) as Pictures; Picture pic = p.Item(p.Count) as Picture; ScalePicture(pic, (double)destination.Width, (double)destination.Height); } private void ScalePicture(Picture pic, double width, double height) { double fX = width / pic.Width; double fY = height / pic.Height; double oldH = pic.Height; if (fX < fY) { pic.Width *= fX; if (pic.Height == oldH) // no change if aspect ratio is locked pic.Height *= fX; pic.Top += (height - pic.Height) / 2; } else { pic.Width *= fY; if (pic.Height == oldH) // no change if aspect ratio is locked pic.Height *= fY; pic.Left += (width - pic.Width) / 2; } } 
+2
source

Source: https://habr.com/ru/post/897291/


All Articles