0

我们有一些针对不同受众的(powerpoint)pptx文件

我正在考虑根据目标受众合并不同的幻灯片集

我想知道是否可以

  • 将多个PowerPoint文件合并为一个
  • 如果更改了单个文件,我希望将相同的更改反映到合并文件中

这可以通过图形方式还是通过 VBA 实现?

前任:

  • pptx
  • B.pptx
  • pptx
  • pptx
  • pptx

设置 1 (Dev.pptx):

  • pptx
  • B.pptx
  • pptx

设置 2 (Manager.pptx)

  • pptx
  • pptx
  • pptx

设置 3 (all.pptx)

  • pptx
  • B.pptx
  • pptx
  • pptx
  • pptx

如果我更改任何 Pptx (A,b,c,d,e) 组合文件应自动更新

4

2 回答 2

0

最简单且可能最可靠的解决方案是将所有幻灯片放入一个文件中,然后为每个目标受众创建自定义节目。

另一种方法是有一个主要的“菜单”演示文稿,一张带有子演示文稿链接的幻灯片,每个观众一个。这些演示文稿中的每一个都有自己的“菜单”幻灯片,根据需要链接到 A.pptx、B.pptx 等。

在A.pptx的最后,添加一个End Presentation链接;单击它(或只需按 ESC 退出演示文稿),您将返回到子菜单演示文稿。

于 2013-07-10T14:22:32.450 回答
0

在安装了 PowerPoint.exe 的 Windows 上使用 VBS 可以做到这一点。

使用以下内容创建一个名为 merge.vbs 的脚本:

Option Explicit

Sub WriteLine ( strLine )
    WScript.Stdout.WriteLine strLine
End Sub

Sub WriteError ( strLine )
    WScript.Stderr.WriteLine strLine
End Sub

Dim inputFile1
Dim inputFile2
Dim outputFile
Dim objPPT
Dim objFso
Dim objPresentation

If WScript.Arguments.Count <> 3 Then
    WriteError "You need to specify 2 input files and one output file."
    WScript.Quit 1
End If

inputFile1 = WScript.Arguments(0)
inputFile2 = WScript.Arguments(1)
outputFile = WScript.Arguments(2)

Set objFso = CreateObject("Scripting.FileSystemObject")

If Not objFso.FileExists( inputFile1 ) Then
    WriteError "Unable to find your input file " & inputFile1
    WScript.Quit 1
End If
If Not objFso.FileExists( inputFile2 ) Then
    WriteError "Unable to find your input file " & inputFile2
    WScript.Quit 1
End If

WriteLine "Input File 1 :  " & inputFile1
WriteLine "Input File 2 :  " & inputFile2
WriteLine "Output File: " & outputFile

Set objPPT = CreateObject( "PowerPoint.Application" )

' Open presentation with window hidden
Set objPresentation = objPPT.Presentations.Open(inputFile1, True, False, False)

mergeAndKeepSourceFormatting objPresentation, inputFile2

' Reference for this at https://docs.microsoft.com/en-us/office/vba/api/powerpoint.presentation.saveas
WriteLine "Saving File: " & outputFile
objPresentation.SaveAs outputFile

objPresentation.Close
ObjPPT.Quit

'
' Add the file to the loaded presentation
'
Sub mergeAndKeepSourceFormatting(ByRef objPresentation, ByVal newPptxFile)
    WriteLine "Merging file: " & newPptxFile
    Dim newSlides
    Dim oldSlides
    oldSlides = objPresentation.Slides.Count
    newSlides = objPresentation.Slides.InsertFromFile( newPptxFile, objPresentation.Slides.Count)
    objPresentation.Slides.Range(FillRangeArray(oldSlides + 1, oldSlides + newSlides)).ApplyTemplate newPptxFile

End Sub


Function FillRangeArray(n1, n2) 
    Dim myArr()
    Redim myArr(n2 - n1)
    Dim i
    For i = 0 to (n2 - n1)
        myArr(i) = n1 + i
    Next
    FillRangeArray = myArr
End Function

然后从命令行你可以调用它:

CSCRIPT merge.vbs "A.pptx" "B.pptx" "resultA_B.pptx"

请根据您的需要调整脚本或多次调用以将生成的文件与下一个文件合并。

于 2021-08-31T10:04:54.830 回答