使用互操作库在 Excel 中更快地添加图像

本文关键字:添加 图像 Excel 互操作 | 更新日期: 2023-09-27 18:35:15

我只是将值放入Excel中,并将图像放入某些特定单元格。我的代码示例如下所示;

   //sb is a String Builder and gets filled by loop
   xlWorkSheet.Cells[sheetRowPosition, 4] = sb.ToString();
   xlWorkSheet.Shapes.AddPicture(loadPath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, float.Parse(((left) + 5).ToString()), float.Parse(((top) + 5).ToString()), 60, 60);

我只是简单地完成了它,就像循环浏览集合并将数据插入单元格一样。但它像一样缓慢。所以我改变了主意,像这样刷新我的代码;

private static void WriteArray(int rows, int columns, Worksheet worksheet)
{
        var data = new object[rows, columns];
       for (var row = 1; row <= rows; row++)
       {
           for (var column = 1; column <= columns; column++)
             {
             data[row - 1, column - 1] = "Test";
              }
         }
     var startCell = (Range)worksheet.Cells[1, 1];
       var endCell = (Range)worksheet.Cells[rows, columns];
       var writeRange = worksheet.Range[startCell, endCell];
    writeRange.Value2 = data;
}

http://www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx

但现在的问题是,如何使用第二种方法将图像插入单元格?

提前致谢

使用互操作库在 Excel 中更快地添加图像

我敢打赌不可能将图像视为数据对象。

即使您能够破解它,我也不会相信 Excel 会在未来的版本中支持它。 相反,我会创建一个对象数组,这是您的图片数据,然后在插入数据后,浏览您的图片数据数组并一次插入一个。

for (i = ROW LOOP)
{
   for (j = COL LOOP)
   {
      if (ISIMAGE)
      {
         ImageArray.ADD(new imageData(i,j,ImageLoc))
      }
      else
      {
         data[i,j] = "Test";
      }
   }
}
writeRange.Value2 = data;
foreach (imageData iData in ImageArray)
{
   //Parse the object and load the picture to the right row/col
}

是的,你仍然一次处理一张图片,但我不相信你可以改进这一点。