程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi + Word = 數據庫 + 公文處理

Delphi + Word = 數據庫 + 公文處理

編輯:Delphi

 

孫立

Delphi擅長做數據庫類的MIS開發,但對於OA就有點力不從心了。不過隨著Microsoft的COM技術逐漸成熟,現在普通Windows應用已經可以和Office 97無縫結合了,尤其是在Delphi 5中提供了一組Servers組件,更是簡化了程序開發。

最近接觸了一個用戶的案例,用Delphi控制Word做一個合同管理程序。辦公人員先根據業務需要,寫好合同的文字,但在用戶名稱、產品名稱等變化的位置填寫指定的標記字符串,然後通過Delphi把數據庫中的實際數據替換掉Word中的文字,最後讓Word打印出合同。

Delphi自帶了一個簡單的Word例題,但功能太簡單。通過查找VBA的說明,再對照Delphi的VCL,編寫了如下代碼,實現了基本的公文管理功能。

啟動Word時用如下代碼:
begin
try
Wordapplication.Connect;
except
MessageDlg(Word may not be installed, mtError, [mbOk], 0);
Abort;
end;
Wordapplication.Visible := True;
WordApplication.Caption := Delphi automation;
end;

關閉Word用如下代碼。如果想保存Doc文件,請修改SaveChanges變量的內容:
var
SaveChanges, OriginalFormat, RouteDocument: OleVariant;
begin
SaveChanges := WdDoNotSaveChanges;
OriginalFormat := UnAssigned;
RouteDocument := UnAssigned;
try
WordApplication.Quit(SaveChanges, OriginalFormat, RouteDocument);
WordApplication.Disconnect;
except
on E: Exception do
begin
Showmessage(E.Message);
WordApplication.Disconnect;
end;
end;
end;

讓Word打開一個指定的文件,需要先放置OpenDialog,然後調用WordApplication.Documents.Open:
var
ItemIndex :OleVariant;
FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
PasswordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format: OleVariant;
begin
if not dlgOpen.Execute then
Exit;

{Open document}
FileName := dlgOpen.FileName;
ConfirmConversions := False;
ReadOnly := False;
AddToRecentFiles := False;
PasswordDocument := ;
PasswordTemplate := ;
Revert := True;
WritePasswordDocument := ;
WritePasswordTemplate := ;
Format := wdOpenFormatDocument;

WordApplication.Documents.Open( FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format );

{Assign WordDocument component}
ItemIndex := 1;
WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));

{Turn Spell checking of because it takes a long time if enabled and slows down Winword}
WordApplication.Options.CheckSpellingAsYouType := False;
WordApplication.Options.CheckGrammarAsYouType := False;
end;

讓Word替換標記字符串要使用WordDocument.Range.Find.Execute,這裡用Delphi替換了<#Name>:
var
FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike,
MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace: OleVariant;
begin
FindText := <#Name>;
MatchCase := False;
MatchWholeWord := True;
MatchWildcards := False;
MatchSoundsLike := False;
MatchAllWordForms := False;
Forward := True;
Wrap := wdFindContinue;
Format := False;
ReplaceWith := Delphi;
Replace := True;

WordDocument.Range.Find.Execute( FindText, MatchCase, MatchWholeWord,
MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward,
Wrap, Format, ReplaceWith, Replace );

end;

上面這4段代碼完成了公文管理的基本功能,再把它和數據庫結合起來,就可以開發一個與Lotus Notes類似的產品了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved