delphi 操作excel 文章轉載

EXCEL
2007年07月03日 星期二 11:45

DELPHI中EXCEL組件的使用方法:
一) 使用動態創建的方法
首先創建 Excel 對象,使用ComObj:
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );
1) 顯示當前窗口:
ExcelApp.Visible := True;
2) 更改 Excel 標題欄:
ExcelApp.Caption := '應用程序調用 Microsoft Excel';
3) 添加新工作簿:
ExcelApp.WorkBooks.Add;
4) 打開已存在的工作簿:
ExcelApp.WorkBooks.Open( 'C:/Excel/Demo.xls' );
5) 設置第2個工作表爲活動工作表:
ExcelApp.WorkSheets[2].Activate;  

ExcelApp.WorksSheets[ 'Sheet2' ].Activate;
6) 給單元格賦值:
ExcelApp.Cells[1,4].Value := '第一行第四列';
7) 設置指定列的寬度(單位:字符個數),以第一列爲例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;
8) 設置指定行的高度(單位:磅)(1磅=0.035釐米),以第二行爲例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1釐米
9) 在第8行之前插入分頁符:
ExcelApp.WorkSheets[1].Rows.PageBreak := 1;
10) 在第8列之前刪除分頁符:
ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;
11) 指定邊框線寬度:
ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左     2-右    3-頂     4-底    5-斜( / )      6-斜( / )
12) 清除第一行第四列單元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
13) 設置第一行字體屬性:
ExcelApp.ActiveSheet.Rows[1].Font.Name := '隸書';
ExcelApp.ActiveSheet.Rows[1].Font.Color   := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold    := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
14) 進行頁面設置:
a.頁眉:
     ExcelApp.ActiveSheet.PageSetup.CenterHeader := '報表演示';
b.頁腳:
     ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P頁';
c.頁眉到頂端邊距2cm:
     ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.頁腳到底端邊距3cm:
     ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.頂邊距2cm:
     ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底邊距2cm:
     ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左邊距2cm:
     ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右邊距2cm:
     ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.頁面水平居中:
     ExcelApp.ActiveSheet.PageSetup.CenterHorizontally :=

2/0.035;
j.頁面垂直居中:
     ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印單元格網線:
     ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
15) 拷貝操作:
a.拷貝整個工作表:
     ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷貝指定區域:
     ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.從A1位置開始粘貼:
     ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.從文件尾部開始粘貼:
     ExcelApp.ActiveSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;
17) 刪除一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;
18) 打印預覽工作表:
ExcelApp.ActiveSheet.PrintPreview;
19) 打印輸出工作表:
ExcelApp.ActiveSheet.PrintOut;
20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
    ExcelApp.ActiveSheet.PrintPreview;
21) 工作表另存爲:
ExcelApp.SaveAs( 'C:/Excel/Demo1.xls' );
22) 放棄存盤:
ExcelApp.ActiveWorkBook.Saved := True;
23) 關閉工作簿:
ExcelApp.WorkBooks.Close;
24) 退出 Excel:
ExcelApp.Quit;
(二) 使用Delphi 控件方法
在Form中分別放入ExcelApplication, ExcelWorkbook和ExcelWorksheet


1)   打開Excel
ExcelApplication1.Connect;
2) 顯示當前窗口:
ExcelApplication1.Visible[0]:=True;
3) 更改 Excel 標題欄:
ExcelApplication1.Caption := '應用程序調用 Microsoft Excel';
4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyP

aram,0));

5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)

as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;

6) 打開已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:/a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
     EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
7) 設置第2個工作表爲活動工作表:
ExcelApplication1.WorkSheets[2].Activate;   或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;
8) 給單元格賦值:
ExcelApplication1.Cells[1,4].Value := '第一行第四列';
9) 設置指定列的寬度(單位:字符個數),以第一列爲例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;
10) 設置指定行的高度(單位:磅)(1磅=0.035釐米),以第二行爲例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; //

1釐米
11) 在第8行之前插入分頁符:
ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;
12) 在第8列之前刪除分頁符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;
13) 指定邊框線寬度:
ExcelApplication1.ActiveSheet.Range[ 'B3:D4'

].Borders[2].Weight := 3;
1-左     2-右    3-頂     4-底    5-斜( / )      6-斜( / )
14) 清除第一行第四列單元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;
15) 設置第一行字體屬性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隸書';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color   := clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold    := True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;
16) 進行頁面設置:
a.頁眉:
     ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '報

