Javascript excel目标图表到ppt特定占位符

Javascript excel目标图表到ppt特定占位符,javascript,excel,vba,powerpoint,Javascript,Excel,Vba,Powerpoint,我需要将一些图表从excel复制到ppt演示文稿。演示文稿与某些占位符保持不变,以接收时不时更新的图表。我需要能够决定哪些图表指向哪个占位符,因为我希望能够在没有约束的情况下更改excel文件或ppt。因此,我想使用一个带有外部字典的.json文件,它告诉我哪个图表从哪个工作表转到哪个占位符中的哪个幻灯片。看起来像这样 {'chart1':{'xl_sheet_name':'Summary numbers', 'xl_chart_name':'Chart 9', 'p

我需要将一些图表从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个占位符,第一个是标题,然后有三个图表要粘贴。我做了一个循环,因为图表会很多,不同的幻灯片。我把它从VBA中拿出来,因为它看起来更漂亮,而且能够很快地改变它

我的问题是,当我运行代码时,第三个占位符没有被明显地选择,并且图表被粘贴在幻灯片的中间,而不是在它所属的地方粘贴。 你能帮我让它工作和/或建议其他合适的方法吗

非常感谢

菲利波

ps我用来解析javascript的类,我最初是在网上找到的,但现在链接断开了。不管怎样,我改变了一些东西,就是这样:
.

您不需要选择任何内容。。。幻灯片/占位符。。。这样做会减慢进程。此外,最好通过名称或标记来访问占位符,而不是依赖形状索引。不过,只要您能够控制演示文稿,就可以小心不要以更改占位符数量/顺序的方式对其进行编辑。就个人而言,我倾向于不使用占位符;您可以将坐标/大小放入控制文件中。谢谢您的回答,最后我根据自己的目的修改了john peltier的代码,并接受了它复制所有图表的事实。