【问题标题】:Excel Automation works very slowly!Excel 自动化工作非常缓慢!
【发布时间】:2010-12-27 20:52:22
【问题描述】:

在我的电脑上生成报告大约需要 3-4 秒,之前在所有电脑上都是这样。但最近在办公室的几台计算机上生成报告开始需要 30-40 秒。在其他计算机上它仍然很快。我试图重新安装 MS Office,但没有成功。

例如,这段代码需要 !!! 3 !!!执行秒数:

xlWS.Name = "INVOICE";
xlWS.PageSetup.PaperSize = XlPaperSize.xlPaperA4;
xlWS.PageSetup.TopMargin = xl.CentimetersToPoints(1.5);
xlWS.PageSetup.LeftMargin = xl.CentimetersToPoints(1);
xlWS.PageSetup.BottomMargin = xl.CentimetersToPoints(1.5);
xlWS.PageSetup.RightMargin = xl.CentimetersToPoints(1);
xlWS.PageSetup.Zoom = 60;

会是什么?
提前谢谢你。

【问题讨论】:

  • 在您的电脑上创建新的用户配置文件并在该用户下运行代码时仍然很慢吗?
  • 网络或本地打印机?最近打印机或网络是否发生了变化?
  • 最近好像更换了默认打印机。或者可能是因为他们在使用默认打印机的网络计算机上安装了 Windows 7。我会进一步调查。无论如何,当我将默认打印机更改为本地打印机时,它应该可以快速运行。谢谢你。如果您将评论更改为答案,我会为您加分:)

标签: c# .net excel com automation


【解决方案1】:

将默认打印机更改为本地打印机而不是网络打印机。弹出网络电缆,以确保。然后让您的 LAN 管理员发布到 serverfault.com

【讨论】:

  • 最近好像更换了默认打印机。或者可能是因为他们在网络计算机上使用默认打印机安装了 Windows 7。我会进一步调查。无论如何,当我将默认打印机更改为本地打印机时,它应该可以快速运行。谢谢。
【解决方案2】:

SpreadsheetGear for .NET 可能会显着加快您的应用程序。您可以阅读我们的一些客户here 的报价 - 其中许多报价指出了 SpreadsheetGear 为 .NET 提供的性能改进。

如果您想自己尝试,可以下载免费试用版here

免责声明:我拥有 SpreadsheetGear LLC

【讨论】:

    【解决方案3】:

    Worksheet.PageSetup 属性在设置时非常慢,但简单地获取值非常快。

    因此,最好的方法是先检查每个值,确保您需要设置它,然后只设置您需要的属性。此外,还可以设置 'Application.ScreenUpdating = False' 和 'Application.Calculation = xlCalculationManual'。

    以您的代码为起点,更新后的代码可能如下所示:

    Excel.Application excelApp = xlWS.Application;
    
    bool origScreenUpdating = excelApp.ScreenUpdating;
    
    Excel.XlCalculation origCalcMode = excelApp.Calculation;
    
    try
    {
        myExcelApp.ScreenUpdating = False;
    
        myExcelApp.Calculation = xlCalculationManual;
    
        xlWS.Name = "INVOICE";
    
        if (xlWS.PageSetup.PaperSize != XlPaperSize.xlPaperA4)
        {
            xlWS.PageSetup.PaperSize = XlPaperSize.xlPaperA4;
        }
    
        if (xlWS.PageSetup.TopMargin != xl.CentimetersToPoints(1.5))
        {
            xlWS.PageSetup.TopMargin = xl.CentimetersToPoints(1.5);
        }
    
        if (xlWS.PageSetup.LeftMargin != xl.CentimetersToPoints(1))
        {
            xlWS.PageSetup.LeftMargin = xl.CentimetersToPoints(1);
        }
    
        if (xlWS.PageSetup.BottomMargin != xl.CentimetersToPoints(1.5))
        {
            xlWS.PageSetup.BottomMargin = xl.CentimetersToPoints(1.5);
        }
    
        if (xlWS.PageSetup.RightMargin != xl.CentimetersToPoints(1))
        {
            xlWS.PageSetup.RightMargin = xl.CentimetersToPoints(1);
        }
    
        if (xlWS.PageSetup.Zoom != 60)
        {
            xlWS.PageSetup.Zoom = 60;
        }
    }
    finally
    {
        myExcelApp.ScreenUpdating = origScreenUpdating;
        myExcelApp.Calculation = origCalcMode;
    }
    

    这是您可以在 Excel 方面做的最好的事情 - 它通常会很有帮助。但是,我不太确定这对您的情况有多大帮助,因为您可能会进行许多与默认设置不同的设置更改。因此,如果确实需要进行所有这些更改,那么首先检查是否需要生成该值可能对您没有帮助。

    但我为你祈祷...

    -- 迈克

    (顺便说一句,为了交叉参考,这是我在同一主题上给出的 VBA 答案,其中 OP 看到了很好的性能改进:How to print faster in Excel VBA?

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      相关资源
      最近更新 更多