【发布时间】: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 中处理页面设置格式的经验,而且它总是运行缓慢。 编辑: 实际上,我有一件事可能会有所帮助:
Top和Bottom默认情况下,Portrait或Landscape的保证金为.75。所以你可以删除这些行。 -
我可以支持@ScottHoltzman 的评论。我编写了广泛使用
PageSetup的代码,但运行速度很慢。不过比手动操作要快得多!尤其是第 23 次 :)。 -
如果您要连接到 Excel 2010 或更高版本,请使用
Application.PrintCommunication。在您的 Sub 顶部将其设置为 False,在末尾设置为 True -
@chrisneilsen,我以前从未听说过。很高兴知道。 Tekito,很高兴听到使用它的结果。
-
@ChrisNeilsen 的建议有所帮助。我会给他答案,但既然评论不能成为答案,我就自己打一个。
标签: vb.net excel performance office-interop