2013-07-29 22 views
5

Czy ktoś może mi pomóc w dodawaniu wstępnie zdefiniowanych stylów w paragrafie przy użyciu otwartego przetwarzania XML Word? Próbowałem różnych rozwiązań dostępnych na forach, ale nic nie działa dla mnie. Oto, co chcę osiągnąć:OpenXML Dodaj styl akapitowy (Nagłówek1, Nagłówek2, Głowa 3 Etc) do dokumentu edytora tekstu

   // 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" }; 

Odpowiedz

7

Twoja technika całkowicie by działała, gdybyś edytował istniejący dokument. Problem polega na tym, że nowy dokument nie ma predefiniowanego "Nagłówka 1". Musiałbyś to dodać. Więc masz dwie możliwości:

1. Praca z istniejącym dokumencie szablonu

Tworzenie szablonu dokumentu (TemplatePath) do wykorzystania jako baza. W kodzie skopiuj go do ostatecznego miejsca docelowego (FinalPath) i dodaj tekst/cokolwiek do niego, stosując style. Nagłówek 1 będzie już w szablonie.

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. Tworzenie nowego dokumentu od podstaw

Jeśli to zrobisz, to nie mają wbudowanych stylów. Stwórz więc styl, nazwij go "Nagłówek 1" i zastosuj go do swojego akapitu.

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()); 

<sarkazm> See? OpenXML to bułka z masłem! </sarkazm > Przysięgam, moje oczy toczą się tak mocno, że dostaję ból głowy.

+1

Element StyleDefinitionPart powinien być StyleDefinitionsPart –

0

(Sry, mój angielski)

myślę nazwy styl zależy swój język, co używać słowa.

Nagłówek 1 w angielskim stylu id: "Nagłówek 1" w Hungarien: "Címsor 1" -> stlye id: "Cmsor1"

Widziałem, że plik docx xml stylu.

Jak Solove to:

  1. "sample.docx" zmień "sample.rar"
  2. Otwórz "sample.rar" z WinRAR.
  3. Otwórz folder "word".
  4. Otwórz plik "style.xml".
  5. Wyszukaj nazwę stylu lub właściwości, czego potrzebujesz.

Hierarchia stylów jest bardzo ważna!

To także działa dla mnie styl tabeli.