Delphi的OFFICE開發

來源:互聯網
上載者:User

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,增加了系統可操作性。該思想已經在“職稱評審管理資訊系統”中大量使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.