NPOIでWord文書を操作する


はじめに

需要があるかは知らないけれど、Apache POIでMicrosoft Word文書を操作できます。
普通はOLEやらマクロやらを使うけれど、POIでも操作できます。

POIはJavaのライブラリですが、今回はC#用のNPOIでWord文書を操作してみました。

準備

まず、なにはともあれ新規プロジェクトを作成します。
VisualStudio2019を使って、コンソールアプリケーションを作成しました。

次に、NugetでNPOIを参照します。

操作

そしてコードを書きましょう。
今回は
1. 新規ファイル作成
2. テキストを追加
3. 名前をつけて保存

というシンプルなものを作成します。
本来はクラス化するのが良いですが、サンプルのため1ファイルにベタ書きします。

実装

XWPFDocumentインスタンスを生成します。
XWPFDocumentは拡張子がdocx、HWPFDocumentはdocです。
引数にFileStreamを渡すと、既存ファイルを開くことができます。

Paragraph(段落)を追加します。

Run(文字の塊)を追加します。

Runの文字列を「テスト」にします。
これまた例文のセンスが無い。。。

もうひとつRunを追加して、文字列を「モード」にします。
Runのフォントサイズを大きく太字にしてやります。

ここまで設定したら、保存を行います。
書き込み用のFileStreamを用意して、保存します。

using NPOI.XWPF.UserModel;
using System.IO;

namespace ConsoleAppNPOI
{
    class Program
    {
        static void Main(string[] args)
        {
            XWPFDocument Doc = new XWPFDocument();
            XWPFParagraph Paragraph = Doc.CreateParagraph();
            XWPFRun RunTest = Paragraph.CreateRun();

            RunTest.SetText("テスト");
            RunTest.FontFamily ="Meiryo UI";

            XWPFRun RunTest2 = Paragraph.CreateRun();
            RunTest2.SetText("モード");
            RunTest2.FontFamily = "Meiryo UI";
            RunTest2.FontSize = 18;
            RunTest2.IsBold = true;

            FileStream s = new FileStream("sample.docx", FileMode.OpenOrCreate, FileAccess.Write);
            Doc.Write(s);
            s.Close();
        }
    }
}

確認

保存されたファイルを開くと、無事に指定した文字が入っていることがわかります。
(「モード」の主張が強い!)

おわりに

今回はものすごくシンプルに文字を入れるだけの超カンタンな操作でした。
実際は表挿入などもっといろいろなことができます。
いつかまたもう少し掘り下げたものを書こうと思います。