Documentformat.openxml - 使用默认样式创建word文档

时间:2013-01-17 11:43:06

标签: c# ms-word openxml

我希望创建的word文档使用Word中的默认样式,因此用户可以使用内置主题更改样式。

我尝试过使用:

        var paragraph = new Paragraph();
        var run = new Run();
        run.Append(new Text(text));
        paragraph.Append(run);
        var header = new Header();
        header.Append(paragraph);

但其风格为“正常”。

那么,当我在Word中打开文档时,如何使其成为“标题1”?

1 个答案:

答案 0 :(得分:2)

如果您和我一样,并且您发现此帖子是因为您尝试使用OpenXML使用默认样式“标题1”,“标题2”,“标题”等来构建文档,那么当您使用Microsoft Word时几个小时后我找到了解决方案。

首先,我尝试在普通模板“Normal.dotm”中找到样式。这不是存储样式的地方,你看错了地方。默认样式实际上是在名为QuickStyles的目录中的“Default.dotx”文件中定义的。

路径将根据您的版本和操作系统而改变。对我来说,我在“C:\ Program Files(x86)\ Microsoft Office \ Office14 \ 1033 \ QuickStyles”中找到了dotx。

我从this blog post找到了一些代码来创建和修改模板中的文档:

void CreateWordDocumentUsingMSWordStyles(string outputPath, string templatePath)
{
    // create a copy of the template and open the copy
    System.IO.File.Copy(templatePath, outputPath, true);

    using (var document = WordprocessingDocument.Open(outputPath, true))
    {
        document.ChangeDocumentType(WordprocessingDocumentType.Document);

        var mainPart = document.MainDocumentPart;
        var settings = mainPart.DocumentSettingsPart;

        var templateRelationship = new AttachedTemplate { Id = "relationId1" };
        settings.Settings.Append(templateRelationship);

        var templateUri = new Uri("c:\\anything.dotx", UriKind.Absolute); // you can put any path you like and the document styles still work
        settings.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate", templateUri, templateRelationship.Id);

        // using Title as it would appear in Microsoft Word
        var paragraphProps = new ParagraphProperties();
        paragraphProps.ParagraphStyleId = new ParagraphStyleId { Val = "Title" };

        // add some text with the "Title" style from the "Default" style set supplied by Microsoft Word
        var run = new Run();
        run.Append(new Text("My Title!"));

        var paragraph = new Paragraph();
        paragraph.Append(paragraphProps);
        paragraph.Append(run);

        mainPart.Document.Body.Append(paragraph);

        mainPart.Document.Save();
    }
}

只需使用指向Default.dotx文件的templatePath调用此方法,您就可以使用Microsoft Word中显示的默认样式。

var path = System.IO.Path.GetTempFileName();

CreateWordDocumentUsingMSWordStyles(path, "C:\\Program Files (x86)\\Microsoft Office\\Office14\\1033\\QuickStyles\\Default.dotx");

这会让用户按照原始问题打开文档后更改Word中的“样式集”。