C#でテンプレートからWordを生成する

Word文書の自動生成は、多数のレポートを作成するために企業で広く使用されています。場合によっては、ドキュメントは最初から作成されます。一方、事前定義されたテンプレートは、プレースホルダーにデータを入力してWord文書を生成するために使用されます。この記事では、C#でテンプレートから動的かつプログラム的にWord文書を生成する方法を示します。さまざまな種類のデータソースからWordテンプレートにデータを入力する方法を理解できるようになります。

この記事では、次のシナリオとコードサンプルについて説明します。

C#Word Automation API

Aspose.Words for .NETを使用します-Word文書を最初から生成するか、事前定義されたWordテンプレートに入力することでWord文書を生成できるWord自動化APIです。 APIのバイナリをダウンロードするか、次のいずれかの方法でインストールできます。

NuGetパッケージマネージャーの使用

パッケージマネージャーコンソールの使用

PM> Install-Package Aspose.Words

C#オブジェクトを使用してテンプレートからWord文書を生成する

まず、C#オブジェクトを使用してWordテンプレートにデータを入力する方法を見てみましょう。このために、ドキュメントのコンテンツとして次のプレースホルダーを使用してWordドキュメント(DOC / DOCX)を作成します。

<<[sender.Name]>> says: "<<[sender.Message]>>."

ここで、送信者は、テンプレートにデータを入力するために使用する次のクラスのオブジェクトです。

public class Sender
{
	public string Name { get; set; }
	public string Message { get; set; }

	public Sender (string _name, string _message)
	{
		Name = _name;
		Message = _message;
	}
}

次に、Aspose.Wordsのレポートエンジンを使用して、以下の手順に従って、テンプレートとSenderクラスのオブジェクトからWordドキュメントを生成します。

  • Documentクラスのオブジェクトを作成し、Wordテンプレートのパスで初期化します。
  • Senderクラスのオブジェクトを作成して初期化します。
  • ReportingEngineクラスをインスタンス化します。
  • ReportingEngine.BuildReport()を使用してテンプレートにデータを入力します。これは、ドキュメントのオブジェクト、データソース、およびデータソースの名前をパラメーターとして受け取ります。
  • Document.Save()メソッドを使用して生成されたWord文書を保存します。

次のコードサンプルは、C#のテンプレートからWordドキュメントを生成する方法を示しています。

Document doc = new Document("template.docx");
Sender sender = new Sender("LINQ Reporting Engine", "Hello World");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, sender, "sender");
doc.Save("word.docx");

出力

C#でXMLデータソースからWord文書を生成する

XMLデータソースからWord文書を生成するために、次のプレースホルダーを持つもう少し複雑なWordテンプレートを使用します。

<<foreach [in persons]>>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.Average(p => p.Age)]>>

この例で使用したXMLデータソースを以下に示します。

<Persons>
   <Person>
       <Name>John Doe</Name>
       <Age>30</Age>
       <Birth>1989-04-01 4:00:00 pm</Birth>
   </Person>
   <Person>
       <Name>Jane Doe</Name>
       <Age>27</Age>
       <Birth>1992-01-31 07:00:00 am</Birth>
   </Person>
   <Person>
       <Name>John Smith</Name>
       <Age>51</Age>
       <Birth>1968-03-08 1:00:00 pm</Birth>
   </Person>
</Persons>

XMLデータソースからWord文書を生成する手順は次のとおりです。

  • Documentクラスのインスタンスを作成し、Wordテンプレートのパスで初期化します。
  • XmlDataSourceクラスのインスタンスを作成し、XMLファイルのパスで初期化します。
  • ReportingEngineクラスをインスタンス化します。
  • 以前にWordテンプレートにデータを入力するために使用したのと同じ方法でReportingEngine.BuildReport()メソッドを使用します。
  • Document.Save()メソッドを使用して、生成されたWord文書を保存します。

次のコードサンプルは、C#でXMLデータソースからWordドキュメントを生成する方法を示しています。

Document doc = new Document("template.docx");
XmlDataSource dataSource = new XmlDataSource("datasource.xml");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "persons");
doc.Save("word.docx");

出力

C#でJSONデータソースからWord文書を生成する

次に、JSONデータソースを使用してWordドキュメントを生成する方法を見てみましょう。この例では、マネージャーによってグループ化されたクライアントのリストを生成します。この場合、Wordテンプレートは次のようになります。

<<foreach [in managers]>>Manager: <<[Name]>>
Contracts:
<<foreach [in Contract]>>- <<[Client.Name]>> ($<<[Price]>>)
<</foreach>>
<</foreach>>

以下は、テンプレートにデータを入力するために使用するJSONデータソースです。

[
   {
       Name: "John Smith",
       Contract:
       [
           {
               Client:
               {
                   Name: "A Company"
               },
               Price: 1200000
           },
           {
               Client:
               {
                   Name: "B Ltd."
               },
               Price: 750000
           },
           {
               Client:
               {
                   Name: "C & D"
               },
               Price: 350000
           }
       ]
   },
   {
       Name: "Tony Anderson",
       Contract:
       [
           {
               Client:
               {
                   Name: "E Corp."
               },
               Price: 650000
           },
           {
               Client:
               {
                   Name: "F & Partners"
               },
               Price: 550000
           }
       ]
   },
]

JSONからWord文書を生成するために、JsonDataSourceクラスを使用してJSONデータソースをロードおよび使用します。残りの手順は同じままです。次のコードサンプルは、C#でJSONを使用してテンプレートからWordドキュメントを生成する方法を示しています。

Document doc = new Document("template.docx");
JsonDataSource dataSource = new JsonDataSource("datasource.json");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "managers");
doc.Save("word.docx");

出力

C#でCSVデータソースからWord文書を生成する

CSVからWord文書を生成するには、次のWordテンプレートを使用します。

<<foreach [in persons]>>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.Average(p => p.Column2)]>>

テンプレートには、次のCSVデータが入力されます。

John Doe,30,1989-04-01 4:00:00 pm
Jane Doe,27,1992-01-31 07:00:00 am
John Smith,51,1968-03-08 1:00:00 pm

それでは、C#コードについて見ていきましょう。ここでも、CsvDataSourceクラスを使用してCSVデータを読み込むという1つの変更を除いて、すべての手順は同じままです。次のコードサンプルは、CSVデータソースからWordドキュメントを生成する方法を示しています。

Document doc = new Document("template.docx");
CsvDataSource dataSource = new CsvDataSource("datasource.csv");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "persons");
doc.Save("word.docx");

出力

Aspose.Words for .NETを無料でお試しください

無料の一時ライセンスを使用して、Aspose.Words for .NETを試すことができます。

結論

この記事では、C#を使用してテンプレートからWord文書を生成する方法を学習しました。さらに、オブジェクト、XML、JSON、CSVデータソースを使用してWord文書を生成する方法を見てきました。 ドキュメントを使用して、C#Word自動化APIの詳細を調べることができます。また、フォーラムからお問い合わせいただけます。

関連項目