0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#コードを使用してテンプレートからWord文書を作成する

0
Posted at

レポート、契約書、またはパーソナライズされた手紙の作成など、業務アプリケーションにおいてWord文書をプログラムで生成することは一般的な要件です。Spire.Doc for .NET は、Microsoft Office に依存せずに C# で Word 文書を操作するための包括的なソリューションを提供します。

本記事では、テンプレートから文書を生成するための2つの効果的なアプローチ、すなわちテキストのプレースホルダー置換とブックマーク内容の編集について解説します。

Word文書を作成するための .NET ライブラリ

Spire.Doc for .NET は、開発者がさまざまなドキュメント処理タスクを実行できるプロフェッショナルな Word API です。主な機能は以下のとおりです:

  • Word文書の作成、読み取り、編集、および変換
  • DOC、DOCX、RTF などの形式に対応
  • テンプレートベースのドキュメント生成
  • 差し込み印刷(メールマージ)機能
  • 元の書式の保持

このライブラリは、特に一貫性と効率が重要となるエンタープライズアプリケーションにおいて、ドキュメント生成の自動化に非常に有用です。

テンプレートから Word 文書を生成するには、公式サイトから Spire.Doc for .NET をダウンロードするか、以下のコマンドを使用して NuGet パッケージマネージャーからインストールしてください:

PM> Install-Package Spire.Doc

テキストプレースホルダーの置換による Word 文書の作成

Spire.Doc ライブラリの Document.Replace メソッドは、Word 文書内の特定のテキストを検索して置換するために使用されます。このメソッドを使用することで、テキストプレースホルダーを効率的に編集でき、テンプレートに基づいた動的なドキュメント生成が可能になります。

