我目前在SQL数据库中有一个产品列表,其中一个字段是包含产品图像的blob字段,我将其存储并使用Byte []数组进行检索,然后拍摄图像来自PNG格式。当用户查看产品时,在网站上显示图像正常工作。
客户现在想要的是将所有产品导出到Excel,包括每个产品每行显示的图像,比如说F列。
我没有在网上找到任何似乎有效的信息 - 示例代码似乎总是有错误或引用我无法找到的内容,这让我想知道是否有版本控制的问题。我目前正在使用Visual Studio 2010和Office 2010来测试它。
我看过一些示例,展示了如何将图像带到剪贴板并粘贴它,但考虑到这将在网络服务器上运行,并且可能每次需要处理20个左右的产品,我&#39 ;我不确定剪贴板对于网络服务器是个好主意吗?
我希望能够直接从Byte []数组将其写入excel文件,因为我会提取所有其他产品数据。
在我更新网站上的代码之前,我尝试使用简单的Console程序在本地测试它。一旦我知道我可以将图像输入Excel,我可能会编写一个我可以在aspx页面上引用的DLL库。
var xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add();
Excel.Worksheet xlWorkSheet = xlWorkBook.Worksheets[1];
byte[] imgdata = File.ReadAllBytes("product.png");
//what do I enter here to insert the image into cell[1,1]
xlWorkBook.SaveAs("abc.xlsx");
xlWorkBook.Close(true);
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
答案 0 :(得分:0)
如果你想使用字节数据而不是硬盘上的文件,关键是使用工作表粘贴功能而不是使用AddPicture
:
Bitmap bmp;
using (var ms = new MemoryStream(imgdata))
{
bmp = new Bitmap(ms);
System.Windows.Forms.Clipboard.SetDataObject(bmp, False);
var rng = xlWorkSheet.Range("A1");
xlWorkSheet.Paste(rng, bmp);
}