PowerPoint ExportAsFixedFormat в Powershell - PullRequest
0 голосов
/ 03 ноября 2010

Я пытаюсь использовать ExportAsFixedFormat в PowerPoint 2007 из сценария PowerShell 2.0.Требуются только первые два аргумента, но это не сработает.

Я всегда получаю:

Исключение вызывает "ExportAsFixedFormat" с аргументом (ами) "2": "Типнесоответствие. (Исключение из HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) "

Я прочитал, что для его работы должны быть указаны все аргументы, но это тоже не работаетКстати, тот же метод работает для меня в Word 2007 и Excel 2007.

Так что же не так с этим:

Add-type -AssemblyName Office
Add-type -AssemblyName Microsoft.Office.Interop.PowerPoint

$p = new-object -comobject powerpoint.application 
$p.visible = 1  
$document = $p.presentations.open('somefile.ppt')


$document.ExportAsFixedFormat($Path, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::ppFixedFormatTypePDF, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent]::ppFixedFormatIntentScreen, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
[Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder]::ppPrintHandoutVerticalFirst, 
[Microsoft.Office.Interop.PowerPoint.PpPrintOutputType]::ppPrintOutputSlides, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
$null, 
[Microsoft.Office.Interop.PowerPoint.PpPrintRangeType]::ppPrintAll, 
[System.Reflection.Missing]::Value, 
$true, 
$true, 
$true, 
$true, 
$false, 
[System.Reflection.Missing]::Value)

Ответы [ 2 ]

1 голос
/ 03 апреля 2014

Я понимаю, что это поздний ответ, но я думаю, что у меня есть решение.(Я пытался вызвать этот метод в c #, используя NetOffice, и получал ту же ошибку)

Похоже, что есть ошибка в Microsoft Powerpoint (по крайней мере, в v 2007 и 2010).Параметр PrintRange должен быть указан, потому что значение по умолчанию (0) недопустимо!

Таким образом, рабочий скрипт может выглядеть следующим образом:

Add-type -AssemblyName Office
Add-type -AssemblyName Microsoft.Office.Interop.PowerPoint

$p = new-object -comobject powerpoint.application 
$p.visible = 1  
$document = $p.presentations.open('somefile.ppt')
$ranges = $document.PrintOptions.Ranges
$range = $ranges.Add(1,1)


$document.ExportAsFixedFormat($Path, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::ppFixedFormatTypePDF, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent]::ppFixedFormatIntentScreen, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
[Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder]::ppPrintHandoutVerticalFirst, 
[Microsoft.Office.Interop.PowerPoint.PpPrintOutputType]::ppPrintOutputSlides, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
$range, 
[Microsoft.Office.Interop.PowerPoint.PpPrintRangeType]::ppPrintAll, 
[System.Reflection.Missing]::Value, 
$true, 
$true, 
$true, 
$true, 
$false, 
[System.Reflection.Missing]::Value)

обратите внимание, что параметр $ range теперь передан.

NB - этот ответ адаптирован из решения здесь: https://netoffice.codeplex.com/discussions/449288

0 голосов
/ 03 ноября 2010

Изменить $null на [System.Reflection.Missing]::Value.

...