[英]Slow Microsoft.Office.Interop.Excel
在我的应用程序中,我正在使用C#代码自动生成Excel文件。 此应用程序可用于多种环境(计算机)。 在一台计算机上,生成此文件的速度比在所有其他计算机上要慢。
例如,以下代码在该计算机上的运行速度降低了90%:
using Excel = Microsoft.Office.Interop.Excel;
...
Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook xlBook = workbooks.Open(@"C:\a\a.xlsx", 0, false, 6, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets.get_Item("Sheet1");
Excel.Range oRange = xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[2, 2]);
object[,] a = new object[1, 1];
a[0, 0] = "1";
oRange.Value2 = a;
xlBook.Save();
xlApp.Visible = false;
xlApp.Workbooks.Close();
get_Range方法在该计算机上慢2倍。
有人知道我如何找出减慢Excel Interop COM对象通信的速度以及如何使其更快地通信吗?
有很多因素可能会影响互操作代码的性能:
有多种方法可以加快Excel互操作代码的速度,例如隐藏窗口(您已经在执行此操作)以及在操作期间将ScreenUpdating
属性设置为false。
但是,综上所述,COM互操作从根本上是缓慢且笨拙的。 这是使用Excel文档效率最低的方法。 为此,您最好使用OpenXML SDK 。 它是100%托管代码,没有外部依赖关系(甚至不需要在目标计算机上安装Office)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.