AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Word OLE Automation

Ein Thema von tsteinmaurer · begonnen am 8. Apr 2011 · letzter Beitrag vom 8. Apr 2011
Antwort Antwort
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#1

Problem mit Word OLE Automation

  Alt 8. Apr 2011, 07:59
Delphi-Version: 5
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:
...
anzahl := document.Bookmarks.Count;
for k := 1 to anzahl do
begin
  bookmarkName := document.Bookmarks.Item(k).Name;
  ...
end;
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.

"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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 08:34
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:
bookmarkName := ..
?
Funktioniert es mit anderen Dokumenten?

Das Ganze mit neu erstellten Textmarken prüfen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 11:59
Soweit ich weiß kann man auch über
Code:
.bookmarks("TM1").
zugreifen.

Gruß
K-H

Edith:
ggf mit
Code:
.Bokkmarks.Exists("TM1")
vorher prüfen?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 8. Apr 2011 um 12:02 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 12:06
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:
vWhat:=wdGoToBookmark;
vBookmark:='Name';
WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark);
WordApplication1.Selection.TypeText('Max Mustermann'#13'Dorfstraße 100');
und hatte damit eigentlich noch nie Probleme...

GRüße


Nachtrag: Verändert sich denn document.Bookmarks.Count während des Schreibens?
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#5

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 12:29
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:

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
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 12:58
Hallo,


Das Setzen erfolgt durch:

document.Bookmarks.Item(bookmarkName).Range.Text := 'Text';


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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 14:42
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Problem mit Word OLE Automation

  Alt 8. Apr 2011, 16:33
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz