簡體   English   中英

OpenXML:替換 <sdt/> WordprocessingML中的表格元素

[英]OpenXML: Replace <sdt/> element with table in WordprocessingML

我正在使用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會執行什么操作)?

任何幫助將不勝感激。

我完全認為你應該沿着將要用表替換的內容控制之前和之后的運行分成單獨的段落。 如果你讓Word有理由進行奇怪的運行,那么它只是非常容易出錯。 就像我想要一個新的東西會是三場奔跑,因為在這句話語法不正確和Word將標記為臟,除非/直到你在Word中選擇糾正或忽略它,它仍將是三場奔跑。 這是我預見的唯一問題。

但是,如果你有一個策略(比如強迫用戶拼寫檢查他們的文檔),剩下的肯定是可行的。 如果您不熟悉Eric White的博客,那么在使用Word中的Open XML SDK進行開發時,它將是您最好的朋友。 例如,單獨這些文章應該回答大部分/全部關於如何使用功能轉換來解析,插入和替換的問題。

  1. 處理Open XML WordprocessingML文檔中的所有內容部分
  2. 在Open XML Wordprocessing Documents中插入/刪除/移動段落
  3. 在Open XML Word處理文檔段落中拆分運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM