在Novacode中添加样式到Docx

Sea*_*ean 7 c# docx

使用Novacode的DocX,我可以添加一个带有Heading 1样式的段落,如下所示:

var p = docX.InsertParagraph("My Heading");
p.StyleName = "Heading1";
Run Code Online (Sandbox Code Playgroud)

但我无法添加"标题"样式:

var p = docX.InsertParagraph("My Heading");
p.StyleName = "Title";
Run Code Online (Sandbox Code Playgroud)

我查看了生成的Xml文件,我看到"标题"样式不在Styles.xml文件中,而如果我在Word中将其设置为标题样式并保存,则标题样式将出现在样式Xml文件中.

那么我如何让DocX包含Title样式,或者如何在DocX样式中添加样式?

xwi*_*ing 6

我也遇到这个问题。通过比较 docx(zipped) 文件中的 word\document.xml 和 word\styles.xml 文件。我发现 Paragraph.StyleName 应该分配样式 id 而不是样式名称!

例如:styles.xml 中的一种样式:

<w:style w:type="paragraph" w:customStyle="1" w:styleId="a9">
    <w:name w:val="mystyle" /> 
Run Code Online (Sandbox Code Playgroud)

您应该将“ a9 ”而不是“ mystyle ”分配给 Paragraph.StyleName 以获得正确的样式。

希望有帮助。


Joh*_*abb 1

事实证明,有几种样式未在该库中实现。如果您查看 _Enumerations.cs 文件中的源代码,就会发现有一个名为 HeadingType 的枚举。在此枚举中,有一些注释,标题和其他几个未实现,因为它们与标题不同。看起来注释说您可以自己尝试,但这需要将 docx 的自定义构建包含在您的项目中。

我建议您找出字体特征并手动设置或在配置文件中设置它们。简单的例子。

static void AddTitle()
{
    Console.WriteLine("\tAddTitle()");
    using (var document = DocX.Create(@"docs\Title.docx"))
    {
        var title = document.InsertParagraph("this should be a title");
        title.FontSize(28).Font(new FontFamily("Calibri Light"));
        document.InsertParagraph("title is above!");
        document.Save();
    }
}
Run Code Online (Sandbox Code Playgroud)