2010-11-03 8 views
0

J'essaie d'utiliser le ExportAsFixedFormat dans PowerPoint 2007 à partir d'un script PowerShell 2.0. Seuls les deux premiers arguments sont requis, mais cela ne fonctionnera pas.PowerPoint ExportAsFixedFormat dans Powershell

J'obtiens toujours:

Exception appelant "ExportAsFixedFormat" avec "2" argument (s): "Type mismatch ( Exception de HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"

J'ai lu que tous les arguments doivent être spécifiés pour que cela fonctionne, mais cela ne fonctionne pas non plus. BTW, la même méthode fonctionne pour moi dans Word 2007 et Excel 2007.

Alors quel est le problème avec ceci:

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) 

Répondre

0

changement $null-[System.Reflection.Missing]::Value.

+0

Merci pour la réponse. Malheureusement, pas de succès. –

1

Je réalise que c'est une réponse tardive, mais je pense que j'ai la solution. (J'essayais d'appeler cette méthode en C# en utilisant NetOffice, et en obtenant la même erreur)

Il semble qu'il y ait un bug dans Microsoft Powerpoint (Au moins dans v 2007 & 2010). Le paramètre PrintRange doit être spécifié, car la valeur par défaut (0) n'est pas valide!

donc un script de travail pourrait ressembler à:

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) 

Notez que le paramètre de plage $ est maintenant passé dans

NB - cette réponse est adaptée de la solution ici. https://netoffice.codeplex.com/discussions/449288

+0

Intéressant - mais ce bogue ne devrait-il pas se manifester aussi lorsque ppt est appelé avec une autre langue? Son COM, après tout, il devrait y avoir rien de spécial à propos de l'appeler de Powershell. Thats dit, je suis passé à VB.NET depuis, car il est beaucoup mieux adapté à faire interagir avec MS Office. Il y a des fonctionnalités où vous devez appeler des choses dans Office VB, ce qui est dynamique et est donc beaucoup plus difficile à faire avec d'autres langages .NET. –

+0

Je ne pense pas qu'il y ait quelque chose de spécial à l'appeler de powershell - comme je l'ai dit je suis tombé sur ce problème dans un programme C# utilisant NetOffice (qui est une bonne alternative aux assemblages bureau interop), donc je suppose –