Delphi + Word = 資料庫 + 公文處理

來源:互聯網
上載者:User

Delphi擅長做資料庫類的MIS開發,但對於OA就有點力不從心了。不過隨著Microsoft的COM技術逐漸成熟,現在普通Windows應用已經可以和Office97無縫結合了,尤其是在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 slowsdown WinWord} 
WordApplication.Options.CheckSpellingAsYouType := False; 
WordApplication.Options.CheckGrammarAsYouType := False; 
end; 

當我們安裝delphi時選擇的是xp樣式的即使用WordXP時,這裡的代碼需要更改為這樣

var ItemIndex :OleVariant; 
 FileName, ConfirmConversions,ReadOnly,AddToRecentFiles,PasswordDocument, PasswordTemplate,Revert: OleVariant;
 WritePasswordDocument,WritePasswordTemplate,Format: OleVariant;
 Encoding,Visible,OpenAndRepair,DocumentDirection,NoEncodingDialog: 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:=wdFormatDocument;
   //Encoding 
   Visible:=true;
   WordApplication1.Disconnect;
   WordApplication1.documents.Open(FileName,ConfirmConversions,
                 ReadOnly,AddToRecentFiles, 
                 PasswordDocument,PasswordTemplate, 
                 Revert,WritePasswordDocument,WritePasswordTemplate,Format,
                 Encoding,Visible,OpenAndRepair,DocumentDirection,NoEncodingDialog);
  WordApplication1.Visible:=true;
...{Assign WordDocument component}
ItemIndex := 1;
WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));

...{Turn Spell checking of because it takes a long time if enabled and slows down Winword}
WordApplication1.Options.CheckSpellingAsYouType := False;
WordApplication1.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類似的產品了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.