[英]How to keep current style in when inserting via OpenXML SDK?
我有一個docx文檔,我想通過OpenXML SDK進行修改。 該文檔的表格中包含書簽。 這些單元格有特定的字體設置,比方說它是Times New Roman,14pt。 當我嘗試插入這樣的文本時:
public void ReplaceBookmark(string bookMarkName, string text)
{
var bookmarkStart =
_document.MainDocumentPart.RootElement.Descendants<BookmarkStart>()
.Where(p => p.Name == bookMarkName)
.FirstOrDefault();
if (bookmarkStart == null)
return;
bookmarkStart.InsertAfterSelf(new Run(new Text(text)));
}
插入文本,但其樣式設置為Calibri,11pt(默認樣式)。 如何插入文本以保留字體設置? 重要的是我不應該在代碼中定義任何樣式設置,而是使用原始文檔的樣式設置。
謝謝。
我對docx文件格式進行了一些調查。 顯然我不能專門談論你正在使用的文件...但我認為你可能對我發現的內容感興趣。
如果您創建docx文件的副本並為其指定.zip擴展名,則可以提取文檔的內容。 在我的情況下,也可能在你的情況下,文檔的主要部分在提取的文件[Extraction Base Path]\\word\\document.xml
。
以下XML代碼段似乎適用於表中的第一個單元格(對於我創建的文檔):
<w:tc>
<w:tcPr>
<w:tcW w:w="3192" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="006C4430" w:rsidRPr="006C4430" w:rsidRDefault="006C4430">
<w:pPr>
<w:rPr>
<w:rFonts w:ascii="Ariel" w:hAnsi="Ariel"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
</w:pPr>
<w:bookmarkStart w:id="0" w:name="First"/>
<w:bookmarkEnd w:id="0"/>
<w:r w:rsidRPr="006C4430">
<w:rPr>
<w:rFonts w:ascii="Bauhaus 93" w:hAnsi="Bauhaus 93"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
<w:t>Here is some text</w:t>
</w:r>
</w:p>
</w:tc>
如您所見, w:bookmarkStart
和w:bookmarkEnd
標記出現在表的實際內容之外(它似乎是書簽后面的w:r標記)。 即使我在創建書簽之前選擇了整個單元格內容,也會發生這種情況。 因此,我懷疑對bookmarkStart.InsertAfterSelf
任何調用將如您所見,使用默認字體設置,而不是與表格單元格關聯的任何設置。 它看起來好像你需要在書簽后立即導航到運行,並在那里插入文本,或者將設置(可能是w:rPr
標簽的內容)從下次運行復制到新運行中你創造。
希望這會指出你在適當的方向。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.