2015-11-21 1 views
0

Я пытаюсь создать новую презентацию Powerpoint с Powershell с нуля, но у меня возникают проблемы с объектной моделью. На основании некоторого кода из ScriptingGuy я придумал:Как создать новую презентацию Powerpoint с Powershell

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

Я нашел ссылку на этот код в приведенной ниже ссылке полезной.

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

Также см мой пример. Изменение значения (15) определяет стиль вставки нового слайда.

$slide = $Presentation.Slides.Add($presentation.Slides.Count + 1, 15) 
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 было бы больше оправданий для изменения этого API в будущей версии Powerpoint, чем API, не отмеченный внутренней. Использование API AddSlide выглядит более сложным. doc говорит, что вы должны использовать SlideRange для получения CustomLayout.

 Смежные вопросы

  • Нет связанных вопросов^_^