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 图表和幻灯片对象,但有时它会在上面的某一行上被阻塞。它在哪条线上被阻塞是随机的。
以下是我们正在使用的办公图书馆:
- Microsoft Office 16.0 对象库
- 微软 Excel 16.0 对象库
- Microsoft Graph 16.0 对象库
- Microsoft PowerPoint 16.0 对象库
- Microsoft Word 16.0 对象库
- Microsoft.Office.Tools.dll
- Microsoft.Office.Tools.Common.dll
- Microsoft.Office.Tools.Common.v4.0.Utilities.dll
- Microsoft.Office.Tools.v4.0.Framework.dll
- 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.
祝你好运,办公自动化可能会很麻烦:)
我正在使用 MS Office 互操作程序集构建一个 Powerpoint 插件,它可以动态插入幻灯片和图表。但在插入过程中,从插入幻灯片到插入图表的过程最多需要 20 秒才能完成。
进行大量日志记录后,我注意到我们的应用程序在几行代码中卡住了 20 多秒。 这是那些行:
powerpointChartObj.SetSourceData(Source:=String.Format("=Sheet1!A1:B{0}", 5))
powerpointSlideObject.Shapes("some shape name")
在幻灯片插入过程中,我们不断地使用 PowerPoint 图表和幻灯片对象,但有时它会在上面的某一行上被阻塞。它在哪条线上被阻塞是随机的。
以下是我们正在使用的办公图书馆:
- Microsoft Office 16.0 对象库
- 微软 Excel 16.0 对象库
- Microsoft Graph 16.0 对象库
- Microsoft PowerPoint 16.0 对象库
- Microsoft Word 16.0 对象库
- Microsoft.Office.Tools.dll
- Microsoft.Office.Tools.Common.dll
- Microsoft.Office.Tools.Common.v4.0.Utilities.dll
- Microsoft.Office.Tools.v4.0.Framework.dll
- 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.
祝你好运,办公自动化可能会很麻烦:)