5

OpenXML SDKを使用して、一部の<w:sdt/>要素をOpenXML(WordProcessingML)マークアップのチャンクにプログラムで置き換えています。

たとえば、次の内容の段落があります。

<w:p>
  <w:run><w:text> Text before </w:text></w:run>
  <w:sdt><w:sdtPr> ...</w:sdtPr><w:sdtContent>...</w:sdtContent></w:sdt>
  <w:run><w:text> Text after </w:text></w:run>
</w:p>

そして、このような構造のテーブル:

<w:tbl>
  <w:tblPr>...</w:tblPr>
  <w:tblGrid> ... gridCol elements ...</w:tblGrid>
  <w:tr>
    <w:trPr>...</w:trPr>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
  </w:tr>
 </w:tbl>

<w:sdt/>基本的に、段落内の要素をテーブルマークアップに置き換えたいと思います。問題は、無効なドキュメントが作成されるため、単に置き換えることができないことです(別の段落要素内に段落があるテーブルは無効です)。

私が取得したい結果はこれです:

<w:p>
  <w:run><w:text> Text before </w:text></w:run>
</w:p>
<w:tbl>
  <w:tblPr>...</w:tblPr>
  <w:tblGrid> ... gridCol elements ...</w:tblGrid>
  <w:tr>
    <w:trPr>...</w:trPr>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
    <w:tc>
   <w:tcPr>...</w:tcPr>
   <w:p> Cell contents </w:p>
    </w:tc>
  </w:tr>
</w:tbl>
<w:p>
  <w:run><w:text> Text after </w:text></w:run>
</w:p>

I was thinking on creating a method that created a new paragraph with the elements before the <w:sdt/> element, and another one with the elements after the sdt element, but it seems like such a method would be error-prone.

Is there a method that can do what I want without having to do it manually (a method that does what Word does when I try to insert a new table inside a text line)?

Any help will be greatly appreciated.

4

1 に答える 1

3

テーブルに置き換えたいコンテンツコントロールの前後の実行を別々の段落に分割するという道をたどるべきだと思います。ただし、Wordに奇妙な実行を行う理由を与えた場合にのみ、エラーが発生しやすくなります。この文ではwantsが構文的に正しくないため、新しいものは3回実行され、Wordはそれをダーティとしてフラグを立て、Wordで修正または無視することを選択しない限り、3回実行されたままになります。それが私が予見する唯一の問題です。

ただし、それを回避する戦略がある場合(ユーザーにドキュメントのスペルチェックを強制するなど)、残りは確かに実行可能です。Eric Whiteのブログに慣れていない場合は、WordでOpenXMLSDKを使用して開発するときに親友になります。たとえば、これらの記事だけで、関数変換を使用して解析、挿入、および置換する方法に関するほとんど/すべての質問に答える必要があります。

  1. OpenXMLWordprocessingMLドキュメントのすべてのコンテンツパーツを処理する
  2. OpenXMLワードプロセッシングドキュメントでの段落の挿入/削除/移動
  3. オープンXMLワードプロセッシングドキュメント段落での実行の分割
于 2010-07-15T03:24:53.767 に答える