過去にWordVBAを使ってヘッダーに日付とページ数を入れました。
【WordVBA】Wordマクロで文章に、日付とページのヘッダーを付ける
しかし世間にはVSTO(Visual Studio Tools for the Microsoft Office )というものがあるようで、そちらの方が一般的のようです。また、.docや.docm、.docx など拡張子を気にする必要もないので素敵ですね
そこで調べて作ってみました。
###アクティブなワードの部分を指定します。
Word.Document ADocument = (Word.Document)Globals.ThisAddIn.Application.ActiveDocument;
###ヘッダーの部分を指定します
Word.Range HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
###このHeaderRangeに(現在ページ/全ページ数)みたいな感じにします。
HeaderRange.InsertAfter("(");
//SetRangeを書かないと上書きされてしまいます。
HeaderRange.SetRange(HeaderRange.End + 1, HeaderRange.End + 1);
//この辺りのパラメータはWordVBAと同じです。
HeaderRange.Fields.Add(HeaderRange, Word.WdFieldType.wdFieldPage);
//Fields.Addで入れた後はヘッダーを入れなおします。
HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
HeaderRange.InsertAfter("/");
HeaderRange.SetRange(HeaderRange.End + 1, HeaderRange.End + 1);
HeaderRange.Fields.Add(HeaderRange, Word.WdFieldType.wdFieldNumPages);
HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
HeaderRange.InsertAfter(")");
###全てまとめるとこんな感じになります。
public void dayPageSet() {
DateTime date = DateTime.Now;
string user = Environment.UserName;
Word.Document ADocument = (Word.Document)Globals.ThisAddIn.Application.ActiveDocument;
try {
foreach (Word.Section sectin in ADocument.Sections) {
Word.Range HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
HeaderRange.Text = "";
HeaderRange.InsertAfter("(");
HeaderRange.SetRange(HeaderRange.End + 1, HeaderRange.End + 1);
HeaderRange.Fields.Add(HeaderRange, Word.WdFieldType.wdFieldPage);
HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
HeaderRange.InsertAfter("/");
HeaderRange.SetRange(HeaderRange.End + 1, HeaderRange.End + 1);
HeaderRange.Fields.Add(HeaderRange, Word.WdFieldType.wdFieldNumPages);
HeaderRange = sectin.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
HeaderRange.InsertAfter(")");
}
}
catch(Exception ex) {
MessageBox.Show(ex.Message);
}
もっと良い方法があるのかもしれません・・・