Open XML Format SDK i właściwości.

0

Witam !

W jaki sposób można bez nadmiaru pracy zastosować przypisać jakąś właściwość do obiektu wielokrotnie ?

Już tłumaczę :

mamy takie coś :

 
               StyleDefinitionsPart stylePart = mainPart.AddNewPart<StyleDefinitionsPart>();
                
              
                RunProperties rPr = new RunProperties();
                DocumentFormat.OpenXml.Wordprocessing.Color color = new             DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "000000" }; 
                RunFonts rFont = new RunFonts();
                rFont.Ascii = "Times New Roman"; 
                rPr.Append(color);
                rPr.Append(rFont);
                rPr.Append(new Bold()); 
                rPr.Append(new FontSize() { Val = "32" }); 

                Style style = new Style();
                style.StyleId = "MyHeading1"; 
                style.Append(new Name() { Val = "My Heading 1" }); 
                style.Append(new BasedOn() { Val = "Heading1" }); 
                style.Append(new NextParagraphStyle() { Val = "Normal" }); 
                style.Append(rPr);

                stylePart.Styles = new Styles();
                
                stylePart.Styles.Append(style);
                stylePart.Styles.Save(); 

                ParagraphProperties heading_pPr1 = new ParagraphProperties();
                heading_pPr1.ParagraphStyleId = new ParagraphStyleId() { Val = "MyHeading1" };

No i jeśli chcemy ten styl przypisać do dwóch paragrafów tak

paragraph1.Append(heading_pPr1);
paragraph2.Append(heading_pPr1);

 

Program wykrzacza się z takim czymś :

Cannot insert the OpenXmlElement "newChild" because it is part of a tree.

Rozumiem, ze nie można wstawić tego stylu bo już raz został wstawiony do drzewa, ale jak zastosować go do dwóch paragrafów ? Czy to znaczy ze do każdego paragrafu muszę tworzyć nowy obiekt stylu ? Tak samo dzieje się z właściwościami komórek w tabeli. W jaki sposób to ominąć ?

Znalazłem sposób ale moim zdaniem jest to karkołomne ponieważ wygląda to tak :

 paragraph2.Append(new ParagraphProperties() { ParagraphStyleId = new ParagraphStyleId() {Val="MyHeading1" } }); 

Co wy o tym sądzicie ?

0

Na SO radzą klonować, wygląda też ładniej: http://stackoverflow.com/questions/3304870/openxml-copy-openxmlelement-between-documents
W całej reszcie też podobnie rozwiązują ten błąd.

0

Dzięki. Właśnie czegoś takiego szukałem. Znacznie wyprostuje to mój spagheti code co się zrobił przez ciągłe używanie list inicjalizacyjnych ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1