【问题标题】:Slow performance setting Excel sheet print settings性能慢设置 Excel 工作表打印设置
【发布时间】:2016-01-03 05:52:10
【问题描述】:

使用 Excel 的 Microsoft Office 互操作库,我在 VB.Net 中编写了一个例程,该例程创建大量 Excel 工作表,填充它们,然后格式化它们以供打印。对于每个工作表,我调用这个小方法来设置打印设置:

  Public Sub SetDefaultReportPrintSettings(orientation As ReportSheetOrientation, ws As Excel.Worksheet)

        CType(ws.Parent, Excel.Workbook).Application.Windows(1).Zoom = 90

        With ws.PageSetup
            Select Case orientation
                Case ReportSheetOrientation.Portrait : .Orientation = Excel.XlPageOrientation.xlPortrait
                Case ReportSheetOrientation.Landscape : .Orientation = Excel.XlPageOrientation.xlLandscape
            End Select
            .Zoom = False
            .FitToPagesTall = 1
            .FitToPagesWide = 1
            .LeftMargin = ws.Application.InchesToPoints(If(orientation = ReportSheetOrientation.Portrait, 0.75, 0.5))
            .RightMargin = ws.Application.InchesToPoints(0.5)
            .TopMargin = ws.Application.InchesToPoints(0.75)
            .BottomMargin = ws.Application.InchesToPoints(0.75)
            .CenterHorizontally = True
        End With

    End Sub

当我进行基准测试时,仅这个 sub 显然需要大约 0.98 秒。我不明白为什么切换少数设置会花费那么长时间。它可能看起来不多,但是当生成数百(或更多)张纸时,这确实增加了常规时间。 Excel application 实例是隐藏的,所以我认为这不是屏幕更新问题。

有什么方法可以加快速度?

【问题讨论】:

  • 我没有任何方法可以提高速度,但我确实有很多在 VBA 中处理页面设置格式的经验,而且它总是运行缓慢。 编辑: 实际上,我有一件事可能会有所帮助:TopBottom 默认情况下,PortraitLandscape 的保证金为 .75。所以你可以删除这些行。
  • 我可以支持@ScottHoltzman 的评论。我编写了广泛使用PageSetup 的代码,但运行速度很慢。不过比手动操作要快得多!尤其是第 23 次 :)。
  • 如果您要连接到 Excel 2010 或更高版本,请使用 Application.PrintCommunication。在您的 Sub 顶部将其设置为 False,在末尾设置为 True
  • @chrisneilsen,我以前从未听说过。很高兴知道。 Tekito,很高兴听到使用它的结果。
  • @ChrisNeilsen 的建议有所帮助。我会给他答案,但既然评论不能成为答案,我就自己打一个。

标签: vb.net excel performance office-interop


【解决方案1】:

Chris Neilen 的评论(在 PageSetup 修改期间设置 Application.PrintCommunication=False)显着提高了我的运行时间。根据文档,默认情况下 Excel 会主动与打印机通信,这有助于解释性能缓慢的原因。

通过将 Excel 的视图设置为 Normal 而不是 Page Break Preview,我获得了更大的速度提升。这产生了很大的不同,不是在PageSetup 代码中,而是在我的其他 Excel 例程中。该文档再次说明 Excel 会针对分页符进行额外计算。

https://msdn.microsoft.com/en-us/library/office/ff835544.aspx

https://support.microsoft.com/en-us/kb/199505

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    相关资源
    最近更新 更多