1

昨日、友人のために PPT のグループを PDF にバッチ変換しようとしていたのですが、PowerShell を見てみることにしました。

これが私が思いついたコードです。

$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 は PDF 用です

「ブルートフォース」メソッドが機能しなかったため(「型の不一致」)、列挙型をインポートしようとしました

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

ここで奇妙なのは、「型の不一致」エラーがまだスローされることです...

また、SaveAs は正常に動作します

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

私は何を間違っていますか?

アップデート

関連ドキュメント:

ここに完全なエラーメッセージがあります

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

1 に答える 1

1

Pythonでも同じ問題に遭遇しました。PrintRangeStefan Schukat のソリューションで述べられているように、引数を指定してみてください。

これはパワーポイントのバグです。「[in, optional, defaultvalue(0)] PrintRange* PrintRange」を定義し、Python ラッパーで「PrintRange=0」を生成します。したがって、メソッドを呼び出すときにエラーが発生します。したがって、makepyの問題はありません。回避策 None は有効な COM オブジェクトであるため、PrintRange=None でメソッドを呼び出します。たとえば、presentation.ExportAsFixedFormat(pptFile+'.pdf', win32com.client.constants.ppFixedFormatTypePDF, win32com.client.constants.ppFixedFormatIntentScreen, PrintRange=None) が機能するはずです。

出典: PowerPoint 2007 のエクスポート機能を使用する場合のタイプの不一致


PowerShell についてはまったくわかりませんが、実際の例を作成しました。

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

これは完全な解決策ではありませんが、エクスポートは完了しています。スライド番号だけでなく、プレゼンテーション全体を何らかの方法でエクスポートします。1、思った通り。PSああ。これが同じ解決策です

于 2015-10-07T14:30:48.010 に答える