Как разместить диаграмму, скопированную из Excel, в PowerPoint с помощью CommandBars? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь скопировать некоторые диаграммы (встроенные) в разные листы книги Excel, используя vbscript, на разные слайды PowerPoint. При этом я хотел бы сохранить связь между таблицей Excel и powerpoint, и поэтому я использовал приведенный ниже фрагмент кода, который позволяет мне сохранять форматирование и ссылки (вместо простой вставки или PasteSpeical. Есть ли другой способ?) :

For i = 1 to TotalNumWorkSheets 'I iterated with indices.
    Set pptSlide = pptPres.Slides.Add(i, 11) 'There is one opening slide before this.
    set ws = wb.Worksheets(i)
    ws.ChartObjects(1).Chart.ChartArea.Copy
    pptApp.CommandBars.ExecuteMso("PasteExcelChartSourceFormatting")
    pptApp.CommandBars.ReleaseFocus

    With pptSlide
        .Shapes.Title.TextFrame.TextRange.Text = objCurSheet.Name
        'Adding some more textboxes here. Working fine. Position checks out in PPT.
        .Shapes(.Shapes.Count).Left = 20  'Doesn't work for all slides.
    End With
Next

Код работает и копирует все диаграммы, создает заголовки, добавляет новый текст, как и ожидалось, но я не могу расположить диаграммы на отдельных слайдах, потому что после команды ExecuteMso я не знаю, как получить доступ к ссылке на график. В одном из сообщений SO я прочитал, что вставка с использованием этого метода приводит к потере выбора диаграммы, но вы можете получить доступ к последнему объекту .Shapes, так как вставка всегда добавляет объект в конец списка. Это всегда так? Я попытался получить доступ и позиционировать свою диаграмму путем доступа к последнему объекту, но он работает только для первого слайда цикла (т.е. первая вставленная диаграмма смещена влево = 20). Остальные все графики на других слайдах центрированы. Может кто-нибудь объяснить, где и как добавить параметры диаграммы форматирования? Я столкнулся с еще более странной проблемой. Если я увеличу количество листов, даже первый график потеряет свое левое форматирование. Приведенный выше код - единственное место, где я добавляю форматирование, поэтому я не знаю, что происходит. Я уверен, что не правильно его форматирую.

Большое спасибо за ваши предложения.

Edit: еще одна вещь, которую я протестировал. я использую WScript.Sleep 500 код перед завершением цикла For, поскольку он дает достаточно времени для завершения предыдущих операций (по крайней мере, это я понял из многих других поисков в Google).

1 Ответ

0 голосов
/ 03 января 2019

Итак, после некоторого поиска и тестирования я нашел решение (по крайней мере, для моего случая).

  1. Переместил WScript.Sleep 1000 (500 у меня не сработало)Оператор чуть ниже CommandBars.ReleaseFocus.

Теперь это имеет некоторый смысл, поскольку копирование, вставка и связывание диаграмм из Excel требуют времени.Особенно с исходным форматированием.После этого есть только генерация текста, которая, я считаю, не такая тяжелая.

Сброс всех установленных переменных объекта, когда они не используются.Особенно те, которые связаны с ключевым словом «С».
set obj = CreateObject() 
With obj
    'Do something here.
End With
set obj = Nothing

Очевидно, не очистка их также может помешать вам закрыть приложения даже после использования .Close и .Quitметод.По крайней мере, это то, что я заметил.Я обнаружил, что PowerPoint.exe работает в диспетчере задач, когда ничего не открывалось.

После выполнения вышесказанного я могу копировать с форматированием диаграмм, а также устанавливать положение диаграмм.Странная проблема с большим количеством рабочих листов также исчезла.Надеюсь, это может помочь другим.Если кто-то считает, что наблюдения неверны или неприятны, пожалуйста, исправьте.

...