Interop Word und Tabellen

  • C#

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    Interop Word und Tabellen

    Hallole,

    ich möchte per Automation von C# aus ein Word-Dokument erstellen. Darin muss eine Tabelle angelegt werden, die in einer Zelle einen zweiteiligen Text unterschiedlicher Formatierung enthält.

    Soweit funzt alles, ich hänge nur an dem Versuch, zwei Zeilen (Paragraphen) in eine Zelle einzufügen. Meinen letzten Versuch seht ihr unten.


    C#-Quellcode

    1. private Word.Table Tabelle(int numRows, int numColumns)
    2. {
    3. Word.Range range = Document.Paragraphs.Add().Range;
    4. Word.Table ret = Document.Tables.Add(range, numRows, numColumns);
    5. //range.InsertParagraphAfter();
    6. return ret;
    7. }
    8. public void TabelleOberflächen()
    9. {
    10. Word.Table tab = Tabelle(4, 4);
    11. Word.Range rangeDE;
    12. Word.Range rangeEN;
    13. object styleDE = "Text DE";
    14. object styleEN = "Text EN";
    15. //rangeDE = tab.Cell(1, 1).Range.Paragraphs[0].Range;
    16. //rangeEN = tab.Cell(1, 1).Range.Paragraphs.Add().Range;
    17. tab.Cell(1, 1).Range.Paragraphs.Add();
    18. rangeDE = tab.Cell(1, 1).Range.Paragraphs[1].Range;
    19. rangeEN = tab.Cell(1, 1).Range.Paragraphs[2].Range;
    20. tab.Cell(1, 1).Shading.BackgroundPatternColor = WdColor.wdColorGray40;
    21. rangeDE.set_Style(ref styleDE);
    22. rangeDE.Text = "Aufmaß";
    23. rangeDE.InsertParagraphAfter();
    24. //tab.Cell(1, 1).Range.InsertParagraphAfter();
    25. rangeEN.set_Style(ref styleEN);
    26. rangeEN.Text = "Measure";
    27. rangeEN.InsertParagraphAfter();
    28. }


    Das Problem ist, dass ich zwei (leere )Paragraphen/Ranges in eine Zelle zwar einfügen kann, sobald ich dem ersten Range allerdings den Text zuweise verschwindet der zweite wieder. Es ist also so, als wenn ich mit der Maus alle Paragraphen in der Zelle auswähle und dann den Text eingebe, dann verschwindet alles und wird durch die Eingabe ersetzt.

    Was mache ich denn da falsch?

    Gruß

    MQ
    Ich habe das Ganze dann in VBA direkt in Word probiert und da geht's. In C# geht's nicht.

    Das Problem ergibt sich aus zwei Sachen in der Zuweisung rangeDE.Text = "Aufmaß" in C#.

    1. rangeDE muss durch den kompletten Verweis tab.Cell(1, 1).Range.Paragraphs[1].Range ersetzt werden. Gleiches gilt für rangeEN
    2. Der String muss mit "\xd\7" erweitert werden.

    Somit klappt es mit

    C#-Quellcode

    1. tab.Cell(1, 1).Range.Paragraphs[1].Range.set_Style(ref styleDE);
    2. tab.Cell(1, 1).Range.Paragraphs[1].Range.Text = "Aufmaß\xd\x7" ;
    3. tab.Cell(1, 1).Range.Paragraphs[2].Range.set_Style(ref styleEN);
    4. tab.Cell(1, 1).Range.Paragraphs[2].Range.Text = "Measure";


    Nur so ist es mir gelungen, in eine einzige Tabellenzelle zwei Zeilen Text in unterschiedlicher Formatierung zu füllen.

    Warum die Zuweisung zu rangeDE etc. nicht geht, verstehe ich nachwievor nicht. Das Anhängsel am Text ergibt sich aus dem Auslesen leerer Zellen bzw. mit Hand gefüllter Zellen. Die Texte sind alle so abgeschlossen. Warum der zweite Text ohne den Abschluss auskommt, entzieht sich ebenfalls meinem Verständnis.

    Da muss man erst mal draufkommen!

    nochmal komplett:

    C#-Quellcode

    1. private Word.Table Tabelle(int numRows, int numColumns)
    2. {
    3. Word.Range range = Document.Paragraphs.Add().Range;
    4. Word.Table ret = Document.Tables.Add(range, numRows, numColumns);
    5. //range.InsertParagraphAfter();
    6. return ret;
    7. }
    8. public void TabelleOberflächen()
    9. {
    10. Word.Table tab = Tabelle(4, 4);
    11. Word.Range rangeDE;
    12. Word.Range rangeEN;
    13. object styleDE = "Text DE";
    14. object styleEN = "Text EN";
    15. tab.Cell(1, 1).Range.InsertParagraphAfter();
    16. tab.Cell(2, 1).Range.InsertParagraphAfter();
    17. rangeDE = tab.Cell(2, 1).Range.Paragraphs[1].Range;
    18. rangeEN = tab.Cell(2, 1).Range.Paragraphs[2].Range;
    19. tab.Cell(1, 1).Shading.BackgroundPatternColor = WdColor.wdColorGray40;
    20. tab.Cell(1, 1).Range.Paragraphs[1].Range.set_Style(ref styleDE);
    21. tab.Cell(1, 1).Range.Paragraphs[1].Range.Text = "Aufmaß\xd\x7" ;
    22. tab.Cell(1, 1).Range.Paragraphs[2].Range.set_Style(ref styleEN);
    23. tab.Cell(1, 1).Range.Paragraphs[2].Range.Text = "Measure";
    24. rangeDE.set_Style(ref styleDE);
    25. rangeDE.Text = "Aufmaß\xd\x7";
    26. rangeEN.set_Style(ref styleEN);
    27. rangeEN.Text = "Measure";
    28. }


    Die letzten beiden Codeblöcke sollten das gleiche Verhalten zeigen, tun sie aber nicht.

    Gruß

    MQ

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MasterQ“ ()