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>

我正在考虑创建一种方法,该方法使用元素之前的<w:sdt/>元素创建一个新段落,另一个使用 sdt 元素之后的元素创建一个新段落,但似乎这样的方法容易出错。

有没有一种方法可以做我想做的事而无需手动操作(当我尝试在文本行中插入新表格时,Word 会做这种方法)?

任何帮助将不胜感激。

4

1 回答 1

3

我完全认为您应该沿着将要替换为表格的内容控件之前和之后的运行拆分为单独段落的路径。如果你给 Word 一个奇怪的运行的理由,那么它只会很容易出错。就像我想要一个新事物一样,需要运行三轮,因为想要在这句话中的语法不正确,Word 会将其标记为脏,除非/直到您在 Word 中选择更正或忽略它,否则它将保持三轮运行。这是我能预见的唯一问题。

但是,如果您有一个解决此问题的策略(例如强制用户对其文档进行拼写检查),那么其余的当然是可行的。如果您不熟悉 Eric White 的博客,那么在 Word 中使用 Open XML SDK 进行开发时,它将是您最好的朋友。例如,仅这些文章就应该回答您关于如何使用函数转换来解析、插入和替换的大部分/所有问题。

  1. 处理 Open XML WordprocessingML 文档中的所有内容部分
  2. 在 Open XML 字处理文档中插入/删除/移动段落
  3. 在 Open XML 文字处理文档段落中拆分运行
于 2010-07-15T03:24:53.767 回答