Возможно обновить существующие данные диаграммы без Activate
согласно ответу @ mooseman.
Однако, если диаграмма новая / вставлена во время выполнения, насколько я знаю, это невозможно сделать с помощью взаимодействия, так как метод AddChart
добавляет диаграмму и одновременно создает / активирует книгу Excel.Хотя вам может не понадобиться вызывать метод Activate
, нет способа вставить или добавить новую диаграмму, которая не требует открытия экземпляра Excel.Обойти это невозможно, это только то, как функционирует пользовательский интерфейс.
Обновление данных в EXISTING Chart
/ ChartData
Ниже собственного PowerPoint VBA, нодолжен легко переноситься в Excel с соответствующими ссылками
Sub test()
Dim PPT As PowerPoint.Application
Dim pres As Presentation
Dim sld As Slide
Dim shp As Shape
Dim cht As Chart
Dim rng As Object ' Excel.Range
Set PPT = Application 'GetObject(,"PowerPoint.Application")
Set pres = ActivePresentation
Set sld = pres.Slides(1)
Set shp = sld.Shapes(1)
Set cht = shp.Chart
Call changeData(cht, 6.3)
pres.Slides.AddSlide pres.Slides.Count + 1, sld.CustomLayout
Set sld = pres.Slides(pres.Slides.Count)
sld.Shapes.AddChart().Chart.ChartData.Workbook.Application.WindowState = -4140
Set cht = sld.Shapes(1).Chart
Call changeData(cht, 3.9)
End Sub
Sub changeData(c As Chart, v As Double)
Dim rng As Object
With c.ChartData
Set rng = .Workbook.Worksheets(1).ListObjects(1).Range
rng.Cells(2, 2).Value = v ' etc.
.Workbook.Close
End With
End Sub
Требуется использовать блок With
в VBA.
Некоторые краткие тесты предполагают, что это также можно выполнить через Interop изPython, используя win32com
:
from win32com import client
ppt = client.Dispatch("PowerPoint.Application")
pres = ppt.ActivePresentation
sld = pres.Slides[0]
cht = sld.Shapes[0].Chart
cht.ChartData.Workbook.Worksheets[0].ListObjects[0].Range.Cells(2,2).Value = 9
А также в C #:
using Microsoft.Office.Interop.PowerPoint;
public static void foo(int value = 10)
{
Application ppt = new Microsoft.Office.Interop.PowerPoint.Application();
Presentation pres = ppt.ActivePresentation;
Slide sld = pres.Slides[1];
Chart cht = sld.Shapes[1].Chart;
{
cht.ChartData
.Workbook.Worksheets[1].ListObjects[1].Range.Cells(2, 2).Value = value;
}
}
Чтобы свернуть окно ChartData
/ Workbook
:
На практике яУ меня не было надежной удачи при использовании метода With
.Если вы не можете заставить его работать, то следующий лучший вариант - немедленно свернуть окно:
Sub changeData(c As Chart, v As Double)
Dim rng As Object
With c.ChartData
.Activate
.Workbook.Application.WindowState = -4140 '## Minimize Excel
'## DO STUFF:
Set rng = .Workbook.Worksheets(1).ListObjects(1).Range
rng.Cells(2, 2).Value = v ' etc.
.Workbook.Close
End With
End Sub
Обратите внимание, что этот метод кратко мигает Excel на экране, и это отстой , потому что в этот короткий момент он может перехватывать нажатия клавиш / и т. Д.