我在内存流中有一个图像,我想将其写入MS Excel文档,PIA只公开采用文件路径的AddPicture方法。
是否需要添加图片而无需将图像写入光盘?
MSDN
答案 0 :(得分:3)
嗯,有点盲目飞行,但假设你的代码有一两件事(例如你的流源,数据类型等),这可能是一个解决方案:
首先,您需要从流中创建位图图像数据(我假设它是一个字节流,也假设流描述了位图图像)。 Stack Overflow上已有一个解决方案:Byte Array to Bitmap Image我复制粘贴解决方案中的代码:
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();
既然你有一个Bitmap类型的变量和一个工作表,你只需要将图像粘贴到工作表上: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 Method