OpenXML“Heading2"不工作,但是"Heading1"做的工作

本文关键字:quot 工作 Heading1 但是 Heading2 OpenXML | 更新日期: 2023-09-27 18:13:15

我在使用OpenXML heading1样式正常运行时遇到问题,但heading2样式不是。我应该有访问标题的原因是因为我正在复制一个模板word文档,已经有样式预加载在他们。

创建标题 的函数
public static Paragraph CreateHeading(string text, Body body, string type)
 {
            Paragraph para = body.AppendChild(new Paragraph());
            Run run = para.AppendChild(new Run());
            run.AppendChild(new Text(text));
            para.ParagraphProperties = new ParagraphProperties(new ParagraphStyleId() { Val = type });
            return para;
 }
public CustomizationInformation GenerateDocumentation(WordprocessingDocument document, EntityMetadata metadata, CustomizationInformation customizations)
        {
            _metadata = metadata;
            _customizations = customizations;
            // Create our table
            _table = TableFactory.CreateTable();

            //ParagraphFactory.CreateHeading("Attributes", document.MainDocumentPart.Document.Body, "Heading1"); // **
            ParagraphFactory.CreateHeading("Attributes", document.MainDocumentPart.Document.Body, "Heading2"); // **
            document.MainDocumentPart.Document.Body.Append(ParagraphFactory.Create("The following attributes are exposed on this entity."));
            // Initialize table
            initializeTable();
            addAttributes();
            // Add our table to the document
            document.MainDocumentPart.Document.Body.Append(_table);
            return _customizations;
        }

上述代码中*所在位置。Heading1功能工作正常,但Heading2不显示。

谢谢你的帮助我很感激

OpenXML“Heading2"不工作,但是"Heading1"做的工作

我做了一个测试,似乎在Word文档中使用样式时必须考虑几件事:

  • 在文档文件中,可能没有所有样式的定义(甚至不是所有的基本样式,除非它们应用于文档中的文本),所以当从代码编辑文档时,如果您想将其用于段落,您应该验证是否存在适当的样式声明(并在需要时添加一个)。
  • ParagraphStyleIdVal属性中指定的
  • 值不应被视为常量,即使是基本样式(如标题),因为在MS Word的其他语言版本中,这些样式可以以不同的方式命名。

您应该能够在StyleDefinitionsPart部分的文档中找到样式定义。你可以使用以下代码列出文档中定义的样式(这只是为了测试,我想保持简单,但如果你想在你的应用程序中使用它,你应该添加检查null值和处理零件集合中的多个元素):

var sDParts = document.MainDocumentPart.GetPartsOfType<StyleDefinitionsPart>();
foreach (var style in sDParts.First().Styles.ChildElements.OfType<Style>())
{
    Console.WriteLine("Style id: {0}, style name: {1}", 
        style.StyleId, 
        style.StyleName.Val);
}

我认为style.StyleId中的值设置应该用于PagraphStyleId元素中的Val属性。