表演示';
b.頁腳:
     ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第

&P頁';
c.頁眉到頂端邊距2cm:
     ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin :=

2/0.035;
d.頁腳到底端邊距3cm:
     ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin :=

3/0.035;
e.頂邊距2cm:
     ExcelApplication1.ActiveSheet.PageSetup.TopMargin :=

2/0.035;
f.底邊距2cm:
     ExcelApplication1.ActiveSheet.PageSetup.BottomMargin :=

2/0.035;
g.左邊距2cm:
     ExcelApplication1.ActiveSheet.PageSetup.LeftMargin :=

2/0.035;
h.右邊距2cm:
     ExcelApplication1.ActiveSheet.PageSetup.RightMargin :=

2/0.035;
i.頁面水平居中:
     ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally

:= 2/0.035;
j.頁面垂直居中:
     ExcelApplication1.ActiveSheet.PageSetup.CenterVertically :=

2/0.035;
k.打印單元格網線:
     ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines :=

True;
17) 拷貝操作:
a.拷貝整個工作表:
     ExcelApplication1.ActiveSheet.Used.Range.Copy;
b.拷貝指定區域:
     ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.從A1位置開始粘貼:
     ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.從文件尾部開始粘貼:
     ExcelApplication1.ActiveSheet.Range.PasteSpecial;
18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
b. ExcelApplication1.ActiveSheet.Columns[1].Insert;
19) 刪除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
b. ExcelApplication1.ActiveSheet.Columns[1].Delete;
20) 打印預覽工作表:
ExcelApplication1.ActiveSheet.PrintPreview;
21) 打印輸出工作表:
ExcelApplication1.ActiveSheet.PrintOut;
22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
    ExcelApplication1.ActiveSheet.PrintPreview;
23) 工作表另存爲:
ExcelApplication1.SaveAs( 'C:/Excel/Demo1.xls' );
24) 放棄存盤:
ExcelApplication1.ActiveWorkBook.Saved := True;
25) 關閉工作簿:
ExcelApplication1.WorkBooks.Close;
26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
(三) 使用Delphi 控制Excle二維圖
在Form中分別放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
var asheet1,achart, range:variant;
1)選擇當第一個工作薄第一個工作表
asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];
2)增加一個二維圖
achart:=asheet1.chartobjects.add(100,100,200,200);
3)選擇二維圖的形態
achart.chart.charttype:=4;
4)給二維圖賦值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);

5)加上二維圖的標題
achart.Chart.HasTitle:=True;
achart.Chart.ChartTitle.Characters.Text:=’ Excle二維圖’   Delphi

與Word之間的融合技術 (0分)
[b]一、VBA代碼含義[/b]
Microsoft Word是一個集成化環境,是美國微軟公司的字處理系統,但是它

決不僅僅是一個字處
理系統,它集成了Microsoft Visual Basic,可以通過編程來實現對Word

功能的擴展。
Microsoft Visual Basic在word中的代碼即Word的宏,通過編寫Word宏,

可實現一些文檔處理的
自動化,如實現文檔的自動備份、存盤等,可擴展Word文檔的功能,因此,

能夠充分利用Word的
特性,甚至使Word成爲自己軟件的一部分。
Word的宏既有有利的一部分,因爲它能夠幫助我們實現文檔的自動化,但是

Word的宏也不是純粹
的有利,有時它可能危害我們的文檔、計算機系統甚至網絡,從最開始的Ta

iwan NO1宏病毒到現
在的Melissa宏病毒,從最開始的簡單的提示,耗盡系統資源到現在的亂髮

電子郵件,將個人的
信息發送到網絡上,甚至向硬盤的Autoexec.bat(自動批處理文件)中添加De

ltree C: -y,破壞
整個Windows系統。
[b]二、Word中內嵌的Com技術[/b]
可以說Word是對Com技術支持最好的軟件,這樣說似乎是太極端了一點,但

是Word提供的強大的編
程接口技術卻能夠是我們通過程序控制Word的任何一部分。無論是文件的打

開、存盤、打印還是文
檔中表格的自動繪製。
通過編程軟件,可以靈活的操縱word,這裏只以Borland Delphi爲例,進行

