Проблема медлительности сборок взаимодействия PowerPoint - PullRequest
0 голосов
/ 26 октября 2018

Я использую сборки взаимодействия 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

Тест Environemnt

Office 2016

Windows 8.1 + Windows 10

16 ГБ ОЗУ, процессор Intel Core i5-4570

Любое решение или обходной путь будут высоко оценены.

PS.Также пытался использовать библиотеки объектов Office 15.0

Обновлено

Я пробовал EnableEvents и установил его навсегда false.Это повышает производительность во время сценариев вставки / обновления диаграмм, но если мы постоянно обращаемся к компонентам PowerPoint COM (например, фигурам, слайдам и т. Д. Для манипулирования объектами PowerPoint), PowerPoint снова зависает примерно на 20 секунд.Не уверен, что есть что-то похожее на EnableEvents, доступное во взаимодействии PowerPoint.

1 Ответ

0 голосов
/ 04 ноября 2018

У меня пока нет прав комментировать, так что терпите меня, если это не идеальный ответ.

Мой опыт автоматизации офисных продуктов связан с 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.

Удачи, автоматизация делопроизводства может быть неприятной:)

...