gpt4 book ai didi

c# - OpenXML:用 WordprocessingML 中的表替换 元素

转载 作者:行者123 更新时间:2023-11-30 16:33:23 25 4
gpt4 key购买 nike

我正在使用 OpenXML SDK 以编程方式替换一些 <w:sdt/>带有 OpenXML (WordProcessingML) 标记 block 的元素。

例如,我有一个包含这些内容的段落:

<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 的操作)?

任何帮助将不胜感激。

最佳答案

我完全认为您应该将要用表格替换的内容控件之前和之后的运行拆分为单独的段落。如果您给 Word 一个奇怪运行的理由,那么它真的很容易出错。就像 I wants a new thing 将运行三遍,因为 wants 在这句话中在句法上不正确,Word 会将其标记为脏,除非/直到您在 Word 中选择更正它或者忽略它,它将保持三个运行。这是我唯一能预见的问题。

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

  1. Processing all Content Parts in anOpen XML WordprocessingMLDocument
  2. Inserting / Deleting / MovingParagraphs in Open XMLWordprocessing Documents
  3. Splitting Runs in Open XML WordProcessing Document Paragraphs

关于c# - OpenXML:用 WordprocessingML 中的表替换 <sdt/> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com