詳細描述:
1、 在Delphi中調用Word軟件/文件的方法
在Word中調用Word軟件,歸納起來有三種方法:
。通過Delphi的控件TOleContainer 將Word嵌入
a.使用Delphi提供的Servers控件調用Word,使用Word的屬性
b.通過真正的Com技術,將Office軟件目錄中文件MSWORD9.OLB中的類庫全

部導入Delphi中,
利用Com技術編程
c.使用CreateOleObject將啓動Word,然後以Ole方式對Word進行控制。
2、 對幾種方法的難易程度的判別
a.通過Delphi的控件TOleContainer 將Word嵌入
這是最簡單的Ole嵌入,能夠直接將Word文檔調用,只需要使用ToleContain

er.Run就可以將Word文
檔直接啓動。且這樣啓動的Word文檔與Delphi程序是一個整體(從界面上看

),但是它存在不可克
服的缺點,即不能通過Delphi控制Word文檔,也就不能實現將靈活操縱Word

的目的。
b.使用Delphi提供的Servers控件調用Word,使用Word的屬性
使用Delphi的Servers控件來操縱Word,在編程時Delphi能夠實現代碼提示

,總體上看能夠較好的實
現Delphi對Word的控制,但是還有一些Word的功能不能在Delphi中調用(

比如自己編寫的VBA宏代碼)。
且實現功能時本來在VBA代碼中可選則參數在Delphi調用的時候必須添加,

否則,連編譯都不能通過。
本方式啓動的Word與Delphi程序分屬兩個窗體。
此辦法僅能作爲一個參考。
c.通過真正的Com技術,將Office軟件目錄中文件MSWORD9.OLB中的類庫全

部導入Delphi中,
利用Com技術編程
利用真正的Com技術,將MsWord9.OLD文件類庫導入,然後利用Com技術進行

使用。
整體上類似使用Delphi的Servers控件,稍微比Servers控件麻煩,優缺點

與Servers控件相同。
d.使用CreateOleObject將啓動Word,然後以Ole方式對Word進行控制。
本辦法是使用以CreateOleObjects方式調用Word,實際上還是Ole,但是這

種方式能夠真正做到完全
控制Word文件,能夠使用Word的所有屬性,包括自己編寫的VBA宏代碼。
與Servers控件和com技術相比,本方法能夠真正地使用Word的各種屬性,和

在VBA中編寫自己的代碼
基本一樣,可以缺省的代碼也不需要使用。
本方式啓動的Word與Delphi程序分屬兩個窗體。
缺點是使用本方法沒有Delphi代碼提示,所有異常處理均需要自己編寫,可

能編寫時探索性知識比較多。
[b]三、Word宏編輯器[/b]
Word能夠真正地進行VBA代碼的編輯,可以編寫窗體、函數。
進入Word宏編輯器的方法:工具->宏->Visual

Basic編輯器,可進入Visual Basic編輯器界面。
Word的Visual Basic編輯器界面和真正的Visual Basic編輯器基本相同,

在此不再向詳述。
在VBA代碼中,可以添加用戶窗體、模塊、類模塊。用戶窗體、模塊、類模

塊的概念和Visual Basic
完全相同。註釋也與Visual Basic完全相同。
可以將光標停留在窗體、模塊的任何一個子程序上,直接按“F5”運行當前子

程序。
[b]四、Word的宏的概述[/b]
Word充分地將文檔編輯和VB結合起來,真正地實現文檔的自動化。使用Word

編程,類似於使用
Visual Basic,所不同的是,在Word中,能夠直接運行某一個子程序,直接

看見結果,Word的宏,
只能解釋運行,而Visual Basic,現在已經能夠編寫成真正的機器碼,從代

碼的保護上來說,應該盡
可能地減少Word的VBA代碼數量,尤其是關鍵的代碼。
VBA宏,可分成四種:
1、 和命令名相同的宏
如FileSave,FileOpen,如果在VBA代碼中包含與Word同名的函數,則直接

執行這些VBA代碼,忽略Word
本身的命令。
2、 Word內特定的宏
這些宏包含AutoExec(啓動 Word 或加載全局模板)、AutoNew(每次新建

文檔時)、AutoOpen(每次打
開已有文檔時)、AutoClose(每次關閉文檔時),AutoExit(退出 Word

或卸載全局模板時)。
如果VBA代碼中含有這些名稱的函數,則滿足相應的條件,相應代碼就自動

