将内存流中的图像添加到Excel文档中

我有一个内存流中的图像,我想将它写入MS Excel文档,PIA只公开了带有文件路径的AddPicture方法。

是否需要添加图片而不必将图像写入光盘?

MSDN

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.shapes.addpicture(v=office.14).aspx


好吧,盲目飞行,但假设你的代码有一两件事(例如你的流的来源,数据类型等),这可能是一个解决方案:
首先,您需要从流中创建位图图像数据(我假设它是一个字节流,并假定该流描述了位图图像)。 这里有一个解决方案已经在堆栈溢出:字节数组到位图图像
我从解决方案中复制粘贴代码:

int w= 100;
int h = 200;
int ch = 3; //number of channels (ie. assuming 24 bit RGB in this case)

byte[] imageData = new byte[whch]; //you image data here Bitmap bitmap = new Bitmap(w,h,PixelFormat.Format24bppRgb); BitmapData bmData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr pNative = bmData.Scan0; Marshal.Copy(imageData,0,pNative,whch); bitmap.UnlockBits(bmData);
另外假设你有一个工作簿和工作表的对象,你将要使用的东西是这样的:
xlBook = (Excel.Workbook)objExcel.Workbooks.Add("");
xlSheet = (Excel.Worksheet)xlBook.Worksheets1;
xlSheet.Activate();
既然您有一个位图类型的变量和一张工作表,您只需将图像粘贴到工作表:
System.Windows.Forms.Clipboard.SetDataObject(bitmap, false);
xlsRange = xlSheet.get_Range((Excel.Range)xlSheet.Cells[5, 15], (Excel.Range)xlSheet.Cells[5, 15]);
xlSheet.Paste(xlsRange, bitmap);

所以关键是这里的人(而不是使用“AddPicture”):Worksheet.Paste方法

希望这可以帮助!

链接地址: http://www.djcxy.com/p/13155.html

上一篇: Adding an image from memory stream to Excel document

下一篇: how to stop login button app asking for friends list permission