我需要将一些图表从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
可能改编自john peltier的网站和我在网上找到的其他一些东西。 字典的意思是在幻灯片中我有4个占位符,第一个是标题,而不是有三个图表要粘贴。我做了一个循环因为图表会很多,不同的幻灯片。我把它从VBA中拿出来,因为它看起来更好,能够快速改变它。
我的问题是,当我运行代码时,第三个占位符显然没有被选中,图表被粘贴在幻灯片的中间,而不是粘贴到它所属的位置。
你能帮助我让它发挥作用和/或提出其他合适的方法吗?
非常感谢,
菲利普
ps我用于解析javascript的类,我最初在网上找到它,但现在链接已关闭。无论如何我改变了一些东西,所以这里是: my java parser