首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenXML "Heading2“不起作用,但"Heading1”起作用

OpenXML "Heading2“不起作用,但"Heading1”起作用
EN

Stack Overflow用户
提问于 2014-07-15 16:49:51
回答 1查看 490关注 0票数 1

当使用OpenXML heading1样式正确运行时,我遇到了问题,但heading2样式不是。我之所以能够访问这些标题,是因为我正在复制一个模板word文档,该文档已经预装了样式。

用于创建标题函数

代码语言:javascript
复制
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没有出现。

谢谢你的帮助我很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 18:39:48

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

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

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

代码语言:javascript
复制
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属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24763834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档