使用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
未显示。
感谢您的帮助,我很感激。
答案 0 :(得分:1)
我做了一个测试,在Word文档中使用样式时似乎必须考虑几件事情:
Val
ParagraphStyleId
属性中指定的值不应被视为常量,即使对于基本样式(如标题),因为在其他语言版本的MS Word中,这些样式的名称可以不同。< / LI>
您应该能够在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
中设置的值是应该用于Val
元素中PagraphStyleId
属性的值。