Laden...

TextBoxeinträge in Gruppierungen erfassen und Inhalt ändern

Erstellt von oehrle vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.358 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 12 Jahren
TextBoxeinträge in Gruppierungen erfassen und Inhalt ändern

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.

Mein Bespiel:

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

Hat jemand einen Tipp?

Gelöschter Account
vor 12 Jahren

Wäre es nicht besser shp.GroupItems_ in eine TextBox zu konvertieren und den obigen Code laufen zu lassen?

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 12 Jahren
GroupItem in msoTextbox casten ?

Hallo, ich habe noch nichts genaues gefunden, wie ich das machen kann. Kannst mir mal ien Tipp dazu geben? Vielleicht muss ich auch anders ansetzen, und nicht mit den Shapes arbeiten? IRgend jemand hat doch dieses Problem bestimmt auch schon gehabt?