3

我希望创建的 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”?

4

1 回答 1

3

如果您像我一样发现这篇文章,因为您尝试使用 OpenXML 构建文档,默认样式为“标题 1”、“标题 2”、“标题”等。当您使用 Microsoft Word 时,我发现几个小时后解决。

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

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

我从这篇博文中找到了一些代码来从模板创建和修改文档:

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 中的“样式集”。

于 2013-04-12T09:13:10.663 回答