代码之家  ›  专栏  ›  技术社区  ›  willvv

openxml:用wordprocessingml中的表替换<sdt/>元素

  •  3
  • willvv  · 技术社区  · 14 年前

    我正在使用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/GT; 包含表标记的段落中的元素。 问题是,我不能仅仅替换它,因为它将创建一个无效的文档(在另一个段落元素中包含段落的表无效)。

    我想得到的结果是:

    <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/GT; 元素,另一个元素在sdt元素之后,但这样的方法似乎很容易出错。

    是否有一个方法可以不必手动地执行我想要的操作(当我尝试在文本行中插入新表时,该方法执行Word的操作)?

    任何帮助都将不胜感激。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Todd Main    14 年前

    我完全认为您应该沿着将要用表替换的内容控件前后的运行拆分为单独段落的路径前进。不过,如果你给Word一个奇怪运行的理由,那就真的很容易出错。喜欢 我想要个新东西 会跑三次因为 欲望 在这个句子中是语法错误的,Word会将其标记为脏的,除非/直到您选择在Word中更正它或忽略它,否则它将保持三次运行。这是我唯一能预见的问题。

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

    1. Processing all Content Parts in an Open XML WordprocessingML Document
    2. Inserting / Deleting / Moving Paragraphs in Open XML Wordprocessing Documents
    3. Splitting Runs in Open XML Word Processing Document Paragraphs