2012-08-30 17 views
7

Przyznaję, jestem bardzo nowy w korzystaniu z bibliotek Interop, ale porady, które ludzie wydają się zawsze wydawać, to nagrywanie makr i sprawdzanie kodu vba. Problem polega na tym, że makro nie zapisuje dokładnie tego, co robię: Kliknięcie Szybkiego stylu, aby zastosować go do bieżącego wyboru.Jak zastosować Word Quick Style w języku C# - nie tylko proste formatowanie, ale cały styl?

Moim zadaniem jest całkiem prosta: muszę zastosować do szybkiego stylu akapitu (Microsoft.Office.Interop.Word.Paragraph). Jednak komenda set_styletylko stosuje podstawowe formatowanie, a akapit zachowuje oryginalny wybór szybkiego stylu (Normal).

Używając podejścia Remou, zadziałało to dla mnie, ale wydaje się bardzo podobne do mojego własnego kodu, i nie mogę sprawić, żeby to działało, i myślę, że może to być moje zrozumienie tego, że obiekt obiektowy jest nieco nietypowy.

public void AddParagraph(string text, string styleName = null) 
{ 
    Paragraph paragraph = _document.Content.Paragraphs.Add(); 
    if (styleName != null) 
    { 
    paragraph.Range.set_Style(_document.Styles[styleName]); 
    } 

    paragraph.Range.Text = text; 
    paragraph.Range.InsertParagraphAfter(); 
} 

Następnie wywołujemy to za pomocą np. AddParagraph("A title", "Heading 1");, ale wynikiem użycia powyższego opakowania do zbudowania mojego dokumentu jest to, że nie są stosowane żadne pełne style, tylko czcionka, kolor, rozmiar i pogrubienie/kursywa.

Używam własnego pliku .dotx z moimi własnymi, zdefiniowanymi i nazwanymi stylami, ale po prostu skopiowanie kodu z Remou działa z moim własnym szablonem, więc nie sądzę, że to jest problem, a używanie tego kodu nie jest możliwe dowiedzieć się, jak dołączyć wiele akapitów z każdą własną stylizacją.

Czy ktoś może wskazać, co jest nie tak z moim podejściem, a przynajmniej jak mogę dać odpowiedź dostarczoną przez Remou na moje potrzeby? :)

Odpowiedz

7

To działa dla mnie.

Word.Application _wordApp = new Word.Application(); 
Word.Document oDoc = _wordApp.Documents.Add(); 
_wordApp.Visible = true; 
_wordApp.Selection.TypeText("Heading"); 
oDoc.Paragraphs[1].set_Style(Word.WdBuiltinStyle.wdStyleHeading2); 

Kiedy mówisz

paragraph.Range.Text = text + paragraph.Range.Text; 

otrzymujesz kolejne akapity, niż wyobrażał. I liczyć się trzeba:

paragraph.Range.Text = text; 

Spróbuj:

Paragraph paragraph = _document.Content.Paragraphs.Add(); 
paragraph.Range.Text = text; 

if (styleName != null) 
{ 
    paragraph.set_Style(_document.Styles[styleName]); 
} 

paragraph.Range.InsertParagraphAfter(); 
+0

Dzięki Remou, mam zaktualizowane moje pytanie, jak masz mnie nieco bliżej, ale nie do końca. Prawdopodobnie podchodzę do tego w niewłaściwy sposób. –

+0

... Jestem zdumiony. Zmieniła się kolejność stosowania stylu i tekstu, część '+ paragraph.Range.Text;' była starą próbą i skopiowaniem przez pomyłkę. Dziękuję za pomoc! :) –

Powiązane problemy