C#でOpenXML SDKを使ってPowerPointファイル(*.pptx)の出力を行う
はじめに この記事はC#でMarkdownをパースしてオリジナルの出力を行う(markdigを使用)の続編です。 上記記事の中で書いたMarkdownを PPTXにするツールはOpenXML SDKを使用してPPTXファイルを作成しています。 このOpenXML SDKの使い方が最初すごい苦労したのでその部分について今回の記事は書くことにしました。 なお作成したMarkdownをPPTXに変換するツールはGithubにあげてあります。 OpenXMLとは Office2007から使われだしたファイルフォーマットでXMLファイルをzipで固めたものです。 そのためファイルの拡張子を.zipに変更してから解凍すると、中に入っているXMLファイルを見ることができます。 以前のバイナリ形式とは違いOfficeがインストールされていない環境でも作成することができます。 作成する環境 以下の感じです Windows10 Visual Studio 2017 C# .Net Standard 2.0 Class library OpenXML SDKについて OpenXMLの記載方法は以下の公式サイトを参考にしました https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk ただ上記サイトの説明のみでは理解するのにかなり時間がかかると思われるので、もしこれからOpenXML SDKを使うかたには以下の方法をお勧めします。 Open XML SDK Productivity Tool https://www.microsoft.com/en-us/download/details.aspx?id=30425 このツールを使用すると、指定したOpenXML形式のファイル(xlsxとかpptx)の中身の構造を確認することができます。 またツールを作るのに役立つのが、画面右側の領域に読み込んだファイルを作成するのに必要なC#のコードが出る機能です。 なので、自分の実装したい内容のファイルを作成し読み込んでC#のコードを確認していくと、100%理解しなくても動くものができる可能性がグッと近くなります。 私はこれを使ってちょっとずつ差分を見ながら欲しいコードを見つけてました。 例)フォントの太字をどうすればよいかを知りたいとき 新規作成したpptxのファイルにテキストを1つのみ配置して、C#コードを確認 上記pptxファイルをコピーして、テキスト部分をBoldにしてC#コードを確認 1.と2.を見比べる PowerPointのOpenXMLクラス構成 解説 基本的に上記に説明したOpen XML SDK Productivity Toolを使った方法を使えば、自分の欲しい機能は作れてしまうので話は終わるのですが、自分の備忘録を兼ねて調べたクラス構成を以下に書きます。 OpenXMLファイルのクラス構成はかなり数が多いため、重要な部分に絞って記載してます。 全体 まずは全体構成です。 PPTXを作成するには、図の下端にあるSlidePart, SlieMasterPartを一番触ることになります。 スライド全体の設定(スライドサイズなど)はSlideMasterPart, 各スライドについてはSlidePartといった分担です。 ThemePartは見た目のデザインを変更するに際にいじることがあり、また図には載せていませんが、スライドレイアウトを使う場合はSlideLayoutも触ることになります。 (今回私の作成した機能は1枚目のタイトルシート以外は全てBlankスタイルのシートを使っているので、スライドレイアウトについては触れていません) Slie 次はスライドです。PowerPointの1枚のスライドに相当するためSlidePartクラスのインスタンスはページ数とイコールになります。 上記図は以下の機能を実装する際に重要になってくるクラスのみを抜き出しています。 テキストボックスの配置 イメージの挿入 表の挿入 基本的にスライド内に張り付けるオブジェクトは全てShapeTree配下にぶら下がるようです。 一番多用するテキストボックスは、この図の中ではShapeTree以下のShapeに該当します。 Pictureがイメージになり、GraphicFrameが表です。 ...