簡體   English   中英

如何通過OpenXML SDK插入時保持當前樣式?

[英]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:bookmarkStartw:bookmarkEnd標記出現在表的實際內容之外(它似乎是書簽后面的w:r標記)。 即使我在創建書簽之前選擇了整個單元格內容,也會發生這種情況。 因此,我懷疑對bookmarkStart.InsertAfterSelf任何調用將如您所見,使用默認字體設置,而不是與表格單元格關聯的任何設置。 它看起來好像你需要在書簽后立即導航到運行,並在那里插入文本,或者將設置(可能是w:rPr標簽的內容)從下次運行復制到新運行中你創造。

希望這會指出你在適當的方向。 祝好運!

暫無
暫無

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

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