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?
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?