![]() |
Delphi-Version: 5
Problem mit Word OLE Automation
Hallo,
Delphi 2007. Habe ein Word 2000 Dokument mit 6 Textmarken. Diese möchte ich via Delphi befüllen. Im Beispiel unten ist document ein Variant auf das aktive/geöffnete Dokument
Delphi-Quellcode:
In anzahl steht korrekt 6 drinnen, d.h. die Anzahl laut Dokument stimmt. Wenn ich jetzt aber in der Schleife per k-Index auf ein Bookmark zugreife, dann klappt das für die ersten vier und beim 5. kracht es mit folgender Fehlermeldung.
...
anzahl := document.Bookmarks.Count; for k := 1 to anzahl do begin bookmarkName := document.Bookmarks.Item(k).Name; ... end; "Das angeforderte Element ist nicht in der Sammlung vorhanden." Laut Debugger sieht man auch, dass es scheint, wie wenn zwei Textmarken "übersprungen" werden. z.B. gibt es laut Sorting nach Namen im Word-Dokument folgende Textmarken: TM1 TM2 TM3 TM4 TM5 TM6 Wobei der k-index dann wie folgt zugreift: k = 1 => TM1 k = 2 => TM3 k = 3 => TM5 k = 4 => TM6 Bei k = 5 kracht es dann. Wie man sieht, wurden TM2 und TM4 ausgelassen. Sehr seltsam. Hat jemand eine Ahnung? Danke und lg, Thomas |
AW: Problem mit Word OLE Automation
Sind die Arrays hier 1-basiert?
Ich bin mir nicht ganz sicher, mglw. könnten die Bookmarks verschachtelt sein (oder überlappend). Hast Du die Anzeige der Bookmarks unter Optionen aktiviert? Kannst Du sie sehen und unterscheiden oder hälst Du Dich (optisch) an die Inhalte? Sind die Bookmarks "hand-made" oder generiert? Im ersten Fall kann bei der Benennung etwas schief gehen. Im Namen können dann "Sonderzeichen" wie z.B. Zeilenumbruch, Leerzeichen, .. Sein. Die einen Zugriff per Name ins leere Laufen lassen. Der Zugriff über Index müsste dann allerdings trotzdem funktionieren. Wo genau "knallt" es? In der Zeile Zitat:
Funktioniert es mit anderen Dokumenten? Das Ganze mit neu erstellten Textmarken prüfen. |
AW: Problem mit Word OLE Automation
Soweit ich weiß kann man auch über
Code:
zugreifen.
.bookmarks("TM1").
Gruß K-H Edith: ggf mit
Code:
vorher prüfen?
.Bokkmarks.Exists("TM1")
|
AW: Problem mit Word OLE Automation
Hi,
wir erfolgt das setzen des eigentlichen Textes? Kann sein, dass die 5 Textmarken so nah aufeinander sitzen, dass der eingefügte Text diese überschreibt (überschreiben anstelle einfügen)? ich setze den Text immer so:
Delphi-Quellcode:
und hatte damit eigentlich noch nie Probleme...
vWhat:=wdGoToBookmark;
vBookmark:='Name'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText('Max Mustermann'#13'Dorfstraße 100'); GRüße Nachtrag: Verändert sich denn document.Bookmarks.Count während des Schreibens? |
AW: Problem mit Word OLE Automation
Es knallt beim Zugriff über den Schleifenindex in der ersten Anweisung in der FOR-Schleife.
@Lemmy. Das war ein guter Tipp. Count wird je Schleifendurchlauf kleiner, d.h. vermutlich hat es etwas mit dem Setzen des Textes für die Textmarke zu tun. Z.B. wird die Textmarke durch das Setzen überschreiben/gelöscht. Das Setzen erfolgt durch:
Delphi-Quellcode:
document.Bookmarks.Item(bookmarkName).Range.Text := 'Text';
Zu allen anderen Fragen. Ja, Arrays/Listen beginnen hier mit 1. Ich habe es mit Dokumenten zu tun, wo ich die vorhandenen Textmarken als solches nicht kenne, d.h. muss mir erst den Namen der Textmarke über den Index in der Schleife ermittlen etc. Danke und lg, Thomas |
AW: Problem mit Word OLE Automation
Hallo,
Zitat:
ich habe kein MSWord zur Hand... aber schau doch mal ob Rage noch eine SelStart und Selcoun oder was ähnliches hat - das dürfte dann das Problem sein, dass dein gesetzter Text eine Schreibmarke überschreibt. Wenn Du mal nur einen Text der ersten Textmarke übergibst und das dann speicherst, dann dürfte die 2. TExtmarke fehlen. Grüße |
AW: Problem mit Word OLE Automation
Genau das sollte eigentlich nicht der Fall sein, da der Inhalt der Textmarke nur "zufällig" auch ausgegeben wird.
Ich würde vor dem Zugriff die vorhandenen Textmarken überprüfen (Count /Name) und hinterher wieder prüfen. Ich möchte wetten, daß dann noch alle bookmarks vorhanden sind. Gruß K-H |
AW: Problem mit Word OLE Automation
Wie schon angedeutet: Textmarken können sowohl überlappen als auch verschachtelt sein.
Bei Verschachtelung ist definitiv die innere futsch, wenn die äußere überschrieben wird. Erfahrungsgemäß gibt es individuelle Lernphasen, bis ein Neuling Word Textmarken zuverlässig in einem Dokument platziert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz