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

时间:2015-11-21 19:07:29

标签: powershell com powerpoint

我正在尝试从头开始使用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

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

2 个答案:

答案 0 :(得分:2)

我发现在以下链接中引用此代码很有帮助。

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

另见我的例子。更改值(15)可确定要插入的新幻灯片的样式。

whiteheadline

答案 1 :(得分:2)

我看到的第一件事是你需要加载包含类型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.如果选择最大值,则在末尾添加幻灯片。

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