PowerPoint 互操作程序集缓慢问题

PowerPoint Interop Assemblies Slowness Issue

我正在使用 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. 微软 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 内存,英特尔酷睿 i5-4570 CPU

任何解决方案或解决方法将不胜感激。

PS。还尝试使用 Office 15.0 对象库

已更新

我试过 EnableEvents 并将其永远设置为 false。它提高了图表 insertion/update 场景中的性能,但如果我们不断调用 PowerPoint COM 组件(例如形状、幻灯片等来操作 PowerPoint 的东西),PowerPoint 会再次卡住大约 20 秒。不确定 PowerPoint 互操作中是否有类似于 EnableEvents 的东西可用。

我还没有发表评论的权利,如果这不是完美的答案,请多多包涵。

我在办公产品自动化方面的经验是通过 VBS,但它们都使用 COM 对象,所以它的工作原理可能相同。我主要使用 Excel,所以 powerpoint 不是我的强项。

我的建议是在添加数据时暂时禁用 screenupdates/events。

下面是一个例子(使用 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

同时避免在数据中使用大量 "select" 调用,因为它会减慢速度。

在我的 VBS 脚本中,通过使用这种技术,我或多或少没有遇到任何滞后或问题。我还建议您在添加大量数据时创建自己的 "please wait" 弹出屏幕。对于某些呼叫确实需要时间,即使您在 Powerpoint 中手动进行也是如此 / Excel.

祝你好运,办公自动化可能会很麻烦:)