いくつかのグラフを Excel から ppt プレゼンテーションにコピーする必要があります。プレゼンテーションは、時々更新されるチャートを受け取るために、いくつかのプレースホルダーと同じままです. 制約なしで Excel ファイルまたは ppt を変更できるようにしたいので、どのチャートをどのプレースホルダーに配置するかを決定できる必要があります。したがって、どのシートのどのグラフがどのプレースホルダーのどのスライドに移動するかを教えてくれる外部辞書で .json ファイルを使用したいと考えています。このように見えます
{'chart1':{'xl_sheet_name':'Summary numbers',
'xl_chart_name':'Chart 9',
'ppt_tgt_slide':10,
'ppt_tgt_placeholder':2},
'chart2':{'xl_sheet_name':'Summary numbers',
'xl_chart_name':'Chart 10',
'ppt_tgt_slide':10,
'ppt_tgt_placeholder':3},
'chart3':{'xl_sheet_name':'Summary numbers',
'xl_chart_name':'Chart 11',
'ppt_tgt_slide':10,
'ppt_tgt_placeholder':4}}
次に、コードは次のようになります
Sub charts_2_ppt()
Dim strText As String
Dim lib As New JSONLib
Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
'Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
'Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide
strText = GetFileContent(ThisWorkbook.Path & "\parameters.json")
Set charts_dict = lib.parse(CStr(strText))
'routine
For Each v In charts_dict
Worksheets(charts_dict(v)("xl_sheet_name")).ChartObjects(charts_dict(v)("xl_chart_name")).Copy 'ChartArea.Copy
With PPPres
.Slides(charts_dict(v)("ppt_tgt_slide")).Select 'otherwise it's messed up.
.Slides(charts_dict(v)("ppt_tgt_slide")) _
.Shapes.Placeholders(charts_dict(v)("ppt_tgt_placeholder")).Select 'msoCTrue
.Windows(1).View.PasteSpecial '(ppPasteMetafilePicture)
End With
'Sheets(charts_dict(v)("xl_sheet_name")) _
.ChartObjects(charts_dict(v)("xl_chart_name")).Chart.HasTitle = True
Next
Set charts_dict = Nothing
Set lib = Nothing
End Sub
Function GetFileContent(Name As String) As String
Dim intUnit As Integer
On Error GoTo ErrGetFileContent
intUnit = FreeFile
Open Name For Input As intUnit
GetFileContent = Input(LOF(intUnit), intUnit)
ErrGetFileContent:
Close intUnit
Exit Function
End Function
おそらく、ジョン・ペルティエのサイトや、私がオンラインで見つけた他のものから改作されました。辞書の意味は、スライドに 4 つのプレースホルダーがあり、最初はタイトルであり、貼り付けるグラフが 3 つあるということです。チャートが多くなり、さまざまなスライドになるため、ループを作成しました。見栄えが良く、すばやく変更できるため、VBAから取り出しました。
私の問題は、コードを実行すると、3 番目のプレースホルダーが明らかに選択されておらず、チャートが属する場所ではなく、スライドの中央に貼り付けられることです。
それを機能させたり、他の適切な方法を提案したりできますか?
どうもありがとう、
フィリッポ
ps javascript の解析に使用したクラスです。最初はオンラインで見つけましたが、現在はリンクが切れています。とにかく、私は何かを変更したので、ここにあります: my Java parser .