PowerPoint 2007 SP2, ExportAsFixedFormat в PowerShell?

Вчера я пытался конвертировать группу PPT в PDF для друга, и я решил взглянуть на PowerShell, так как он некоторое время сидел на моем HD.

Вот код, который я придумал.

$p = new-object -comobject powerpoint.application

# I actually don't know why I have to set the window to visible, 
# but it doesn't work otherwise, anyway, it's not the real problem I have
$p.visible = 1 

$f = $p.presentations.open('\some\file.ppt')

$f.ExportAsFixedFormat('\some\newfile.pdf', 2) 

2 для PDF

Поскольку метод «грубой силы» не сработал («несоответствие типов»), я попытался импортировать тип enum с помощью

$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat('\some\newfile.pdf', $pptypepdf) 

Странно то, что он по-прежнему выдает ошибку «несоответствие типов»...

Кроме того, SaveAs отлично работает с

$f.SaveAs('\some\newfile.pdf', 32) # 32 is for PDF

Что я делаю не так?

Обновить

Соответствующая документация:

Вот полное сообщение об ошибке

$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat($filepath, $pptypepdf)

Exception calling "ExportAsFixedFormat" with "2" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"

At line:1 char:23
+ $f.ExportAsFixedFormat <<<< ($filepath, $pptypepdf)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

person Edoardo Vacchi    schedule 21.05.2009    source источник
comment
Какая точная ошибка? Я проверил MSDN, и документация по этому методу кажется неправильной для этого аргумента. И я даже не могу найти это перечисление в MSDN!   -  person JasonMArcher    schedule 22.05.2009
comment
Я отредактировал вопрос с соответствующими деталями, спасибо   -  person Edoardo Vacchi    schedule 22.05.2009
comment
Вы пробовали вызов с указанием всех необязательных параметров?   -  person Dirk Vollmar    schedule 19.10.2009
comment
ExportAsFixedFormat PowerPoint вернет несоответствие типа, если дополнительные параметры отсутствуют. Значение puArgErr, возвращаемое Invoke, имеет смысл только в том случае, если указаны все параметры.   -  person Jason Harrison    schedule 28.04.2010
comment
Привет, NoWhereMan, ты нашел решение этой проблемы?   -  person Michael Böckling    schedule 30.03.2011
comment
Я остановился на простом SaveAs и больше не беспокоился; если вы хотите поиграть с этим, не стесняйтесь сообщать здесь.   -  person Edoardo Vacchi    schedule 30.03.2011
comment
Посмотрите решение, которое я предоставил здесь: ссылка и посмотрите, работает ли оно. !   -  person James S    schedule 03.04.2014


Ответы (1)


Я столкнулся с той же проблемой в Python. Попробуйте указать аргумент PrintRange, как сказано в решении Стефана Шуката:

Это ошибка в Powerpoint. Он определяет «[in, optional, defaultvalue (0)] PrintRange * PrintRange», что приводит к генерации «PrintRange = 0» в оболочке Python. Поэтому вы получите ошибку при вызове метода. Так что никаких проблем с makepy. Обходной путь: вызовите метод с PrintRange=None, поскольку None является действительным COM-объектом. Например. Presentation.ExportAsFixedFormat(pptFile+'.pdf', win32com.client.constants.ppFixedFormatTypePDF, win32com.client.constants.ppFixedFormatIntentScreen, PrintRange=None) должен работать.

Источник: несоответствие типов при использовании функции экспорта PowerPoint 2007


Я вообще не знаю PowerShell, но разработал рабочий пример:

$p.ActivePresentation.PrintOptions.Ranges.Add(1,1)
$r = $p.ActivePresentation.PrintOptions.Ranges.Item(1)
$document.ExportAsFixedFormat('D:\\ps.pdf', 2, 1, 0, 1, 1, 0, $r)

Это не полное решение, но экспорт выполнен. Он каким-то образом экспортирует полную презентацию, а не только номер слайда. 1, как я и думал. P.S. Ой. Вот то же решение

person Winand    schedule 07.10.2015