在Excel中以编程方式导入图片变得太慢了

我已经写了一个Windows窗体应用程序,其中对于Excel文件的每一行,我导入位于我的Intranetnetworking上的服务器上的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中运行,一切正常,除了一段时间后,这个过程变得非常缓慢。 我已经在网上寻找解决scheme,但我什么也没find。 我find的唯一解决scheme是在Excel中导入文本而不是图片的代码段。

如果您有任何想法,请告诉我。 考虑到我的用户抱怨,但我认为在Excel中导入1500-2000图像的软件应该是相当慢的,不是吗?

还有一件事,正如你所看到的,我用COM来完成这项工作。 有没有其他的方式来导入图片?

非常感谢!!!

有了COM,把数据从服务器上拉下来,就像你在做什么一样,你可能只会看到一些微小的改进。

首先,对于Excel应用程序,您应该设置Application.ScreenUpdating = false; 在你的例程开始,然后完成后,将其设置回Application.ScreenUpdating = true; 。 这将有助于提高性能。

你也可以考虑先把所有的图片放在一个List<T>对象中,然后把它们的高度,目标oRangeoRange.RowHeight都放在Excel中。 当你在BackgroundWorker中运行这个时,这可能是你想要做的。 结合上面的#1,你可能会看到一些改进。

如果您使用的是Excel 2007/2010(这不适用于早期版本),则可以改为使用Open XML SDK。 这很可能要快得多。 这不是一个客户端操作 – 虽然这样做时XLSX应该被closures,但结果只会像从服务器上传输图片一样慢。 以下是如何使用SDK将多张图片插入Excel的示例: http : //polymathprogrammer.com/2010/11/10/how-to-insert-multiple-images-in-excel-open-xml/

C# – > Office COM很慢。 结束。 我一直在使用EPPlus ,虽然它允许您创buildExcel无法打开的xlsx文件,但速度要快得多。 它声称也做图片。