Word文書に入力する必要があるデータを含むXMLファイルがあります。
XMLファイルからデータを取り込み、出力ドキュメントを作成するためのベースラインとして使用できるテンプレートを定義する方法を見つける必要があります。
これを行うには2つの方法があると思います。
どちらの方法を実装するかの詳細がわからないだけです。または、このタスクを実行する別の簡単な方法があるかどうかわからない。
誰かがこれを実装する方法の例を示すことができますか。簡単な例で十分です。
コーディングにはC#が好きです。私はWord 2016を使用していますが、Word 2007からWord 2016までの互換性が必要です。ユーザーはこれらのバージョンを使用するため、可能であればその間のすべてのものを使用します。ありがとうございました!
コンテンツコントロールを使用してドキュメントを生成する方法と、XMLからコンテンツコントロールにデータを入力する方法を理解しました。これを2つの部分に分けました。
テストには次のXMLを使用しました。テストのために、繰り返しセクション、写真などを持っていませんでした。
<?xml version="1.0" encoding="utf-8"?>
<mydata xmlns="http://CustomDemoXML.htm">
<field1>This is the value in field1 from the XML file</field1>
<field2>This is the value in field2 from the XML file</field2>
<field3>This is the value in field3 from the XML file</field3>
</mydata>
注1:これは単なるサンプルXMLになりますWordテンプレート。この同じ形式の実際のデータを含むXMLファイルは、テンプレートからWord文書を生成するときに後で適用できます。
注2:xmlns
属性には文字通り必要なものを含めることができ、httpで始まるURLである必要はありません。
サンプルXMLファイルを任意の場所に保存して、作成するテンプレートにインポートできるようにします。
Wordのコピーで[Developer
]タブが有効になっていることを確認してください[File
-> Options
-> Customize Ribbon
-> Customize the Ribbon
の下で、 Developer
が選択されている-> OK
]。詳細: 方法:リボンに[開発]タブを表示する
文書生成のテンプレートとなる新しいWord文書を作成します(または既存のWord文書を使用します)。
Developer
タブで、XML Mapping Pane
をクリックします。これにより、ドキュメントの右側にあるXML Mapping Pane
が開きます。
[XMLマッピング]ペインで、[Custom XML Part
]ドロップダウンを選択します-> [(Add new part)
]を選択します。
ステップ1-> Open
で保存したXMLファイルを選択します。
[XMLマッピング]ペインで[Custom XML Part
]ドロップダウンを選択します->カスタムXMLファイルのxmlns
属性にあるテキストが含まれるアイテムを選択します。上記のサンプルファイルを使用する場合、http://CustomDemoXML.htm
になります。
静的テキストをWord文書に追加し、その隣にPlain Text Content Control
を追加します(Developer
タブ-> Controls
セクション。追加する必要があるすべてのフィールドについて繰り返します。
上記のサンプルXMLには、次のWord文書がありました。
Plain Text Content Control
をクリックします-> XMLマッピングペインで、そのコンテンツコントロールにマップするフィールドを右クリックします-> Map to Selected Content Control
をクリックします。マップするすべてのフィールドに対して繰り返します。注:または、ステップ#8の開発者タブからPlain Text Content Control
アイテムを追加する代わりに、目的のフィールドを右クリックすることもできます。 [XMLマッピング]ペインにマップするには-> [Insert Content Control
]をクリックし、[Plain Text
]をクリックします。
同様に、チェックボックス、日付ピッカー、繰り返しセクション(ネストされた繰り返しセクションもサポートしています!-Word 2013以降)などの他のタイプのコントロールを追加し、XMLからネイティブのWord機能のみを使用してサードパーティなしでデータをXMLからマップすることもできますツール!
これは、Microsoftの推奨 OpenXML SDK を使用して、実際のデータを含むXMLファイルを使用してドキュメントを生成します。
XMLファイルを作成するか、既存のXMLファイルを開いて、上記で作成したテンプレートからドキュメントを生成します。これは、テンプレートの作成に使用されるサンプルXMLファイルと同じ形式である必要があります。
OpenXML SDKを使用して、ドキュメントからCustomXMLPart
要素を削除します。この例では、ドキュメント内で他のカスタムXMLパーツが使用されていないことを前提としています。複雑なシナリオでは、必要に応じて特定のXMLパーツを削除できます。
OpenXML SDKを使用して、上記の手順1のXMLファイルに基づいて新しいCustomXMLPart
を追加します。
テンプレートのサンプルデータを実際のデータを含むXMLファイルのデータで「更新」/「再読み込み」する必要があるサンプルコードを次に示します(ドキュメントの生成に使用されるXMLファイルが既に作成および保存されていると仮定)。
using System.IO;
using DocumentFormat.OpenXml.Packaging;
namespace SampleNamespace
{
public static class SampleClass
{
public static void GenerateDocument()
{
string rootPath = @"C:\Temp";
string xmlDataFile = rootPath + @"\MyNewData.xml";
string templateDocument = rootPath + @"\MyTemplate.docx";
string outputDocument = rootPath + @"\MyGeneratedDocument.docx";
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateDocument, true))
{
//get the main part of the document which contains CustomXMLParts
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
//delete all CustomXMLParts in the document. If needed only specific CustomXMLParts can be deleted using the CustomXmlParts IEnumerable
mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);
//add new CustomXMLPart with data from new XML file
CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using (FileStream stream = new FileStream(xmlDataFile, FileMode.Open))
{
myXmlPart.FeedData(stream);
}
}
}
}
}
それでおしまい!
ここで、XSLTをテンプレートとして使用してWord文書を生成する詳細なガイドを見つけました: XSLTとOpen XMLを使用してWord 2007文書を作成する 。
この記事はWord 2007向けですが、Word 2016でも完全に機能します。
このメソッドの唯一の問題は、後でテンプレートを変更する必要がある場合、xsltファイルを更新するのに多大な労力が必要であり、Word自体とドキュメントの実際のXMLで更新できないため、ユーザーフレンドリーではありません操作する必要があります。
プラス面では、ドキュメント生成は非常に柔軟であり、XSLを介してすべてのパワーを使用できます(foreach、変数、if条件など)。