(C#)docxファイルの文章を簡易編集する
作ったもの
Microsoft Word 2007 以降の docx ファイルは、中身が zip 圧縮された xml ファイルなので、ZipArchive で展開すれば編集することができます。
今回作ったのは docx の document 部分(文字で書かれている箇所)の xml を書き換えるクラスです。
前提
コード
class DocxDocument { /// <summary> /// docxファイルのdocument部分を読み書きするクラス /// </summary> static class DocxEditor { /// <summary> /// docxファイルをdocument部分を読み込む。 /// </summary> /// <param name="path">ファイルパス</param> /// <returns>読み込んだ文字列</returns> public static string Read(string path) { using (ZipArchive za = ZipFile.Open(path, ZipArchiveMode.Read)) { var entries = za.Entries; ZipArchiveEntry entry = za.GetEntry("word/document.xml"); using (var stream = new StreamReader(entry.Open(), Encoding.UTF8)) { return stream.ReadToEnd(); } } } /// <summary> /// docxファイルのdocument部分に書き込む。 /// </summary> /// <param name="path">ファイルパス</param> /// <param name="content">書き込む文字列</param> public static void Write(string path, string content) { using (ZipArchive za = ZipFile.Open(path, ZipArchiveMode.Update)) { ZipArchiveEntry entry = za.GetEntry("word/document.xml"); entry.Delete(); entry = za.CreateEntry("word/document.xml"); using (var stream = new StreamWriter(entry.Open(), Encoding.UTF8)) { stream.Write(content); } } } }
使い方
string xmlText = DocxDocument.Read(@"C:\なんどか\かんとか.docx"); // 読み込む xmlText = xmlText.Replace("<@日付>", "2019年1月1日"); // 置き換える DocxDocument.Write(@"C:\なんとか\かんとか.docx", xmlText); // 書き込む
補足
docx のファイルフォーマットは非常に難解で習得に時間が掛かりますが、あらかじめ書かれた文字列を置き換える程度ならすぐにできます。例えば
- <@挨拶> → いつもお世話になっております。
- <@日付> → 2019年1月1日
- <@曜日> → (火)
このように置き換えれば docx の自動作成に役立つでしょう。なお、改ページを消したい時には
<w:br w:type="page"/>
を探して削除すると良いです。しかしながら、このタグを挿入すれば改ページができるわけではないので注意してください。