PowerPoint 2007 с пакетом обновления 2, экспортировать фиксированный формат в PowerShell?
-
23-08-2019 - |
Вопрос
Вчера я пытался пакетно преобразовать группу файлов 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)
Поскольку метод "грубой силы" не сработал ("несоответствие типов") Я попытался импортировать тип 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
Нет правильного решения
Другие советы
Я столкнулся с такой же проблемой в Python.Попробуйте указать PrintRange
аргумент, как сказано в решении Стефана Шуката:
Это ошибка в Powerpoint.Он определяет "[in, необязательно, defaultvalue(0)] PrintRange* PrintRange", что приводит к генерации "PrintRange=0" в оболочке python.Следовательно, вы получите сообщение ошибка при вызове метода.Так что никаких проблем с makepy.Обходной путь вызовите метод с помощью PrintRange=None, поскольку None является COM-объектом vali.Например.презентация.Экспортировать фиксированный формат (pptFile+'.pdf', win32com.client.constants.ppFixedFormatTypePDF, win32com.client.constants.ppFixedFormatIntentScreen, диапазон печати= Отсутствует) должно сработать.
Источник:Несоответствие типов при использовании функции экспорта 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.О.Здесь то же самое решение