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) 

2 es para PDF

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top