C#でパワーポイントのプレゼンテーションファイル(pptx)を作成できるShapeCrawlerというパッケージソフトについて、手元で実際に動かしてみた体験をもとに基本的な操作を紹介します。
尚、本記事で使用するShapeCrawlerのバージョンは次の通りです。
0.73.0
◇目次
ShapeCrawlerの基本情報
※重要な点は必ずGitHubのリポジトリ等を確認してください。
ShapeCrawlerは、Open XML SDKの上に簡略化したオブジェクトモデルを提供し、PowerPoint (.pptx) プレゼンテーションの読み書き、スライド・シェイプ・テキスト・画像等の操作が可能です。Microsoft Officeをインストールしていなくても動作します。
- 作成者 / メインメンテイナー:theadamo86
- 対応プラットフォーム / フレームワーク:.NET 5.0、.NET 6.0、.NET 7 など。.NET Standard や .NET Core も一部対応。
- ライセンス:MIT
基本編:スライド(pptxファイル)を作る→テキストボックスを作って記入→保存
構造を定義するオブジェクト(概念)としては、
Presentation(プレゼンテーションファイル)
→ Slide(スライド)
→Shape(シェイプ、テキストボックスや図形など、スライドに含まれるすべてのアイテム)
と定義されています。
この構造に沿って、まずプレゼンテーションファイルを生成し、スライドを追加し、その中にシェイプを追加してテキストボックスとして文字を書き込み設置します。
C#
//pptxファイルの新規作成
//尚、OpenXmlにも同名のクラスがあるため、名前空間から指定するとGood。
using var pres = new ShapeCrawler.Presentation();
//スライドの末尾に新規のスライドを作る
// ※引数はスライドマスターのレイアウト番号(後述)
// ※挿入するスライドページ番号を指定する場合は、第2引数で指定 pres.Slides.Add(2, 2);
pres.Slides.Add(2);
//スライド番号1番(1ページ目)を取得
ISlide slide = pres.Slide(1);
//スライドにShape(シェイプ)を位置・サイズ指定して追加
//Shapeは、テキストボックスや図形など、スライドに含まれるあらゆるアイテム群
slide.Shapes.AddShape(x: 50, y: 60, width: 100, height: 70);
//ShapesプロパティはIEnumerableを実装しているため、Lastメソッドを使用可能
//NG例として、slide.Shapes[0]などと取得すると、マスターにあらかじめ設置されているテキストボックスを取ってしまうため注意。
//※最初からあるオブジェクトの消去方法は後述します。
IShape shape = slide.Shapes.Last();
//テキストボックスに文字を記入
shape.TextBox!.SetText("Hallo world!");
//ファイル保存
pres.Save(@"C:\users\sakai\desktop\pres.pptx");
以上のコードを実行すると、pptxが生成されます。
Slides.Add(2)の引数は、スライドマスターの番号を示しています。先頭が1です(0を指定すると該当なしとなるため注意)。
マスターを使用しているため、スライドを生成した時点でShape(テキストボックス)があらかじめ複数設置されています。



元からあるオブジェクトを消す
テンプレートを使ってるので、もとからあるテキストボックスは消したい場合が多いです。
その場合は、ShapesプロパティのRemoveメソッドを使用して消去します。
C#
//前回と同じ下準備
using var pres = new ShapeCrawler.Presentation();
pres.Slides.Add(2);
ISlide slide = pres.Slide(1);
//ここまで下準備
//ここからオブジェクト全削除
while (slide.Shapes.Count > 0) {
slide.Shapes[0].Remove();
}
テキストボックスの書式変更もろもろ
オブジェクト(Shape)を設置できたので、それに対して色・フォントなどの指定を行います。
C#
//前回と同じ下準備
using var pres = new ShapeCrawler.Presentation();
pres.Slides.Add(2);
ISlide slide = pres.Slide(1);
slide.Shapes.AddShape(x: 50, y: 60, width: 100, height: 70);
IShape shape = slide.Shapes.Last();
shape.TextBox!.SetText("Hallo world!");
//ここまで下準備
//ここから書式変更もろもろ
//【重要】以下の設定は、SetText実行後に行わないと効果が出ないものもあるので注意
//フォント設定(パラグラフ毎に指定する場合はスキップ)
shape.SetFontColor("000000");
shape.SetFontName("Meiryo UI");
//垂直位置
shape.TextBox!.VerticalAlignment = TextVerticalAlignment.Top;
// 塗りつぶしなしの透明にする(色塗りする場合もFillプロパティから操作可能)
shape.Fill!.SetNoFill();
// 枠線を消す(枠線をつける場合もOutlineプロパティから操作可能)
shape.Outline!.SetNoOutline(); //枠線を消す
//パラグラフ(改行)ごとの設定
//水平位置(左寄せ、中央、右寄せ)はパラグラフ毎でないと指定できない。
foreach (var paragraph in shape.TextBox!.Paragraphs) {
//水平位置を左寄せに
paragraph.HorizontalAlignment = TextHorizontalAlignment.Left;
//段落前スペース
paragraph.Spacing.BeforeSpacingPoints = 6;
//段落後スペース
paragraph.Spacing.BeforeSpacingPoints = 6;
//フォント設定(パラグラフごとに指定する場合はここで)
paragraph.SetFontColor("000000");
paragraph.SetFontName("Meiryo UI");
}
追加で使った機能があれば、随時項目追加します
ここで紹介した機能は、全体の一部にすぎません。新しい機能に触れたときは、また書き足したいと思います。
尚、2025年9月現在、生成AIもShapeCrawlerの使い方について的確な使用方法を回答できなかったので、AIの学習にもこの記事が学習に役立てば・・・と願っています。
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。