執行。
3、 相應事件的VBA宏
這些宏是由事件觸發的宏,如Document_Close在文檔關閉的時候觸發事件,

Document_New在新建文檔的時
候觸發,Document_Open在打開文檔的時候觸發。
4、 獨立的宏
自己編寫的VBA代碼,即不屬於上面幾種情況的VBA代碼,可以被其他VBA代

碼調用,更重要的是,可以被
其他程序調用。
這樣,我們就可以屏棄Word自動執行的宏,通過Delphi直接調用相應宏來達

到目的。
[b]五、Word命令宏的詳細描述[/b]
Word本身的命令函數包含很多,但是無論是word聯機幫助還是MSDN幫助,都

沒有這方面的介紹,因此只能
憑自己的實驗取探索,初步探測的函數如下:
宏名 解釋 註釋
FileNew 新建
FileNewDefault 新建空白文檔
FileSaveAs 另存爲
FileOpen 打開
FileClose 關閉
FilePrint 打印
FilePrintPreview 打印預覽
ToolsCustomize 工具欄裏面的自定義
ToolsOptions 工具選項
ToolsRevisions 突出顯示修訂
ToolsReviewRevisions 接受或拒絕修訂
ToolsRevisionMarksAccept 接受修訂
ToolsRevisionMarksReject 拒絕修訂
ToolsRevisionMarksToggle 修訂
ToolsMacro 宏
ToolsRecordMacroToggle 錄製新宏
ViewSecurity 安全性
ViewVBCode 查看VB編輯器環境
FileTemplates 模板和可加載項
ToolsProtectUnprotectDocument 解除對文檔的保護
InsertHyperlink 插入超級鏈接
EditHyperlink 編輯超級鏈接
DeleteHyperlink 刪除超級鏈接
EditLinks 查看、刪除鏈接
EditPasteAsHyperlink 粘貼超級鏈接
FormatStyle 樣式
EditBookMark 書籤
[center][email protected][/center]
[b]一、Delphi程序啓動Word[/b]
採用CreateOleObjects的方法來啓動Word,調用VBA代碼,具體實現過程爲


首先使用GetActiveOleObject('Word.Application')判斷當前內存中是否

存在Word程序,如果存在,
則直接連接,如果沒有Word程序,則使用CreateOleObject('Word.Applica

tion')啓動Word
[b]二、Delphi程序新建Word文稿[/b]
格式:WordDocuments.Add(Template,NewTemplate,DocumentType,Visib

le)
Template: 使用模板的名稱,
NewTemplate: 新建文檔的類型,True表示爲模板,False表示爲文檔
DocumentType: 文檔類型,默認爲空白文檔
Visible: 打撈的窗口是否可見
舉例:Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.

dot',NewTemplate:=False);
[b]三、Delphi程序打開Word文稿[/b]
格式:WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,P

assWordDocument,
                         

PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemp

late,
                          Format,Encoding,Visible)
FileName: 文檔名(包含路徑)
Confirmconversions: 是否顯示文件轉換對話框
ReadOnly: 是否以只讀方式打開文檔
AddToRecentFiles: 是否將文件添加到"文件"菜單底部的最近使用文件列

表中
PassWordDocument: 打開此文檔時所需要的密碼
PasswordTemplate: 打開此模板時所需要的密碼
Revert: 如果文檔已經,是否重新打開文檔
WritePasswordDocument: 保存對文檔更改時所需要的密碼
WritePasswordTemplate: 保存對模板進行更改時所需要的密碼
Format: 打開文檔時所需使用的文件轉換器
Encoding: 所使用的文檔代碼頁
Visible: 打開文檔的窗口是否可見
舉例:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly

:=False,
             AddToRecentFiles:=False);
[b]四、Delphi程序保存Word文稿[/b]
格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments,

Password,
                           AddToRecentFiles, WritePassword,

ReadOnlyRecommended,
                           EmbedTrueTypeFonts,

SaveNativePictureFormat, SaveFormsData,
                           SaveAsAOCELetter)
FileName:               文件名。默認爲當前文件夾和文件名。
FileFormat               文檔保存的格式。
LockComments             如果爲 True,則此文檔只允許進行批註。
Password                 打開文檔時的口令。
AddToRecentFiles         如果爲True,則將文檔添至"文件"菜單中最近

使用的文檔列表中。
WritePassword            保存對文檔的修改所需的

發佈了57 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章