Domanda

Ieri stavo cercando di convertire in batch un gruppo di PPT in PDF per un amico, e ho deciso di dare un'occhiata al PowerShell, dal momento che è stato seduto sul mio HD per un po '.

Ecco il codice che è venuta in mente.

$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 è per PDF

Dato che il metodo "forza bruta" non ha funzionato ( "tipo non corrispondente") ho cercato di importare il tipo enum con

$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat('\some\newfile.pdf', $pptypepdf) 

La cosa strana è che si getta ancora un errore "tipo non corrispondente" ...

Inoltre, SaveAs funziona bene con

$f.SaveAs('\some\newfile.pdf', 32) # 32 is for PDF

Che cosa sto facendo di sbagliato?

Aggiorna

documentazione pertinente:

Ecco il messaggio di errore 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

Nessuna soluzione corretta

Altri suggerimenti

ho incontrato lo stesso problema in Python. Prova a specificare argomento PrintRange come detto in soluzione da Stefan Schukat:

  

Questo è un bug in PowerPoint. Definisce "[in, optional,   defaultvalue (0)] PrintRange * PrintRange" che porta alla generazione   di "PrintRange = 0" nella confezione pitone. Pertanto si otterrà la   errore quando si chiama il metodo. Quindi nessun problema di Makepy. Aggirare   chiamare il metodo con PrintRange = Nessuno dal momento che nessuno è un oggetto COM vali.   Per esempio. presentation.ExportAsFixedFormat (pptFile + 'pdf',   win32com.client.constants.ppFixedFormatTypePDF,   win32com.client.constants.ppFixedFormatIntentScreen, PrintRange = None)   dovrebbe funzionare.

Fonte: tipo non corrispondente quando si utilizza l'esportazione fuction di PowerPoint 2007


Non so PowerShell a tutti, ma ho lavorato un esempio di lavoro:

$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)

Questa non è una soluzione completa, ma esportazione viene eseguita. Esporta in qualche modo presentazione completa, non solo far scorrere n. 1, come pensavo. Post scriptum Oh. Ecco la soluzione stessa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top