AGB  ·  Datenschutz  ·  Impressum  







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

Word-Automation im Hintergrund

Ein Thema von bpel · begonnen am 28. Dez 2009 · letzter Beitrag vom 28. Dez 2009
Antwort Antwort
bpel

Registriert seit: 28. Dez 2009
Ort: 41844 Wegberg
1 Beiträge
 
#1

Word-Automation im Hintergrund

  Alt 28. Dez 2009, 11:20
Hallo,
in verschiedenen Eigenentwicklungen in unserem Hause wurde für die Textverarbeitung Corel-WordPerfect erfolgreich eingesetzt. Nach einer Lizenzänderung wird nun in unserem Hause nur noch MS-Word verwendet und alle Verfahren müssen nun auf MS-Word umgestellt werden. Dabei bin ich auf ein Phänomen gestoßen, welches ich z.Z. nicht erklären kann und bitte nun um fachmännischen Rat:

Ich verwende die Komponente TWordApplication aus dem dclofficexp70-package und habe WordApplication.Visible := false gesetzt.
Bei der Programmschleifen-Wiederholungen stellt sich Word aus unerklärlichen Gründen auf sichtbar um und in den Vordergrund - dies geschied nach bzw. in der close-Anweisung des gedruckten Dokuments. Word soll aber ganz unsichtbar bleiben. Ich habe hin und her probiert und am Ende versucht mit absichtlichem Zurücksetzen des visible auf false eine verwendbare Version zu erhalten. Trotzdem flackert Word kurz auf, was mir nicht gefällt.
Im folgenden Code arbeite ich mit einem flag, da es Anwender gibt, die Word manchmal separat schon geöffnet hatten, dann soll Word sichtbar beiben....

Delphi-Quellcode:
  procedure TFormPruefZeit.tvAufruf (docName : String);//neuer tvAufruf mit Word und Vorlage
var tmpDot : OleVariant;
    tRange : Range;
    tName : OleVariant;
    tWhat : OleVariant;
    myDoc :_Document;
    OleStrFileName: OleVariant;
    OleTrue : OleVariant;
    flagWordSchonDa:boolean;//231209BP
begin
screen.Cursor:=crHourGlass;
if FormHaupt.Word.Visible = true then //231209BP
    flagWordSchonDa:=true
else
    flagWordSchonDa:=false;

tmpDot:= ExtractFilePath (Application.ExeName)+ docName; //080409BP ExtractFilePath...
myDoc:=FormHaupt.Word.Documents.Add(tmpDot, emptyParam, emptyParam, emptyParam);
myDoc.Activate;
FormHaupt.Word.ScreenUpdating:=false;

//Daten in Textmarken übertragen
  tWhat:= wdGoToBookmark;
   tName:= 'TMAdresse1';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= FormHaupt.CoBoAnrede.Text;
   tName:= 'TMAdresse2';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= FormHaupt.EdVorname.Text + ' ' + FormHaupt.EdName.Text;
   tName:= 'TMAdresse3';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= FormHaupt.CoBoStrasse.Text + ' ' + FormHaupt.EdHNr.Text;
   tName:= 'TMAdresse4';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:=FormHaupt.EdPlz.Text + ' ' + FormHaupt.EdOrt.Text;
   tName:= 'TMAdresse5';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:='';
   tName:= 'TMAdresse6';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= '';
   tName:= 'TMAnrede';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:=FormelleAnrede;
   tName:= 'TMZeit';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= Prueftag + ', dem '
                          + FormHaupt.MEdPruefDat.Text
                          + ' um ' + PruefZeit + ' Uhr';
   tName:= 'TMOrt';
   tRange:=FormHaupt.Word.ActiveDocument.GoTo_(tWhat, emptyParam, emptyParam, tName);
   tRange.Text:= Treffpunkt;

   FormHaupt.Word.ScreenUpdating:=true;

   tmpdot:='C:\Temp\zulass.doc';
   MyDoc.SaveAs(tmpDot, emptyParam, EmptyParam, EmptyParam, //231209BP
                                    EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                    EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                    EmptyParam, EmptyParam, EmptyParam, EmptyParam);

   MyDoc.PrintOut(EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

 
   MyDoc.Close(EmptyParam,EmptyParam,EmptyParam); //231209BP
   if Not flagWordSchonDa then //231209BP - aus irgend
   FormHaupt.Word.Visible:=false;
   screen.Cursor:=crDefault;
end;
Beim ersten Aufruf läuft alles, wie erwartet durch. Erst bei einem erneuten Aufruf der Druckroutine beginnt das Maleur.
Was kann ich tun?

Gruß bpel
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Word-Automation im Hintergrund

  Alt 28. Dez 2009, 11:27
Probier mal jedesmal einen neue Instanze der Wrapper-Komponente zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 23:12 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