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.