如何使用C#在Excel中嵌入图像?

时间:2016-08-22 11:34:28

标签: c# asp.net excel

我目前在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);

1 个答案:

答案 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);
}