2010-11-03 3 views
0

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

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

Exception вызова "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) 

ответ

0

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

+0

Спасибо за ответ. К сожалению, никакого успеха. –

1

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

Похоже, что в Microsoft Powerpoint имеется ошибка (по крайней мере, в версии 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) 

уведомления параметр $ диапазон теперь передается в

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

+0

Интересно - но не должен ли этот баг проявляться и при вызове ppt с другим языком? Его COM, в конце концов, не должно быть ничего особенного в том, чтобы называть его от Powershell. Thats said: Я переключился на VB.NET с тех пор, потому что он намного лучше подходит для взаимодействия с MS Office. Есть функции, в которых вы должны называть вещи в Office VB, что является динамическим, и, следовательно, гораздо сложнее работать с другими языками .NET. –

+0

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

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