情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

C#からPowerPointを操作していてつまづいたことメモ このエントリーを含むはてなブックマーク

C#からCOMオブジェクト経由でPowerPointを操作していて困ったところを簡単にメモしておきます。

リファレンスはどこ?

もちろんmsdnなのですが、PowerPointのプログラミングについて書かれていて今日見たのは「PowerPointソリューション」「[HOWTO] Visual C# .NET でオートメーションを使用して PowerPoint プレゼンテーションの作成および表示を行う方法」「Microsoft.Office.Interop.PowerPoint Namespace」「How to: Work with Shapes (Drawing Objects)」あたりです。

どのCOM参照を追加すればいいの?

追加したのは「名前:Microsoft PowerPoint 14.0 Object Library/TypeLibバージョン:2.10/パス:C:\Program Files\Microsoft Office\Office14\MSPPT.OLB」

PowerPointオブジェクトの作り方

new Microsoft.Office.Interop.PowerPoint.Application();

.ppt(.pptx)ファイルの開き方

Presentationsオブジェクトから開くのがポイント。

(using PowerPoint = Microsoft.Office.Interop.PowerPoint;)
(using Microsoft.Office.Core;)
...
PowerPoint.Presentations ps = powerPoint.Presentations; PowerPoint.Presentation p = ps.Open(
path,
MsoTriState.msoFalse,
MsoTriState.msoFalse,
MsoTriState.msoFalse);

ShapesやSlidesのインデックスは1から始まる

次のように、1から始まるようにする。foreachを使えるときはそっちのほうがよいかも。

for(int i = 0; i < p.Slides.Count; i++)
{
...p.Slides[i+1]...
}

COMExceptionのありか

例外処理はこれ。片っ端からこれでcatch。

System.Runtime.InteropServices.COMException

閉じ方

p.Close();

ちゃんと閉じないと、非表示のPowerPointプロセス(POWERPNT.EXE)が放置されてしまいます。注意。

ShapeとShapeRange

Shapeのプログラム上での論理的なグループがShapeRangeみたいな感じ。非常にやっかいなので「How to: Work with Shapes (Drawing Objects)」をチラ見しておく。

未解決

「SaveAs」メソッドでの保存は出来るけど「Save」メソッドでの保存に失敗する。読み取り専用ですと言われてしまう。開いているのはプログラムが使っているPowerPointプロセスだけで、ReadOnlyをFalseにして開いているんだけどよく分からない。必須じゃないので後回し。

.NET | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。