PowerPoint互操作程序集慢度问题

时间:2018-10-26 08:18:48

标签: c# vb.net interop office-interop powerpoint-vba

我正在使用MS Office互操作程序集构建一个Powerpoint插件,该插件可以动态插入幻灯片和图表。但是在插入过程中,最多需要20秒才能完成从插入幻灯片到插入图表的过程。

进行广泛的日志记录后,我注意到几行代码使我们的应用程序停留了20秒钟以上。 这些行如下:

powerpointChartObj.SetSourceData(Source:=String.Format("=Sheet1!A1:B{0}", 5))

powerpointSlideObject.Shapes("some shape name")

在幻灯片插入过程中,我们不断使用PowerPoint图表和幻灯片对象,但有时在上面的其中一行上会阻止它。而且它在哪条线上受阻是随机的。

以下是我们正在使用的办公室图书馆:

  1. Microsoft Office 16.0对象库
  2. Microsoft Excel 16.0对象库
  3. Microsoft Graph 16.0对象库
  4. Microsoft PowerPoint 16.0对象库
  5. Microsoft Word 16.0对象库
  6. Microsoft.Office.Tools.dll
  7. Microsoft.Office.Tools.Common.dll
  8. Microsoft.Office.Tools.Common.v4.0.Utilities.dll
  9. Microsoft.Office.Tools.v4.0.Framework.dll
  10. Microsoft.Vbe.Interop

测试环境

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类似的东西。

1 个答案:

答案 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中手动进行,也要花费一些时间。

祝你好运,办公室自动化可能会令人生厌:)