我编写了一个Windows窗体应用程序,其中对于Excel文件的每一行,我正在导入位于我的Intranet网络上的服务器中的jpg图片。 Excel文件由大约2000行组成。 插入图片的代码如下所示:
String currentFilePath = getCurrentFileName(pictureDirectory, stagione, currentLine, currentModello, currentMateriale, currentColore);
Excel.Range oRange = (Excel.Range)xlWorkSheet.Cells[rowIndex, indexColumnFoto];
Picture picture = ((Pictures)xlWorkSheet.Pictures(Type.Missing)).Insert(currentFilePath, Type.Missing);
picture.Left = (double)oRange.Left;
picture.Top = (double)oRange.Top;
if (picture.Height > (double)oRange.Height)
{
if (picture.Height > 400)
{
oRange.RowHeight = 400;
}
else
{
oRange.RowHeight = picture.Height;
}
}
此操作在BackgroundWorker中运行,一切正常,但一段时间后进程变得非常慢。 我在网上寻找解决方案,但我一无所获。我找到的唯一解决方案是相关的代码片段,它们在Excel中导入文本而不是图片。
如果您有任何想法,请告诉我。考虑到我的用户在抱怨,但我认为用于在Excel中导入1500-2000个图像的软件应该非常慢,不应该吗?
还有一件事,正如您所见,我使用COM来完成工作。有没有其他方法可以导入图片?
非常感谢!!!
答案 0 :(得分:2)
使用COM并将数据从服务器中拉出来,正如您所做的那样,您可能只会在这里和那里进行一些调整,看到边际改进。
首先,对于Excel应用程序,您应该在例程开头设置Application.ScreenUpdating = false;
,然后在完成后将其设置回Application.ScreenUpdating = true;
。这有助于提高性能。
您可能还需要先考虑抓取所有图片,然后将它们放入List<T>
对象中,其高度,目标oRange
和oRange.RowHeight
已预先确定,然后再将它们放入Excel中。当你在BackgroundWorker中运行它时,这可能是你想要做的。结合上面的#1,您可能会看到一些改进。
如果您使用的是Excel 2007/2010(这将不与早期版本一起使用),您可以使用Open XML SDK。它可能会远远快得多。这不是客户端操作 - 在执行此操作时应关闭XLSX,但结果只会与从服务器通过线路传输图片一样慢。以下是使用SDK将多张图片插入Excel的示例:http://polymathprogrammer.com/2010/11/10/how-to-insert-multiple-images-in-excel-open-xml/
答案 1 :(得分:0)
C# - &gt; Office COM很慢。结束。我一直在使用EPPlus,虽然它允许您创建Excel无法打开的xlsx文件,但速度要快得多。它声称也做照片。