Rapid Express

Rapid Express

中小企業を支援するLinuxベースのWebアプリケーション開発

Rapid Express RSS Feed
 
 
 
 

PowerPointを非表示でオートメーションする

Visual C# .NETでPowerPointをオートメーションする必要が出ました。

ところがアプリケーションウィンドウを非表示にできず困ったので、その顛末です。

まあ、概ね以下のようなコードでプレゼンテーションファイルを開くんですが、

PowerPoint.Application objApp;
PowerPoint.Presentations objPresSet;
PowerPoint._Presentation objPres;

objApp = new PowerPoint.Application();
objApp.Visible = MsoTriState.msoTrue;
objPresSet = objApp.Presentations;

objPres = objPresSet.Open(path, MsoTriState.msoTrue,
  ? MsoTriState.msoTrue, MsoTriState.msoTrue);

objApp.Visible を Falseにすると、次のエラーが出てしまいます。

System.Runtime.InteropServices.COMException (0×80048240): Application (不明なメンバー):無効な要求です。アプリケーションウィンドウを非表示することはできません。

それで、ネットを検索してみたのですが、PowerPointのオートメーションなんてあまり流行ってなくて、Excelに比べて情報量が圧倒的に少なく困りました。

ようやく見つけたがVB.NETのFAQで、Openの引数WithWindowsをFalseにすればOKとありました。

しかし、C#でそれをやっても依然と同じエラーとなります。さて、困った。

条件を変えてさらにググってみたところ、NamazuのFAQにたどり着きました。

Application.Visible : 無効な要求です。アプリケーションウィンドウを非表示に設定することはできません。

の例外が起きます。ところが、この例外メッセージが出てもインデックスは正常に作成されるようです。ということで、この例外メッセージを nul に送って無視してやれば、うまくインデックスできるようになります

なるほど?ってことで・・・

PowerPoint.Application objApp;
PowerPoint.Presentations objPresSet;
PowerPoint._Presentation objPres;

objApp = new PowerPoint.Application();
try {
    objApp.Visible = MsoTriState.msoFalse;
}
catch (Exception e) {
    //エラーを無視
}
objPresSet = objApp.Presentations;

objPres = objPresSet.Open(path, MsoTriState.msoTrue,
?   MsoTriState.msoTrue, MsoTriState.msoFalse);

こんなんで、いいんでしょうか(汗





Leave a Reply



Tags

Links




Meta


TMAX.MYOPENSRC.COM