Slow Microsoft.Office.Interop.Excel

本文关键字:Excel Interop Office Microsoft Slow | 更新日期: 2023-09-27 18:03:10

在我的应用程序中,我使用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互操作COM对象的通信,以及如何做才能使它更快吗?

Slow Microsoft.Office.Interop.Excel

有很多因素会影响你的互操作代码的性能:

    <
  • Excel版本/gh>
  • 。. NET框架版本
  • SDK版本(如果使用VSTO)
  • 服务包存在/不存在
  • 机器硬件规格
  • 执行时的资源使用(RAM, CPU, I/O等)
  • 机器上安装的其他COM应用程序的数量

有一些方法可以加速Excel互操作代码,比如隐藏窗口(你已经这样做了),并在操作期间将ScreenUpdating属性设置为false。

但是,说了这么多,COM互操作从根本上来说是缓慢而笨拙的。这是处理Excel文档效率最低的方式。您最好使用OpenXML SDK来实现这一点。它是100%托管代码,没有外部依赖关系(甚至不需要在目标机器上安装Office)。