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
不显示。
谢谢你的帮助我很感激
我做了一个测试,似乎在Word文档中使用样式时必须考虑几件事:
- 在文档文件中,可能没有所有样式的定义(甚至不是所有的基本样式,除非它们应用于文档中的文本),所以当从代码编辑文档时,如果您想将其用于段落,您应该验证是否存在适当的样式声明(并在需要时添加一个)。 在
- 值不应被视为常量,即使是基本样式(如标题),因为在MS Word的其他语言版本中,这些样式可以以不同的方式命名。
ParagraphStyleId
的Val
属性中指定的您应该能够在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
属性。