新聞中心
用過(guò)VB的程序設(shè)計(jì)人員都知道,要想用VB輸出復(fù)雜的表格來(lái),是十分困難的。能不能用VB.NET excel對(duì)象呢?最近筆者為單位開發(fā)“土工試驗(yàn)數(shù)據(jù)整理”的某個(gè)模塊時(shí),涉及到復(fù)雜數(shù)據(jù)表格的輸出問(wèn)題,經(jīng)過(guò)筆者的摸索,用VB調(diào)用EXCEL,取得了很好的效果。本文從編程實(shí)踐的角度對(duì)使用VB控制EXCEL的技術(shù)作簡(jiǎn)要說(shuō)明。

為奉化等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及奉化網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、奉化網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
1. EXCEL的對(duì)象模型
如果一個(gè)應(yīng)用程序支持自動(dòng)化技術(shù),那么其它的應(yīng)用就可以通過(guò)其暴露的對(duì)象,對(duì)它進(jìn)行控制,控制程序稱為客戶機(jī),而被控制的一方就稱為服務(wù)器,被控制的對(duì)象就是Active對(duì)象。VB正是通過(guò)EXCEL顯露的各級(jí)對(duì)象來(lái)控制EXCEL工作的。每個(gè)對(duì)象都有各自的方法和屬性,通過(guò)方法可以實(shí)現(xiàn)對(duì)對(duì)象的控制,而屬性則可以改變對(duì)象的各種狀態(tài)。
理解EXCEL的對(duì)象模型是對(duì)其編程的基礎(chǔ)。EXCEL是以層次結(jié)構(gòu)組織對(duì)象的,其對(duì)象模型中含有許多不同的對(duì)象元素,這些對(duì)象元素就是VB.NET excel對(duì)象可以操縱的。在EXCEL對(duì)象的層次結(jié)構(gòu)中,最頂層是Application對(duì)象,是Excel本身。從該對(duì)象開始往下依次是:
- .workbooks對(duì)象集,是Application對(duì)象的下層,其指的是Excel的工作簿文件。
- .worksheets對(duì)象集,是Workbooks對(duì)象集的下層,它表示的是Excel的一個(gè)工作表。
- .Cells和Range對(duì)象,它們是worksheets對(duì)象的下層,它則指向Excel工作表中的一個(gè)或多個(gè)單元格。
以上介紹的四個(gè)對(duì)象是VB.NET excel對(duì)象中最重要也是用得最多的對(duì)象,而且從上面的介紹中也不難看出,要控制Excel中的某個(gè)具體對(duì)象,如某個(gè)工作簿中某一表格中的單元格,就必須從Excel層次結(jié)構(gòu)對(duì)象的最上層即Application對(duì)象開始遍歷。
2 .Excel對(duì)象的使用
application對(duì)象的使用
如前所述,Application對(duì)象位于Excel層次結(jié)構(gòu)對(duì)象的最上層,它代表的是Excel自身,我們的應(yīng)用程序理應(yīng)從Application對(duì)象的建立開始。VB控制Excel的啟動(dòng)方式有幾種,在這里我們使用了API調(diào)用,可以確保目前系統(tǒng)中只有一個(gè)Excel副本在運(yùn)行,程序代碼和說(shuō)明如下:
- Option Explicit
- Public xlapp As Object‘Excel對(duì)象
- Public xlbook As Object‘工作簿
- Public xlsheet As Object‘工作表
- Declare Function FindWindow Lib "user32" Alias _
- "FindWindowA" (ByVal lpClassName As String, _
- ByVal lpWindowName As Long) As Long
- Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
- (ByVal hwnd As long,ByVal wMsg As Long, ByVal wParam As Long, lParam_
- As Any) As_ Long
以上是公有變量和API函數(shù)應(yīng)在模塊中聲明。
- Sub GetExcel()
- Dim MyXL As Object '用于存放Microsoft Excel 引用的變量。
- Dim ExcelWasNotRunning As Boolean '用于最后釋放的標(biāo)記。
- On Error Resume Next '延遲錯(cuò)誤捕獲。
- '不帶第一個(gè)參數(shù)調(diào)用 Getobject 函數(shù)將返回對(duì)該應(yīng)用程序的實(shí)例的引用。
- '如果該應(yīng)用程序不在運(yùn)行,則會(huì)產(chǎn)生錯(cuò)誤。
- Set MyXL = GetObject(, "Excel.Application")
- If Err.Number <> 0 Then ExcelWasNotRunning = True
- Err.Clear '如果發(fā)生錯(cuò)誤則要清除 Err 對(duì)象。
- '檢測(cè) Microsoft Excel。如果 Microsoft Excel 在運(yùn)行,則將其加入運(yùn)行對(duì)象表。
- DetectExcel'該過(guò)程檢測(cè)并登記正在運(yùn)行的 Excel
- '設(shè)置其 Application 屬性,顯示 Microsoft Excel。
- '然后使用 MyXL 對(duì)象引用的 Windows 集合,顯示包含該文件的實(shí)際窗口。
- MyXL.Application.Visible = True
- MyXL.Parent.Windows(1).Visible = True
- '如果在啟動(dòng)時(shí),Microsoft Excel 的這份副本不在運(yùn)行中,
- '則使用 Application 屬性的 Quit 方法來(lái)關(guān)閉它。
- '注意,當(dāng)試圖退出 Microsoft Excel 時(shí),
- '標(biāo)題欄會(huì)閃爍,并顯示一條消息詢問(wèn)是否保存所加載的文件。
- If ExcelWasNotRunning = True Then
- MyXL.Application.Quit
- End If
- Set MyXL = Nothing '釋放對(duì)該應(yīng)用程序和電子數(shù)據(jù)表的引用。
- End Sub
- '該過(guò)程檢測(cè)并登記正在運(yùn)行的 Excel。
- Sub DetectExcel()
- Const WM_USER = 1024
- Dim hwnd As Long
- '如果 Excel 在運(yùn)行,則該 API 調(diào)用將返回其句柄。
- hwnd = FindWindow("XLMAIN", 0)
- If hwnd = 0 Then '0 表示沒有 Excel 在運(yùn)行。
- Exit Sub
- Else
- 'Excel 在運(yùn)行,因此可以使用 SendMessage API'函數(shù)將其放入運(yùn)行對(duì)象表。
- SendMessage hwnd, WM_USER + 18, 0, 0
- End If
- End Sub
有了Application對(duì)象,就可以非常方便地訪問(wèn)Excel應(yīng)用程序中的其它對(duì)象,以及這此對(duì)象的屬性和方法。
【編輯推薦】
- 強(qiáng)化VB.NET Word文檔創(chuàng)建Document對(duì)象
- VB.NET Word對(duì)象模型兩大要點(diǎn)介紹
- 全方位VB.NET文件操作和分類講述
- 細(xì)談VB.NET路徑選擇對(duì)話框?qū)崿F(xiàn)(API)實(shí)例
- 強(qiáng)化VB.NET編程多線程句柄技巧
本文名稱:全面簡(jiǎn)述VB.NET excel對(duì)象原理
文章來(lái)源:http://www.dlmjj.cn/article/dhgddoh.html


咨詢
建站咨詢
