OpenXML将段落样式(标题1、标题2、标题3等)添加到文字处理文档中
本文关键字:标题 添加 文档 文字处理 段落 样式 OpenXML | 更新日期: 2023-09-27 18:25:15
有人能指导我如何使用开放式XML文字处理在段落上添加预定义样式吗?我尝试过论坛上的各种解决方案,但都不适合我。以下是我想要完成的:
// Create a document by supplying the filepath.
WordprocessingDocument wordDocument = WordprocessingDocument.Create("E:/Test/Executive.Docx", WordprocessingDocumentType.Document);
// Add a main document part.
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
// Create the document structure and add some text.
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
if (para.Elements<ParagraphProperties>().Count() == 0)
para.PrependChild<ParagraphProperties>(new ParagraphProperties());
// Get the ParagraphProperties element of the paragraph.
ParagraphProperties pPr = para.Elements<ParagraphProperties>().First();
// Set the value of ParagraphStyleId to "Heading3".
pPr.ParagraphStyleId = new ParagraphStyleId() { Val = "Heading1" };
如果您正在编辑现有文档,那么您的技术将完全有效。问题是新文档没有预定义"标题1"。你必须添加它。所以你有两个选择:
1.使用现有的模板文档
创建一个模板文档(TemplatePath)用作基础。在代码中,将其复制到最终目的地(FinalPath),并向其添加文本/任何内容,应用样式。标题1将已在模板中。
if (File.Exists(FinalPath))
File.Delete(FinalPath);
File.Copy(TemplatePath, FinalPath);
WordprocessingDocument wordDocument = WordprocessingDocument.Open(FinalPath, true);
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
para.ParagraphProperties = new ParagraphProperties(new ParagraphStyleId() { Val="Heading1" });
2.从头开始创建新文档
如果你这样做,它将没有内置的样式。因此,创建一个样式,称之为"标题1",并将其应用于您的段落。
WordprocessingDocument wordDocument = WordprocessingDocument.Create(FinalPath, WordprocessingDocumentType.Document);
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
StyleDefinitionPart styleDefinitionsPart = wordDocument.AddStylesDefinitionPart();
Styles styles = styleDefinitionsPart.Styles;
Style style = new Style() {
Type = StyleValues.Paragraph,
StyleId = styleid,
CustomStyle = true
};
StyleName styleName1 = new StyleName() { Val = "Heading1" };
style.Append(styleName1);
StyleRunProperties styleRunProperties1 = new StyleRunProperties();
styleRunProperties1.Append(new Bold);
styleRunProperties1.Append(new Italic());
styleRunProperties1.Append(new RunFonts() { Ascii = "Lucida Console" };);
styleRunProperties1.Append(new FontSize() { Val = "24" }); // Sizes are in half-points. Oy!
style.Append(styleRunProperties1);
styles.Append(style);
pPr.ParagraphStyleId = new ParagraphStyleId(){ Val = "Heading1" };
para.PrependChild<ParagraphProperties>(new ParagraphProperties());
<讽刺>看见OpenXML是小菜一碟<讽刺>我发誓,我的眼睛转得太厉害了,我头疼。
我认为样式名称取决于您的Microsoft Office语言,例如:
标题1
in English is: "Heading 1"
in Hungarien is: "Címsor 1" -> style id: "Cmsor1"
通过查看您的Word文档xml样式文件,您将能够找到上述信息。
步骤:
- 重命名任何单词文档,例如";sample.docx";至";sample.zip"
- 打开";sample.zip"
- 打开";单词";zip文件中的文件夹
- 打开";style.xml";文件
- 搜索您要查找的样式的名称或属性
样式层次结构非常重要。