PowerPoint VBA — регулярно обновляйте связанный график из Excel

#excel #vba #powerpoint

#excel #vba #powerpoint

Вопрос:

Я пытаюсь создать эту систему, в которой у меня есть презентация PowerPoint со связанным графиком из внешнего файла Excel. Я видел, что могу щелкнуть правой кнопкой мыши этот график в PowerPoint и нажать «Обновить ссылку», и график автоматически обновляется.

Но что, если я хочу, чтобы это было автоматизировано? Если бы это можно было сделать без создания надстройки, это было бы здорово. Итак, какие обработчики событий есть в PowerPoint? Я думаю, что есть событие для SlideChanged или что-то в этомроде? Могу ли я, возможно, запустить презентацию в бесконечном цикле и обновлять ссылку при каждом новом переключении слайдов? Возможно, существует огромное количество графиков. И по одному слайду для каждого раздела графиков.

Или какие-нибудь другие яркие идеи? Система, которую я пытаюсь создать, в основном представляет собой платформу для сбора данных и отображения их в любой форме, которая может потребоваться. Данные автоматически импортируются из экономичного программного обеспечения в базу данных. Итак, я создал приложение командной строки, которое в основном открывает файл Excel и запускает макрос (собирает свежие данные и копирует их на рабочий лист). Это приложение командной строки настроено на запуск в определенное время с помощью запланированных задач. И именно из этих данных я хочу автоматически отображать графики.

На самом деле я сделал большую часть этого сам 🙂

Вот код для VB.NET приложение (может использоваться как приложение командной строки)

 Imports Microsoft.Office.Interop
Public Class Form1

    Dim oPPTApp

    Sub updatePPTGraph()    
        For Each oSlide In oPPTApp.ActivePresentation.Slides
            For Each oShape In oSlide.shapes    
                If oShape.Type = 10 Then
                    oShape.LinkFormat.Update()
                End If

            Next
        Next
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        oPPTApp = New PowerPoint.Application
        oPPTApp.visible = True
        Dim oPresentation As PowerPoint.Presentation

        oPresentation = oPPTApp.Presentations.Open("C:UserskennyDocumentsCharttest.pptx")
        updatePPTGraph()
    End Sub
End Class
  

Это, безусловно, начало. Мне нужно выяснить, можно ли это сделать и во время показа слайд-шоу. Но я думаю, что это должно быть возможно. Обновлю, когда мне удастся получить что-то, о чем стоит упомянуть 🙂

Комментарии:

1. Другой способ взглянуть на это — пойти противоположным путем — автоматизировать Excel с помощью приложения. Вовремя для создания новой или обновленной версии графика PowerPoint с запланированными интервалами.

2. Хорошо, но как будет обновляться график PowerPoint? Если презентация уже запущена и отображается на телевизорах босса в его офисе?

3. О, это другой сценарий. Я раньше не сталкивался с обновлением запущенных слайд-шоу — я не уверен, что это можно сделать. Я изучу это.

4. Я полагаю, вы помогли мне ранее в создании надстройки для запуска PowerPoint. Возможно, это можно использовать, а затем создать какой-нибудь таймер?

5. Возможно ли создать приложение Visual Studio, которое в основном запускает презентацию и выполняет обновление с помощью этого кода? В Visual Studio есть таймеры 🙂

Ответ №1:

Изменение базовых слайдов (т. Е. из внешнего приложения Excel) должно обновить текущее шоу; текущий слайд в текущем шоу обычно не отображает обновление, если вы не принудительно перерисовываете, но когда он снова появляется в шоу, обновление должно быть видно.

В целом, было бы проще автоматизировать PPT из Excel, чем позволять ит контролировать ситуацию и загружать обновления по требованию … по крайней мере, так было бы, если вы не хотите включить надстройку для обработки событий в PPT.