1.引言
在利用Delphi開發應用程序的時候,通常我們要設計出很多各種格式的文檔、報表,經常要進行文件的創建、編輯及修改,雖然Delphi本身提供了很多設計報表的控件或方法,但是存在明顯的不足,比如中文輸入,數據格式的控制等操作起來比較麻煩。利用大家都很熟悉的Office工具結合開發,能夠很好的解決這方面的問題。以下就以Delphi為例詳細介紹怎麼利用Office完成各種文檔、報表的制作。
2.實現方法
利用Delphi和Office結合開發主要有以下三種方法:
(1) 通過Delphi的控件TOleContainer 將Office嵌入,這是最簡單的Ole嵌入,能夠直接將Office文檔調用,只需要使用ToleContainer.Run就可以將Office文檔直接啟動。且這樣啟動的Office文檔與Delphi程序是一個整體(從界面上看),但是它存在不可克服的缺點,即不能通過Delphi控制Office文檔,也就不能實現將靈活操縱Office的目的。
(2) 使用Delphi提供的Servers控件調用Office,使用Office的屬性,使用Delphi的Servers控件來操縱Office,在編程時Delphi能夠實現代碼提示,總體上看能夠較好的實現Delphi對Office的控制,但是還有一些Office的功能不能在Delphi中調用(比如自己編寫的VBA宏代碼)。且實現功能時本來在VBA代碼中可選擇參數在Delphi調用的時候必須添加,否則,連編譯都不能通過。這種方式啟動的Office與Delphi程序分屬兩個窗體。
(3) 使用CreateOleObject將啟動Office,然後以Ole方式對Office進行控制。這種辦法是使用以CreateOleObjects方式調用Office,實際上還是Ole,但是這種方式能夠真正做到完全控制Office文件,能夠使用Office的所有屬性,包括自己編寫的VBA宏代碼。與Servers控件和Com技術相比,本方法能夠真正地使用Office的各種屬性,和在VBA中編寫自己的代碼基本一樣,可以缺省的代碼也不需要使用。
3.軟件實現
3.1第一種方法:通過Delphi的控件TOleContainer 將Office嵌入,操作方法如下:
(1) 調用Delphi中System頁控件ToleContainer實現;
(2) 雙擊OleContainer,出現如下界面:
(3)這時你可以進行選擇了,選擇“由文件創建”,選擇相應的文檔,及就簡單的實現了將Office文檔調入的功能;如下圖:
3.2第二種方法:使用Delphi提供的Servers控件調用Office;它使得我們很容易地把Office中的應用程序(Word, Excel, PowerPoint, Outlook and Access等)當作一個com應用服務器進行控制,以Word為例,介紹其實現方法:
(1) 調用TwordDocument(建立Word文件對象)、TwordApplication(啟動Word並建立同Word的連接) 、TwordFont(設置Word文件的字體)、TwordParagraphFormat(設置Word文件中的段落格式)控件;
(2) 啟動Word,通過TWordApplication實現;
Try
Wordapplication.Connect;
Except
MessageDlg('Word may not be installed', mtError, [mbOk], 0);
Abort;
End;
(3)創建一個新的文件,通過TWordApplication實現;
Template := EmptyParam; //表示不使用模板
NewTemplate := False; //表示新建新建文檔的類型為文檔,
//添加新文檔
WordApplication.Documents.Add(Template, NewTemplate); WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
//關閉拼音查找和語法查找,以便提高程序運行的效率
WordApplication.Options.CheckSpellingAsYouType := False;
WordApplication.Options.CheckGrammarAsYouType := False;
(3) 插入數據,通過TWordDocument實現;
//文本
WordDocument.Range.InsertAfter('Oracle數據庫'+ chr(#13));
//表格
WordDocument1.Tables.Add(WordDocument1.Range,rownum,colnum,template,newtemplate); //其中rownum是表格行數,colnum 是表格列數
//向表格中插入數據
WordDocument1.Tables.Item(1).Cell(1,1).Range.Text:='證書編號';
WordDocument1.Tables.Item(1).Cell(1,2).Range.Text:='身份證號碼'
(4) 格式的設置
WordFont.ConnectTo(WordDocument.Sentences.GetLast.Font);//設置某些文字
WordFont.ConnectTo(WordDocument.Paragraphs.GetLast.Font);//設置某段文字
WordFont.Bold:=1;
WordFont.Italic:=1;……………………
WordDocument1.PageSetup.HeaderDistance:=1.5; //設置頁邊距
WordDocument1.PageSetup.FooterDistance:=1.75;
//設置頁眉頁腳
WordDocument1.ActiveWindow.ActivePane.View.SeekVIEw:=wdSeekCurrentPageFooter; WordDocument1.ActiveWindow.ActivePane.Selection.InsertAfter('第'+inttostr(wdFIEldNumPages)+'頁');
//讓頁腳向右靠齊
WordDocument1.ActiveWindow.ActivePane.Selection.ParagraphFormat.Alignment:=wdAlignParagraphRight;
…………………………
3.3第三種方法:使用CreateOleObject將啟動Office,然後以Ole方式對Office進行控制。以Excel表格為例(表格的格式可以是事先設定好的,也可以是自己自由定義的,這裡以事先設定好表格的格式為例),進行說明:
(1) 在Uses中添加Comobj類;
(2) 申請一個全局變量:FvExcel ,類型為Variant; 表示是Excel對象
(3) 定義一個函數用來啟動Excel,如定義function OpenExcel(strFileName : string) : Boolean;
Function Tform1. OpenExcel(strFileName : string) : Boolean;
begin
Result := True;
try
FvExcel := CreateOleObject('Excel.Application');
except
Application.MessageBox('打開Excel失敗',PChar(Application.Title),MB_ICONERROR);
Result := False;
end;
FvExcel.Visible := True;
FvExcel.Caption := '';
FvExcel.WorkBooks.Open(strFileName); //打開工作簿
FvExcel.WorkSheets[1].Activate; //設置第1個工作表為活動工作表
end;
(4) 向FvExcel中插入數據
FvExcel.cells[row,col].value:=’中國’;//row表示行,col表示列;
(5) 設置格式
fvExcel.rows[row].font.color:=clred; //設置某一行數據的顏色
fvExcel.ActiveSheet.PageSetup.LeftMargin:=1;//設置左頁邊距
fvExcel.ActiveSheet.PageSetup. RightMargin:=1;//設置右頁邊距
fvExcel.ActiveSheet.PageSetup.Zoom:=100;//設置顯示比例
fvExcel.ActiveSheet.PageSetup.PaperSize:= xlPaperA4;//設置打印紙張大小
4.一些體會
在程序設計過程中,我們很多時候要設置Office文檔、表格的格式,這時要用到很多屬性、方法和函數等,這些屬性、方法和函數一般是平時很少用到的,如果手上沒有VBA手冊,很難查找到這些東西,所以,比較好的方法是首先打開Office,事先做好你要設計的格式,通過Office中的宏記錄,然後打開Office中的Visual Basic編輯器,查看代碼就可以看到你的操作使用到的屬性、方法或者函數了。通常很多屬性、函數或者方法可以直接搬到Delphi程序中用,一部分也只要稍微修改,也可以在Delphi中使用了。
5.結束語
通過Delphi可以很完美的和Office結合,設計出各種樣式的表格、文本以及幻燈片等。同時通過Delphi操作數據庫,把要求的數據插入Office適當的位置,通過Office本身的功能實現預覽、打印和保存,從而減少節約程序調試和定位調試的時間,簡化的編程的難度,減少了程序員的工作量。對於用戶來講,采用大家熟悉的Office,增加了系統可操作性。該思想已經在“職稱評審管理信息系統”中大量使用。