我正在使用OpenXML开发工具包以编程方式将一些<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>我正在考虑创建一个方法,该方法在<w:sdt/>元素之前创建一个新的段落,并在sdt元素之后创建另一个新段落,但这样的方法似乎很容易出错。
有没有一种方法可以做我想做的事情,而不需要手动操作(当我试图在文本行中插入新表格时,有一种方法可以做Word所做的事情)?
任何帮助都将不胜感激。
发布于 2010-07-15 11:24:54
我完全认为你应该沿着将内容控件之前和之后的运行分开的路径走下去,你想用一个表格替换成单独的段落。不过,只有当你给Word一个理由让它有奇怪的运行时,它才会真正容易出错。就像我想要一个新的东西一样,它将是三次运行,因为在这句话中,想要的语法是不正确的,单词会将其标记为脏,除非/直到你在Word中选择更正或忽略它,否则它将保持三次运行。这是我唯一能预见到的问题。
然而,如果你有一个绕过这一点的策略(比如强制用户对他们的文档进行拼写检查),剩下的肯定是可行的。如果你不熟悉埃里克·怀特的博客,在Word中使用Open XML SDK进行开发时,它将是你最好的朋友。例如,仅这些文章就可以回答您关于如何使用函数转换来解析、插入和替换的大部分/所有问题。
https://stackoverflow.com/questions/3251710
复制相似问题