Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   OLE Word auslesen (https://www.delphipraxis.net/183221-ole-word-auslesen.html)

Sidi61 20. Dez 2014 22:07

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:
    //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;
Das funktioniert soweit ganz gut - nur wie bekomme ich den Text aus Word wieder zeilenweise heraus?

Folgender Versuch führt dazu, dass der gesamte Text am Stück ausgelesen wird
Code:
    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
Hat jemand eine Idee wie man den Text zeilenweise auslesen kann??

Gruß Sidi61

p80286 20. Dez 2014 22:17

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

Sidi61 20. Dez 2014 22:41

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:
 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;
Was passiert eigentlich, wenn sich im Dokument zwischen dem Text noch eine Tabelle befindet :?:

Gruß Sidi61

p80286 21. Dez 2014 06:53

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

Sir Rufo 21. Dez 2014 08:33

AW: OLE Word auslesen
 
Das Memo ist einfach langsamer und dient wohl als Bremse um Word nicht zu stessen :stupid:

Sidi61 21. Dez 2014 22:39

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

p80286 22. Dez 2014 18:48

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

Sidi61 22. Dez 2014 18:58

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

p80286 23. Dez 2014 17:07

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

Sidi61 23. Dez 2014 18:28

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 13:59 Uhr.
Seite 1 von 2  1 2      

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