Nu-*_*hin 5 .net c# ms-office 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)));
}
Run Code Online (Sandbox Code Playgroud)
文本已插入,但其样式设置为 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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,w:bookmarkStart和w:bookmarkEnd标签出现在表格的实际内容之外(看起来是书签后面的 w:r 标签)。即使我在创建书签之前选择了整个单元格内容,也会发生这种情况。因此,我怀疑,bookmarkStart.InsertAfterSelf正如您所见,任何调用都将使用默认字体设置,而不是与表格单元格关联的任何设置。在我看来,您似乎需要立即导航到书签之后的运行,并在其中插入文本,或者将设置(可能是标签的内容w:rPr)从下一次运行复制到您创建的新运行中。
希望这能为您指明正确的方向。祝你好运!
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |