我正在尝试从头开始使用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
如何从对象模型中获取正确的布局并添加新幻灯片?
答案 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。