以下は、テキストパターンの置換による Word 文書生成の手順です:

  1. ドキュメントの初期化:新しい Document オブジェクトを作成し、テンプレートファイルを読み込みます
  2. プレースホルダーの定義:辞書を使用して、プレースホルダー(例:#name#)と置換する値をマッピングします
  3. テキストの置換:Document.Replace メソッドにより、すべてのプレースホルダーが大文字・小文字を区別し、完全一致で置換されます
  4. 画像の処理:カスタムの ReplaceTextWithImage メソッドを使用して、テキストプレースホルダーを特定し、画像に置き換えます
  5. ドキュメントの保存:変更後のドキュメントを新しいファイル名で保存します

サンプルコードは以下のとおりです:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

namespace テキストプレスホルダ置換によるWord作成
{
    class Program
    {
        static void Main(string[] args)
        {
            // 新しい Document オブジェクトを初期化
            Document document = new Document();

            // テンプレートとなる Word ファイルを読み込む
            document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");

            // テキストプレースホルダーと置換値を格納する辞書
            Dictionary<string, string> replaceDict = new Dictionary<string, string>
            {
                { "#name#", "John Doe" },
                { "#gender#", "Male" },
                { "#birthdate#", "January 15, 1990" },
                { "#address#", "123 Main Street" },
                { "#city#", "Springfield" },
                { "#state#", "Illinois" },
                { "#postal#", "62701" },
                { "#country#", "United States" }
            };

            // ドキュメント内のプレースホルダーを対応する値に置換
            foreach (KeyValuePair<string, string> kvp in replaceDict)
            {
                document.Replace(kvp.Key, kvp.Value, true, true);
            }

            // 画像ファイルのパス
            String imagePath = "C:\\Users\\Administrator\\Desktop\\portrait.png";

            // 「#photo#」プレースホルダーを画像に置換
            ReplaceTextWithImage(document, "#photo#", imagePath);

            // 変更後のドキュメントを保存
            document.SaveToFile("ReplacePlaceholders.docx", FileFormat.Docx);

            // リソースを解放
            document.Dispose();
        }

        // ドキュメント内のプレースホルダーを画像に置換するメソッド
        static void ReplaceTextWithImage(Document document, String stringToReplace, String imagePath)
        {
            // 指定されたパスから画像を読み込む
            Image image = Image.FromFile(imagePath);
            DocPicture pic = new DocPicture(document);
            pic.LoadImage(image);

            // ドキュメント内でプレースホルダーを検索
            TextSelection selection = document.FindString(stringToReplace, false, true);

            // 検索結果のテキスト範囲を取得
            TextRange range = selection.GetAsOneRange();
            int index = range.OwnerParagraph.ChildObjects.IndexOf(range);

            // 画像を挿入し、元のプレースホルダーテキストを削除
            range.OwnerParagraph.ChildObjects.Insert(index, pic);
            range.OwnerParagraph.ChildObjects.Remove(range);
        }
    }
}

ブックマーク内容の置換による Word 文書の作成

Spire.Doc の BookmarksNavigator クラスは、Word 文書内のブックマークを管理および操作するために特別に設計されています。このクラスを使用することで、ブックマーク内のコンテンツを検索・置換する処理が簡素化され、各ブックマークを手動で探すことなく、ドキュメント内の特定セクションを簡単に更新できます。

以下は、ブックマーク内容の置換による Word 文書生成の手順です:

  1. ドキュメントの初期化:新しい Document オブジェクトを作成し、テンプレートファイルを読み込みます
  2. ブックマーク内容の定義:辞書を作成し、ブックマーク名と置換する内容をマッピングします
  3. ブックマークのナビゲーション:BookmarksNavigator クラスにより、ブックマークの位置を正確に制御できます
  4. コンテンツの置換:ReplaceBookmarkContent メソッドを使用して、ブックマークを保持したまま内容を更新します
  5. ドキュメントの保存:変更後のドキュメントを新しいファイル名で保存します

サンプルコードは以下のとおりです:

using Spire.Doc;
using Spire.Doc.Documents;

namespace ブックマク内容置換によるWord作成
{
    class Program
    {
        static void Main(string[] args)
        {
            // 新しい Document オブジェクトを初期化
            Document document = new Document();

            // テンプレートとなる Word ファイルを読み込む
            document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");

            // ブックマーク名とその置換内容を定義
            Dictionary<string, string> replaceDict = new Dictionary<string, string>
            {
                { "name", "Tech Innovations Inc." },
                { "year", "2015" },
                { "headquarter", "San Francisco, California, USA" },
                { "history", "Tech Innovations Inc. は、テクノロジー分野に革命をもたらすことを目指したエンジニアと起業家のグループによって設立されました。" +
                              "当初はソフトウェア開発に注力していましたが、その後、人工知能やクラウドコンピューティングソリューションへと事業を拡大しました。" }
            };

            // ドキュメント内のブックマークを管理するための BookmarksNavigator を作成
            BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);

            // 各ブックマークの内容を対応する値で置換
            foreach (KeyValuePair<string, string> kvp in replaceDict)
            {
                bookmarkNavigator.MoveToBookmark(kvp.Key); // ブックマークへ移動
                bookmarkNavigator.ReplaceBookmarkContent(kvp.Value, true); // 内容を置換
            }

            // 変更後のドキュメントを保存
            document.SaveToFile("ReplaceBookmarkContent.docx", FileFormat.Docx2013);

            // リソースを解放
            document.Dispose();
        }
    }
}

結論

どちらの方法もテンプレートからドキュメントを生成するための効果的な手段ですが、重要な違いがあります:

テキスト置換方式:

  • 置換時にプレースホルダーが完全に削除される
  • 一度きりのドキュメント生成に最適
  • テキストを画像に置き換える用途により適している

ブックマーク置換方式:

  • 将来の更新のためにブックマークを保持できる
  • 定期的な更新が必要なテンプレートに最適

さらに、Spire.Doc for .NET はメールマージ機能もサポートしており、テンプレートからドキュメントを動的に生成するもう一つの強力な方法を提供します。この機能は、データベースやその他の構造化データソースから情報を取得し、フォームレターやレポートなどのパーソナライズされたドキュメントを一括生成する場合に特に有用です。

無料ライセンスの取得

評価版の制限なしで Spire.Doc for .NET の機能を十分に体験するには、30日間の無料トライアルライセンスを申請できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?