web-dev-qa-db-ja.com

テンプレートdocxドキュメントとOpenXML SDK 2.0(2009年8月)のコンテンツを置き換える方法は?

目的のレイアウトを含む「テンプレート」docxドキュメントがあり、C#を使用してコンテンツを挿入したいのですが、段落や表など、ドキュメントの特定のセクションを一意にアドレス指定する方法が見つかりません。ドキュメント内の要素を一意に識別するための最良の方法は何ですか?ありがとう、マット・シャープ。

17
Matthew Sharpe

テンプレートはどのように作成されますか? * .docxの一部としてロードされた基礎となるXMLスキーマを使用していますか?または、開発者リボンからコンテンツコントロールを使用していますか?その場合、各コントロールは特定のタグ名で一意に識別されますか?これらのアプローチはどちらも、テーブルや段落の場所を制御できるため、ドキュメントの特定のセクションを簡単に識別できます。

また、 Open XML SDK 2. (。NET 3.5を使用)の使用を検討することもできます。これには、Open XMLドキュメントを開いて検査し、クリックした要素のコードを生成する方法を示す便利なDocumentReflectorツールが含まれています。

それとは別に、コンテンツコントロールの詳細については、次の投稿を確認してください。

11
Ahmad Mageed

ドキュメント変数/フィールドを使用できますか? [挿入]-> [クイックパーツ]-> [フィールド]-> [ドキュメント変数]に移動し、変数の名前を入力します。

例: http://www.codeproject.com/KB/office/Fill_Mergefields.aspx

「## insert_first_name ##」のようなプレースホルダーテキスト値を使用して、それらの変数を検索して置換することもできます。

例: http://geekswithblogs.net/DanBedassa/archive/2009/01/16/dynamically-generate-Word-2007-.docx-documents-using-.net.aspx

3
Jim W

ブックマークまたはコンテンツコントロールのいずれかを探していると思います(リボンの[開発者]タブのコード例 ここ
同じ目的でExcelの名前付き範囲を使用しました。

3
foson

これを行うにはいくつかのオプションがあります。

タグを値に置き換える単純なオープンソースライブラリを作成しました。

たとえば、Hi {name}data={name:"John"}は、Hi Johnに置き換えられます。

ここにあります: https://github.com/edi9999/docxtemplater

デモ: http://javascript-ninja.fr/docxgenjs/examples/demo.html

1
edi9999