使用Interop库在excel中更快地添加图像

时间:2014-12-24 11:03:57

标签: c# excel office-interop excel-interop

我只是将值放在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

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

提前致谢

1 个答案:

答案 0 :(得分:0)

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

即使你能够入侵它,我也不会信任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
}

是的,你一次只处理一张照片,但我不相信你可以改进。