AGB  ·  Datenschutz  ·  Impressum  







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

OLE-Steuerung von Word: DoEvents

Ein Thema von ts-d · begonnen am 17. Dez 2020 · letzter Beitrag vom 17. Dez 2020
Antwort Antwort
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#1

OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 11:43
Hallo,

ich muss Word steuern und im Zeit geben, seine Befehle abzuarbeiten, bevor es den nächsten Befehl bekommt.
Darum wollte ich DoEvents aus Delphi2010 zwischendurch aufrufen.

var
WordObj: variant;

...

WordObj := UnAssigned;

try
WordObj := GetActiveOLEObject('Word.Application');
except
WordObj := CreateOleObject('Word.Application');
end;
WordObj.Visible := False;
WordObj.Documents.Add;

...

WordObj.DoEvents;


Delphi meldet dann: "Im Projekt ... ist eine Exception der Klasse EOleError mit der Meldung 'Die Methode 'DoEvents' wird vom Automatisierungsobjekt nicht unterstützt' aufgetreten."



Delphi meldet jedeoch

Geändert von ts-d (17. Dez 2020 um 12:00 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#2

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 12:12
DoEvents ist eine VBA-Funktion und keine Funktion des OLE-Objektes von Word.
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#3

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 12:14
vielen Dank - gibt's denn irgendwo eine Übersicht, was nur VBA ist und was OLE-Befehle sind (so eine Art Liste mit genauer Syntax, da die ja oft anders ist als in VBA)?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#4

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 12:18
Wenn ich wissen will, was Word kann, schau ich in die Pas-Datei zur importierten Typelib.

Ansonsten frag' ich, wie gerade bei DoEvents, einfach die Suchmaschine meiner Wahl.

Bei Google suchenword ole doevents erstes Ergebnis
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#5

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 12:30
na ja, was meinst Du, wie ich auf dieses Forum gekommen bin?
Das mit der PAS-Datei ist gut. Wo finde ich die?

Oder kennst Du eventl. eine andere Möglichkeit, Word für die Abarbeitung der OLE-Befehle Zeit einzuräumen.

Bei mir passiert Folgendes: Auf einem Rechner funktioniert das Einfügen von Daten in eine Word-Tabelle. Auf dem anderen Rechner verschluckt Word einen Befehl und fügt die Daten ab einer bestimmten Tabellenzelle versetzt ein.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#6

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 13:36
Bei meinem ollen Delphi 7 steht sie in InstallationsverzeichnisVonDelphi\OCX\Servers\Word<wordversion>.pas Ansonsten: In Delphi Typbibliothek von Word importieren, sollte im Installationsverzeichnis von Word sowas in der Art wie "MSWORD.OLB" sein.

Wenn Du Word fernsteuerst, solltest Du folgendes beachten:
Word darf nicht vom Anwender geöffnet sein.

Word sollte unsichtbar arbeiten. Die meiste Zeit geht bei der Darstellung des von Word ausgeführten auf dem Bildschirm drauf. Und das bringt (nach meiner Erfahrung) Word (und auch den Rest aus dem Officepaket) zuweilen arg ins Straucheln. (Ausgehend von Deinem Codeschnipsel scheint Word jedoch schon unsichtbar zu sein.)

Keinesfalls während der Fernsteuerung von Word nach Word wechseln, um zu sehen, ob es arbeitet. Das ging bei meinen Versuchen bisher immer schief.

Eine Möglichkeit, um eine Warteschleife ala while Word.IsBusy do Sleep(1000); zu realisieren, ist mir leider nicht bekannt.

Bei welchen Aufgaben der Wordfernsteuerung treten denn bei Dir konkret Probleme auf? Zeig' uns doch bitte mal entsprechende Codefragmente. Eventuell weiß ja jemand, wie man mit 'nem konkreten Problem umgehen kann.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 13:43
Was für Befehle sendest du denn? OLE ist doch nicht fire and forget sondern erst wenn der erste Befehl abgearbeitet ist kann man den nächsten senden, oder hab ich das falsch im Kopf?
Ralph
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#8

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 13:51
vielen Dank

Ich denke, die Sache ist gelöst - muß es aber noch testen.

Es werden mehrer Word-Tabellen aus einer Paradox-Tabelle befüllt, quasi so eine Art Word-Formulargenerator. Und an einer Stelle happert's - da springt Word nicht in die nächste Zelle, sondern bleibt sitzen und fügt praktisch den nächsten Wert in die Zelle mit ein.

Ich habe jetzt folgendes an den kritischen Stellen eingefügt:

Delay(1);

und die Funktion:

procedure TMainForm.Delay(const Milliseconds: DWord);
var
FirstTickCount: DWord;
begin
FirstTickCount := GetTickCount;
while ((GetTickCount - FirstTickCount) < Milliseconds) do
begin
Application.ProcessMessages;
Sleep(0);
end;
end;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#9

AW: OLE-Steuerung von Word: DoEvents

  Alt 17. Dez 2020, 14:12
Das ist jetzt ein Workaround, der vielleicht klappt, vielleicht dauerhaft, vielleicht auch nicht.

Interessant wäre es zu wissen, wie Du die Tabelle befüllst.

Ist sie im Worddokument schon vorhanden (z. B. aus 'ner Dokumentenvorlage)?
Wird sie manuell erstellt?
Werden die einzelnen Wert z. B. durch 'nen Tab getrennt, um so jeweils in die nächste Zelle bzw. am Zeilenende in die erste Spalte der nächsten Zeile zu gelangen.
Oder wird zuerst mit Word eine fertige Tabelle (in Bezug auf Zeilen und Spalten) erstellt und dann die Werte der einzelnen Zellen eingefügt?
Oder wird zuerst eine einzeilige Tabelle erstellt mit einer Spalte und einer Zeile und dann werden jeweils die Werte einer Zeile mit WordTabelle.Rows.Add bzw. WordTabelle.Cell(Zeile, Spalte).Range.Text := 'Text' hinzugefügt?

...

Da gibt es vermutlich viele Wege, die mal mehr, mal weniger gut funktionieren.
  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 04:43 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