我正在使用MS Office互操作程序集构建一个Powerpoint插件,该插件可以动态插入幻灯片和图表。但是在插入过程中,最多需要20秒才能完成从插入幻灯片到插入图表的过程。
进行广泛的日志记录后,我注意到几行代码使我们的应用程序停留了20秒钟以上。 这些行如下:
powerpointChartObj.SetSourceData(Source:=String.Format("=Sheet1!A1:B{0}", 5))
powerpointSlideObject.Shapes("some shape name")
在幻灯片插入过程中,我们不断使用PowerPoint图表和幻灯片对象,但有时在上面的其中一行上会阻止它。而且它在哪条线上受阻是随机的。
以下是我们正在使用的办公室图书馆:
测试环境
Office 2016
Windows 8.1 + Windows 10
16 GB RAM,英特尔酷睿i5-4570 CPU
任何解决方案或解决方法都将受到高度赞赏。
PS。还尝试使用Office 15.0对象库
已更新
我已经尝试过EnableEvents并将其永远设置为false。它可以在图表插入/更新方案期间提高性能,但是如果我们连续调用PowerPoint COM组件(例如,形状,幻灯片等以操纵PowerPoint的东西),PowerPoint将再次卡住约20秒。不确定在PowerPoint互操作中是否有与EnableEvents类似的东西。
答案 0 :(得分:2)
我还没有发表评论的权利,所以如果这不是完美的答案,请多多包涵。
我在办公产品自动化方面的经验是通过VBS,但是它们都使用COM对象,因此它的工作原理可能相同。我主要使用Excel,因此powerpoint并不是我最强的方面。
我的建议是在添加数据时暂时禁用屏幕更新/事件。
这是一个示例(使用VBS):
Application.Calculation = xlCalculationManual 'Excel specific
Application.ScreenUpdating = False 'All office products
Application.DisplayStatusBar = False 'All office products
Application.EnableEvents = False 'All office products
'your code running here
Application.EnableEvents = True 'All office products
Application. DisplayStatusBar = True 'All office products
Application.ScreenUpdating = True 'All office products
Application.Calculation = xlCalculationAutomatic 'Excel specific
还避免在数据中使用大量“选择”调用,因为这会降低速度。
在我的VBS脚本中,通过使用这种技术,我几乎没有滞后或出现问题。我还建议您在添加大量数据的同时创建自己的“请稍候”弹出屏幕。对于某些呼叫,即使您在Powerpoint / Excel中手动进行,也要花费一些时间。
祝你好运,办公室自动化可能会令人生厌:)