Excel自动化工作非常缓慢!

在我的电脑上,报告是在大约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; 

它可能是什么?
先谢谢你。

将默认打印机更改为本地打印机而不是networking打印机。 确实,popupnetworking电缆。 然后让你的局域网pipe理员发布到serverfault.com

SpreadsheetGear for .NET可能会显着加快您的应用程序。 您可以在这里阅读我们几位客户的报价 – 其中许多报价指出了SpreadsheetGear for .NET提供的性能改进。

如果您想亲自尝试,可以在这里下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC

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看到一个不错的性能改进的同一主题: 如何在Excel VBA中打印速度更快? )