Советы по Delphi

         

Wordbasic с параметрами из Delphi


Привожу некоторый Delphi код для работы с Word 95. Я протестировал его под Word 97 и, как оказалось, потребовалось внести некоторые исправления - он не захотел работать под ним, но что самое неприятное - после исправлений ошибок выяснилось, что Word 97 работает значительно медленнее, чем Word 95. SendKeys был применен от отчаяния.

    Function TAutoMerge.ProcessMerge(FSource, FData, FOutput : string) :
boolean;
var
MSWord  : Variant; i, NumDocs : integer; Found : boolean; s, LastOLECommand : string; begin
ProcessMerge := False; try

LastOLECommand := 'Creating OLE Object.'; MSWord := CreateOLEObject('Word.Basic'); LastOLECommand := 'Show MS Word.'; MSWord.AppShow; Application.ProcessMessages;
LastOLECommand := 'Open document file >' + FSource + '<.'; MSWord.FileOpen(Name := FSource, ConfirmConversions := 0, ReadOnly := 1, AddToMru := 0, PasswordDoc := '', PasswordDot := '', Revert := 0, WritePasswordDoc := '', WritePasswordDot := ''); LastOLECommand := 'Screen updating = false.'; MSWord.ToolsOptionsSpelling(AutomaticSpellChecking := 0); LastOLECommand := 'Set background printing to off.'; MSWord.ToolsOptionsPrint(Background := 0);
Application.ProcessMessages; LastOLECommand := 'Open Data file >' + FData + '<.'; MSWord.MailMergeOpenDataSource(Name := FData, ConfirmConversions := 0, ReadOnly := 1, LinkToSource := 1, AddToMru := 0, PasswordDoc := '', PasswordDot := '', WritePasswordDoc := '', WritePasswordDot := '', Connection := '', SQLStatement := '', SQLStatement1 := '', Revert := 1);
LastOLECommand := 'Start the Mail Merge.'; MSWord.MailMerge(CheckErrors := 2, Destination := 1, MergeRecords:= 0, From := '', To := '', Suppression := 0, MailSubject := '', MailAsAttachment := 0, MailAddress := '');
LastOLECommand := 'Set up for SendKeys to select printer.'; Application.ProcessMessages; MSWord.AppShow; s := '{home}%l{enter}{home}%n' + FOutput + '{tab}{enter}{home}{enter}'; // sdd 1.1 MSWord.SendKeys(s, -1); MSWord.MailMergeToPrinter; Application.ProcessMessages;
ProcessMerge := True; LastOLECommand := 'All done with merge.'; except on EOleException do begin inc(TotalOLEErrors); lblStatus.caption := LastOLECommand; if (TotalOLEErrors >= TOTALOLEERRORS_MAX) then begin s := 'Имеется по крайней мере одна ошибка OLE (' + IntToStr(TotalOLEErrors) +
'), последней ошибкой было >' + LastOLECommand + '<.'; ShowMessage(s); end; end end; end;

[000194]



Содержание раздела