none
Word Text aus Textbox erfassen, wenn diese in gruppiert ist

    Frage

  • Hallo, ich habe ein esehr interesantes Thema, an dem ich schon zwei Tage dran hänge. Das Problem ist folgendes: Ich habe eine Automatisierung in C# erstellt, welche ein Word Dokument durchsucht, und sämtliche Einträge aus einer Datenbank mit der im Dokument abgleicht, wenn nötig den Ausdruck ersetzt. Nun ist es so, das ich im Dokument Zeichnungen habe. An diese Zeichnungen habe ich in Word Textboxen eingefügt, in denen ich Zahlenwerte reingeschrieben habe (Bezeichner). Damit mir nicht immer die ganze Formatierung flöten geht, habe ich diese Bilder und Textboxen jewils gruppiert. Mein Dokument hat nun so ca. 100 Seiten und auf jeder 2. Seite so eine Gruppierung. Nun habe ich das PRoblem, das beim automatisierten Suche und ersetzen die Textboxen in der Gruppierung nicht erfasst werden. Nach längerem nachforschen habe ich erkannt, dass man diese Objekte als "Shapes" ansprechen muss, und dann prüfen muss ob es eine Textbox ist und man kann dann den Text falls nötig austauschen. Wenn ich aber eine Gruppierung mit einem Bild und Textboxen habe, geht das nicht. Ich kann dann die Textbox nicht wie gewohnt ansprechen.

    Hier mal mein Hauptcode für die Bearbeitung:

              foreach (Shape shp in aDoc.Shapes)
                {
                    //// Bist du nicht gruppiert und eine Textbox, auswerten und wenn nötig ersetzen (funktioniert)
                    if (shp.Type == Microsoft.Office.Core.MsoShapeType.msoTextBox)
                    {
                        if(shp.TextFrame.TextRange.Text.Trim().Contains("01.02\r"))
                            shp.TextFrame.TextRange.Text.Replace("01.02", "01.02.00");
                    }
    
                    //// Bist du eine Gruppierung, dann die einzelnen Element aufbröseln
                    if(shp.Type == Microsoft.Office.Core.MsoShapeType.msoGroup)
                    {
                        //shp.Ungroup();
                        //shapeRange =shp.Ungroup();
                        
                        
    
                        //int m = shapeRange.Count;
    
                        for (int i = 1; i <= shp.GroupItems.Count; i++)
                        {
    
                            //string d = shapeRange[i].Range(i).TextFrame.TextRange.Text.Trim();
                            //string h = shapeRange[i].TextFrame.TextRange.Text;
                            //if (shp.GroupItems.Range(i).Type == Microsoft.Office.Core.MsoShapeType.msoTextBox))
    
                            //// Bist due eine Textbox, dann Werte Inhalt aus und ersetze wenn nötig
                            if (shp.GroupItems[i].Type == Microsoft.Office.Core.MsoShapeType.msoTextBox)
                            {
                                //// ==> Hier kracht es
                                //string g = shp.GroupItems.Range(shp.GroupItems[i]).TextFrame.TextRange.Text;
    
    
                                //// Fehlermeldung ==> "System.OutOfMemoryException" erscheint
                                if (shp.GroupItems.Range(i).TextFrame.TextRange.Text.Trim().Contains("01.02\r"))
                                    shp.GroupItems.Range(i).TextFrame.TextRange.Text.Replace("01.02", "01.02.00");
                                
                            }
                        }
    
                    }
                    //shapeRange.Regroup();
                }
    

    Kann mir irgend jemand einen Tipp geben? Diese Wordmodellierung finde ich sowieso erst mal rech kompliziert.

     

    Donnerstag, 5. Januar 2012 07:37

Alle Antworten

  • Hallo, hat niemand eine Idee?
    Sonntag, 8. Januar 2012 13:17
  • Hallo oema,

    tritt der Fehler an dieser Linie auf?

    shp.GroupItems.Range(i).TextFrame.TextRange.Text    

    Hast Du

    shp.GroupItems.Range(i).TextFrame2.TextRange.Text   

    versucht?

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 9. Januar 2012 16:34
    Moderator
  • Sorry, das geht leider auch nicht.  Sobald ich auf "shp.GroupItems.Range(i)" zugreife, kommt eine interne Fehlermeldung "Sytem.OutofMemoryException".

     

    Es muss doch irgend eine Möglichkeit geben? Setze ich falsch an? Oder geht es evtl. gar nicht?

    Dienstag, 10. Januar 2012 05:49
  • Hallo oema,

    Office Version? 2003 / 2007 / 2010

    Bei mir mit Office 2010 SP1 funktioniert es.

    VG/Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 10. Januar 2012 07:12
    Moderator
  • Ich nutze Office 2010. Sind bei dir Bilder und TextBoxen gruppiert?
    Dienstag, 10. Januar 2012 12:59
  • Ja. Installiere SP1 von Office 2010 und probiere noch mal.

    http://support.microsoft.com/kb/2460049

    VG/Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 10. Januar 2012 14:42
    Moderator
  • Hallo oema,

    hat es geklappt? Danke

    VG/Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Freitag, 13. Januar 2012 09:48
    Moderator
  • Hallo, ne hat nicht geklappt. Habe auf meinem FIrmen-PC versucht SP1 zu istallieren, hat aber Fehler gebracht. Muss den dass nicht auch mit Office 2007 oder 2003 gehen? ODer in XML verarbeiten? Ich bräiúchte das Ding dringend. Hast ne Idee?
    Freitag, 13. Januar 2012 18:00
  • Hallo oema,

    es war einen sehr aehnlichen Bug, der in der Version 14.0. 4211.0000 gefixt wurde. Deshalb hoffe ich, ist SP1 die Lösung dafür.

    Sonst würde ich auch mit einem nagelneuen Dokument probieren. Es koennte auch sein, dass das Dokument - womit Du testest - korrupt ist…

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 16. Januar 2012 09:59
    Moderator
  • Hi, nun hats erst mal geklappt das alle Textboxen durchwandert werden. Mit Office 2007 zuhause. Allerdings frage ich da "Textframe" ab. Werde das Programm mal vervollständigen und mich dann nochmal melden.
    Montag, 16. Januar 2012 22:33
  • Hallo, das hat bei Office 2010 (Word)  genau so funktioniert.
    Dienstag, 13. März 2012 20:34