【Word改造】最初のアドインを作成してみた
Wordドキュメントの作成
これまで当ブログにおいてExcelの改造をいくつか行ってきました。「お客様向けのAWS仕様書作成コストを下げたい」というモチベーションから行ってきたものになります。Office関連の課題として「お客様向けのPDFを作成する際にWordベースで文書を作成し、PDFで出力する」際の文書の作成コストがあると思います。
同じような文書を作成するケースは多く、できれば自動化したいと日頃考えていました。
Excelの改造に慣れてきたので、今回はWordのアドオンをまずは簡単なものから作成て、Word改造の雰囲気を掴んで行きたいと思います。
開発環境
- Windows 8.1
- Visual Studio 2012(C#)
- Word 2013
- AWS SDK for .NET 2.3.5
Wordアドインプロジェクトの作成
Visual Studioを起動し、Word 2013のアドインプロジェクトを作成します。
プロジェクト名は自由につけてもらって構いません。
★この画面をよく見ると、PowerPointやVisioも改造できそうですね。Officeアドインの情報は特に日本語ではゼロに近く、今のところ手を出せるのはVBAで情報が出ているExcel、Wordあたりと考えています(Web上のExcel VBAのテクニックはExcelアドインにそのまま流用可能でした)
文書を保存した際にテキストを書き込む
下記MSDNのドキュメントではExcelの場合もそうでしたが、最初のサンプルアプリケーションとして文書保存時に処理を行うアプリケーションを作成しています。
今回はこのサンプルを動かしてみます。
文書保存イベントハンドラの作成
プロジェクトを作成すると下記のようにファイルが作成されますので、ThisAddIn.csファイルを開いてコードを編集していきます。
コードとしてはアドインの初期化処理である ThisAddIn_Startup イベントで文書保存時のイベント DocumentBeforeSave のイベントハンドラ Application_DocumentBeforeSave を登録します。
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.DocumentBeforeSave += Application_DocumentBeforeSave; }
文書保存イベントハンドラでは空のパラグラフを作成し、そのRangeのText(ExcelでいうValue)に任意のテキストを設定しています。
void Application_DocumentBeforeSave(Word.Document Doc, ref bool SaveAsUI, ref bool Cancel) { Doc.Paragraphs[1].Range.InsertParagraphBefore(); Doc.Paragraphs[1].Range.Text = "ハローWordアドイン!"; }
早速実行してみましょう。(実行時に謎のエラーが出る方は本記事の最後の部分を参照下さい)。Word文書新規作成画面が開くので、ここでは白紙の文書を選択します。
白紙の文書が開くので、早速保存処理を行うと、下記のようにテキストが追加されます。
コードでは「保存の際にパラグラフ[1]の前にパラグラフを作成し、そのパラグラフのテキストに値を設定する」処理を行っているので、Ctrl+Sを連打して保存を連続で行うと下記のようになります。
最後に
これで個人的な直近の夢「Wordでファイルダイアログを開き、CSVファイルを読み込んでWord文書を作成する 」に一歩近づきました。もちろんWordから直接AWSにアクセスすると言ったことも容易にできそうな感触を得ることも出来ました。
引き続きWordの改造に関して調査を進めていきたいと思います!
★最後にコードのテキストを追加する部分をコメントアウトして実行しておきましょう。サンプルのコードのままだと、あらゆるWord文書の保存時に先頭に「ハローWordアドイン!」が追加されてしまいます!
(付録)LoaderLock例外が出る場合の抑制方法
本サンプルアプリケーション実行時にLoaderLock例外が検出され、アプリケーションの実行が中断する際、下記手順で抑制することができます:
- Visual Studioメニューのデバッグ>例外で下記のLoaderLockのチェックボックスを外す