Registriert seit: 28. Dez 2009
Ort: 41844 Wegberg
1 Beiträge
|
Word-Automation im Hintergrund
28. Dez 2009, 12: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
|