![]() |
OLE Word auslesen
Hallo zusammen,
zum Thema OLE Automation mit Word gibt es ja viele hilfreiche Foreneinträge, zum Auslesen eines Word-Dokuments habe ich bis jetzt leider noch keine brauchbare Lösung gefunden. Ich möchte den Text gern Zeilenweise einlesen ähnlich wie readln bei Textdateien. Ich schreibe in ein Word-Dokument wie folgt:
Code:
Das funktioniert soweit ganz gut - nur wie bekomme ich den Text aus Word wieder zeilenweise heraus?
//Text aus Fehlerbeschreibung in Word-Dokument schreiben
for i := 0 to DBMemo_Mangel.Lines.Count -1 do begin //schreibt den Text aus Memo Zeilenweise in das Worddokument, chr(11) sorgt //dafür, dass durch Enter eingeleitete neue Zeilen auch im Word übernommen werden WordSelection.TypeText(DBMemo_Mangel.Lines[i]+chr(11)); end; Folgender Versuch führt dazu, dass der gesamte Text am Stück ausgelesen wird
Code:
Hat jemand eine Idee wie man den Text zeilenweise auslesen kann??
WordApp.Documents.Open(Komabe_file);
WordDoc := WordApp.ActiveDocument; showmessage(inttostr(WordDoc.Paragraphs.count)); //zeigt Anzahl Absätze - in diesem Fall 1 showmessage(worddoc.paragraphs.item(1).range.text); //zeigt den gesamten Text am Stück showmessage(WordDoc.range.text); //zeigt ebenfalls den gesamten Text am Stück Gruß Sidi61 |
AW: OLE Word auslesen
"Zeilenweise" geht nicht, da der Zeilenumbruch abhängig von Font und Papierformat vorgenommen wird.
Es sei denn, Du möchtest nach ManualLineBreak suchen (x0A wenn ich mich nicht irre). Dann könnte es reichen, den Text eines Paragraphs in eine Stringliste zu übertragen, und diese dann zeilenweise zu lesen. Gruß K-H |
AW: OLE Word auslesen
OK - habe ich mir fast gedacht :roll:
lese das ganze nun in ein unsichtbares Memo ein und bearbeite es dann von dort aus:
Code:
Was passiert eigentlich, wenn sich im Dokument zwischen dem Text noch eine Tabelle befindet :?:
WordApp.Documents.Open(Komabe_file);
WordDoc := WordApp.ActiveDocument; for I := 1 to WordDoc.Paragraphs.count do begin S := WordDoc.Paragraphs.item(i).range.text; if pos(chr(11),S) = 0 then Memo1.Lines.Add(S) else begin while pos(chr(11),S)>0 do begin Z := copy(S,1,pos(chr(11),S)-1); delete(S,1,pos(chr(11),S)); Memo1.Lines.Add(Z); end; end; end; Gruß Sidi61 |
AW: OLE Word auslesen
Wenn ich mich richtig erinnere sind Tabellen wie Bilder, Kopfzeilen etc. eigene Objekte.
Da müßte es auch die zugehörigen Positionswerte geben, damit Du die Tabellen in den Kontext bringen kannst. Warum nutzt Du ein "unsichtbares Memo"? Ein String oder eine Stringliste ist auf jeden Fall besser geeignet. Gruß K-H |
AW: OLE Word auslesen
Das Memo ist einfach langsamer und dient wohl als Bremse um Word nicht zu stessen :stupid:
|
AW: OLE Word auslesen
OK - Überzeugt, nehme jetzt eine Stringliste :)
Aber mal was anderes - wenn man ein Word Dokument editiert kann man mit der Eingabe von --- Enter eine Linie erzeugen. Dies gelingt mir mit WordSelection.TypeText('---'+^M) leider nicht. Gibt es eine Möglichkeit dies auch per OLE Fernsteuerung zu erreichen :?: Gruß Sidi61 |
AW: OLE Word auslesen
jetzt wird's komplizierter, da ich diese Kürzel nicht nutze. Eine gute Möglichkeit ist es den Makrorecorder anzuwerfen und dann mal zu schauen, was der mitschreibt.
Gruß K-H |
AW: OLE Word auslesen
habe ich gemacht, das dumme ist nur, solange der Makrorecorder läuft kann ich mit der Methode keine Linie erzeugen:(
Gruß Sidi61 |
AW: OLE Word auslesen
die drei(?)--- sind ja ein Kürzel für die Linie, dann versuch doch mal heraus zu bekommen wo die Übersetzung stattfindet.
Ich kann Dir im Augenblick leider nicht weiterhelfen, da ich das Word erst nächstes Jahr wieder zur Verfügung stehen habe. gruß K-H |
AW: OLE Word auslesen
hm - hast du eine Idee wie ich da am besten vorgehen kann bzw. in welcher Ecke ich da nachschauen muss?
Gruß Sidi61 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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