PowerPoint 2007 SP2, ExportAsFixedFormat en PowerShell?
-
23-08-2019 - |
Pregunta
Ayer yo estaba tratando de conversión por lotes de un grupo de PPT en archivos PDF para un amigo y yo decidimos tener un vistazo a PowerShell, ya que ha estado sentado en mi HD durante un tiempo.
Aquí está el código que he llegado con.
$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)
Dado que el método de "fuerza bruta" no funcionaba ( "No coinciden los tipos") He intentado importar el tipo de enumeración con
$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat('\some\newfile.pdf', $pptypepdf)
Lo extraño aquí es que todavía genera un error "No coinciden los tipos" ...
Además, GuardarComo funciona bien con
$f.SaveAs('\some\newfile.pdf', 32) # 32 is for PDF
¿Qué estoy haciendo mal?
Actualizar
La documentación pertinente:
Este es el mensaje de error completo
$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
No hay solución correcta
Otros consejos
Me he encontrado con el mismo problema en Python. Intente especificar argumento PrintRange
como se ha dicho en solución de Stefan Schukat:
Esto es un error en Powerpoint. Se define "[in, opcional, ValorPredeterminado (0)] PrintRange * PrintRange", que conduce a la generación de "PrintRange = 0" en la envoltura pitón. Por lo tanto obtendrá el error al llamar al método. Así que no hay problema de makepy. Solución del problema llamar al método con PrintRange = Ninguno ya que ninguno es un objeto vali COM. P.ej. presentation.ExportAsFixedFormat (pptFile + 'pdf', win32com.client.constants.ppFixedFormatTypePDF, win32com.client.constants.ppFixedFormatIntentScreen, PrintRange = None) debería funcionar.
Fuente: tipo incorrecto cuando se utiliza fuction de exportación de PowerPoint 2007
No sé PowerShell en absoluto, pero han elaborado un ejemplo de trabajo:
$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)
Esto no es una solución completa, pero se realiza la exportación. De alguna manera se exporta presentación completa, no sólo deslice no. 1, como pensaba. PD Oh. Aquí está la solución misma