OpenXML将段落样式(Heading1,Heading2,Head 3 Etc)添加到文字处理文档中

时间:2013-07-29 11:24:12

标签: c# openxml-sdk word-automation

有人可以指导我如何使用开放式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" };

2 个答案:

答案 0 :(得分:8)

如果您正在编辑现有文档,您的技术将完全有效。问题是新文档没有预定义的“标题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());

&LT;讽刺&GT;参见? OpenXML是小菜一碟!&lt; / sarcasm&gt;我发誓,我的眼睛滚得很厉害,我很头疼。

答案 1 :(得分:0)

(Sry,我的英文)

我认为样式名称取决于您的语言,使用您的单词。

英文风格的标题1:“标题1” 在Hungarien:“Címsor1” - &gt; stlye id:“Cmsor1”

我看到了docx xml样式文件。

我如何解决这个问题:

  1. “sample.docx”重命名为“sample.rar”
  2. 使用winrar打开“sample.rar”。
  3. 打开“word”文件夹。
  4. 打开“style.xml”文件。
  5. 并搜索您需要的样式名称或属性。
  6. 样式层次非常重要!

    这也适用于我的桌子风格。