1

いくつかのグラフを 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 .

4

0 に答える 0