如何使用 Powershell 创建新的 Powerpoint 演示文稿

How can I create a new Powerpoint presentation with Powershell

我正在尝试使用 Powershell 从头开始​​创建一个新的 Powerpoint 演示文稿,但在对象模型方面遇到了问题。基于 ScriptingGuy 中的一些代码,我得出了:

Add-type -AssemblyName office
$Application = New-Object -ComObject powerpoint.application
$application.visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
$slideType = "microsoft.office.interop.powerpoint.ppSlideLayout" -as [type]

$blanklayout = $slideType::ppLayoutTitleOnly

$presentation = $application.Presentations.add()

$slide = $presentation.slides.addSlide(0,$blanklayout)

但收到错误消息:

Ausnahme beim Aufrufen von "AddSlide" mit 2 Argument(en):  "Typenkonflikt. (Ausnahme von HRESULT: 0x80020005 
(DISP_E_TYPEMISMATCH))"
In C:\Users\Uwe\Dropbox\Powerpoint.ps1:12 Zeichen:1
+ $slide = $presentation.slides.addSlide(0,$blanklayout)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

如何从对象模型中获取正确的布局并添加新幻灯片?

我发现在下面引用这段代码 link 很有帮助。

https://gist.github.com/miriyagi/4240819

另请参阅我的示例。更改值 (15) 决定插入的新幻灯片的样式。

$slide = $Presentation.Slides.Add($presentation.Slides.Count + 1, 15)

我首先看到的是您需要加载包含 microsoft.office.interop.powerpoint.ppSlideLayout 类型的程序集。程序集的名称是 microsoft.office.interop.powerpoint。所以:

add-type -assembly microsoft.office.interop.powerpoint

要让它为我工作,我需要做的第二件事是使用 Add 方法而不是 AddSlide 方法。

$slide = $presentation.slides.add(1,$blanklayout)

$blanklayout 可以用一个整数代替,如果你知道整数对应的布局。但是,使用您所拥有的代码在某种程度上更具自我记录性。 15 是 ppLayoutLargeObject 的值。

第一个参数是一个介于 1 和 ($presentation.slides.count + 1) 之间的整数。如果您选择的值小于最大值,则幻灯片将插入幻灯片平台中的那个位置,之后的幻灯片的幻灯片编号将增加 1。如果您选择最大值,则幻灯片将添加到末尾。

请注意,"Add" 方法在文档中被标记为内部 API。可能没什么大不了的,但 MS 在未来版本的 Powerpoint 中更改 API 比未标记为内部的 API 更有理由。使用 AddSlide API 看起来更复杂。 doc 表示您必须使用 SlideRange 来获取 CustomLayout。