1。如何實現VB與EXCEL的無縫連線
VB 是常用的應用軟體開發工具之一,由於VB的報表功能有限,而且一旦報表格式發生變化,就得相應修改程式,給應用軟體的維護工作帶來極大的不便。因為有很多程式設計師現在已經充分利用Excel的強大報表功能來實現。
但由於VB與Excel分別屬於不同的應用系統,如何把它們有機地結合在一起,是一個值得我們研究的課題。
筆者在軟體開發工作中,對VB的自動化功能和Excel的宏功能進行了一定的研究,實現了VB與Excel的有機結合。現提出來與大家探討。
一、VB讀寫Excel表
VB本身的自動化功能可以讀寫Excel表,其方法如下:
1、在工程中引用Microsoft Excel型別庫:
從“工程”選單中選擇“引用”欄;選擇Microsoft Excel 9。
0 Object Library (Excel2000),然後選擇“確定”。表示在工程中要引用Excel型別庫。
2、在通用物件的宣告過程中定義Excel物件:
Dim xlApp As Excel。Application
Dim XlBook As Excel。
WorkBook
Dim xlSheet As Excel。Worksheet
3、在程式中操作Excel表常用命令:
Set xlApp = CreateObject (“Excel。Application”)’建立Excel物件
Set XlBook = xlApp。
Workbooks。Open(“檔名”) ’開啟已經存在的Excel工作薄檔案
xlApp。Visible = True ’設定Excel物件可見(或不可見)
Set xlSheet = xlBook。Worksheets(“表名”)
xlSheet。
Cells(row,col) = 值 ’給單元格(row,col)賦值
xlSheet。PrintOut ’列印工作表
xlBook。CloseTrue ’關閉工作薄
xlApp。Quit ’結束Excel物件
Set xlApp = Nothing ’釋放xlApp物件
xlBook。
RunAutoMacros xlAutoOpen ’執行Excel啟動宏
xlBook。RunAutoMacros xlAutoClose ’執行Excel關閉宏
4、在運用以上VB命令操作Excel表時,除非設定Excel物件不可見,否則VB程式可繼續執行其它操作,也能夠關閉Excel,同時也可對Excel進行操作。
但在Excel操作過程中關閉Excel物件時,VB無法知道,如果此時使用Excel物件,則VB程式會出現自動化錯誤,形成VB程式無法完全控制Excel狀況,使得VB與Excel脫節。
二、Excel的宏功能
其中,Excel有兩個自動宏:一個是啟動宏(Sub Auto_Open()),另一個是關閉宏(Sub Auto_Close())。它們的特性是:當用Excel開啟含有啟動宏的工作薄時,就會自動執行啟動宏,同理,當關閉含有關閉宏的工作薄時就會自動執行關閉宏。
但是透過VB的自動化功能來呼叫Excel工作表時,啟動宏和關閉宏不會自動執行,而需要在VB中透過命令 xlBook。RunAutoMacros(xlAutoOpen)和xlBook。RunAutoMacros(xlAutoClose)來執行啟動宏和關閉宏。
三、VB與Excel的相互溝通:
充分利用Excel的啟動宏和關閉宏,可以實現VB與Excel的相互溝通,其方法如下:
VB程式在執行時透過判斷此標誌檔案存在與否來判斷Excel是否開啟,如果此標誌檔案存在,表明Excel物件正在執行,應該禁止其它程式的執行。如果此標誌檔案不存在,表明Excel物件已被關閉,此時如果要使用Excel物件執行,必須重新建立Excel物件。
四、舉例
Dim xlApp As Excel。
Application "定義Excel類
Dim xlBook As Excel。Workbook "定義工作薄類
Dim XlSheet As Excel。Worksheet "定義工作表類
Private Sub Command1_Click() "開啟Excel過程
If Dir(“D:\temp\ ”)= “”Then "判斷Excel是否開啟
Set xlApp = CreateObject(“Excel。
Application”) "建立Excel應用類
xlApp。Visible = True "設定Excel可見
Set xlBook = xlApp。Workbooks。Open(“D:\temp\bb。xls”) "開啟Excel工作薄
Set xlSheet = xlBook。
Worksheet(1) "開啟Excel工作表
xlSheet。Activate "啟用工作表
xlSheet。Cells(1,1) = “abc” "給單元格1行駛列賦值
xlBook。RunAutoMacros(xlAutoOpen) "執行Excel中的啟動宏
Else
MsgBox(“Excel已開啟”)
End If
End Sub
Private Sub Command2_Click()
If Dir(“D:\temp\ ”)<> “” Then "由VB關閉Excel
RunAutoMacros(xlAutoClose) "執行Excel關閉宏
xlBook。Close(True)關閉Excel工作薄
xlApp。Quit "關閉Excel
Set xlApp = Nothing "釋放Excel物件
End
2、在D盤根目錄上建立一個名為temp的子目錄,在temp目錄下建立一個名為“bb。
xls”的Excel檔案。
3、在“bb。xls”中開啟Visual Basic編輯器,在工程視窗中點滑鼠鍵選擇插入模組,在模組中輸入以下程式存檔:
Sub auto_open()
Open “d:\temp\ ” For Output As #1
Close #1
Sub auto_close()
Kill “d:\temp\ ”
2。用VB。NET結合Excel設計統計生產報表
用EXCEL做企業生產報表的理由
Excel表格生成和公式設定十分強大便利,是一個強有力的資訊分析與處理工具。
特別是EXCEL的公式、函式、VBA語言,功能極其強大。我試用過其他電子表格軟體,在功能上和EXCEL根本沒有可比性。
Visual Studio ,NET也同樣是MicroSoft的產品,Visual Studio ,NET呼叫EXCEL做企業報表十分方便。
證明當時我選Visual Studio ,NET作為首選開發工具是正確的。
軟體構思
先在EXCEL裡定製好名為《統計表》的樣表(模版),,在樣表中設定好各種格式,填寫好固定項。
在窗體上放很三個控制元件,兩個DateTimePicker控制元件,用來選擇開始統計時間和結束統計時間。
一個Button以啟動程式。
軟體欲實現的功能是:點選Button1,自動查詢符合日期符合日期範圍的生產計劃工作表,然後利用SortedList統計各個辦事處的計劃數量和未完成數量,及各個產品型號的計劃數量和未完成數量。再把SortedList的資料讀出寫到《統計表》中。
這裡要注意的是,各個生產報表格式必須規範統一,因為程式是按照固定單元格位置讀取資料的。
SortedList類
除了具備VB,NET呼叫EXCEL的基礎知識外,本例主要用到SortedList類。
SortedList類表示鍵/值對的集合,這些鍵和值按鍵排序並可按照鍵和索引訪問。
SortedList 是 Hashtable 和 Array 的混合。當使用 Item 索引器屬性按照元素的鍵訪問元素時,其行為類似於 Hashtable。當使用 GetByIndex 或 SetByIndex 按照元素的索引訪問元素時,其行為類似於 Array。
SortedList 在內部維護兩個陣列以將陣列儲存到列表中;即,一個數組用於鍵,另一個數組用於相關聯的值。每個元素都是一個可作為 DictionaryEntry 物件進行訪問的鍵/值對。鍵不能為空引用(Visual Basic 中為 Nothing),但值可以。
SortedList 的容量是列表可擁有的元素數。隨著向 SortedList 中新增元素,容量透過重新分配按需自動增加。可透過呼叫 TrimToSize 或透過顯式設定 Capacity 屬性減少容量。
SortedList 的元素將按照特定的 IComparer 實現(在建立 SortedList 時指定)或按照鍵本身提供的 IComparable 實現並依據鍵來進行排序。
不論在哪種情況下,SortedList 都不允許重複鍵。
VB,NET結合EXCEL統計生產報表
以下是實現程式碼,供參考。為方便初學者,部份地方加以註釋。
。
1。如何實現VB與EXCEL的無縫連線
VB 是常用的應用軟體開發工具之一,由於VB的報表功能有限,而且一旦報表格式發生變化,就得相應修改程式,給應用軟體的維護工作帶來極大的不便。因為有很多程式設計師現在已經充分利用Excel的強大報表功能來實現。
但由於VB與Excel分別屬於不同的應用系統,如何把它們有機地結合在一起,是一個值得我們研究的課題。
筆者在軟體開發工作中,對VB的自動化功能和Excel的宏功能進行了一定的研究,實現了VB與Excel的有機結合。現提出來與大家探討。
一、VB讀寫Excel表
VB本身的自動化功能可以讀寫Excel表,其方法如下:
1、在工程中引用Microsoft Excel型別庫:
從“工程”選單中選擇“引用”欄;選擇Microsoft Excel 9。
0 Object Library (Excel2000),然後選擇“確定”。表示在工程中要引用Excel型別庫。
2、在通用物件的宣告過程中定義Excel物件:
Dim xlApp As Excel。Application
Dim XlBook As Excel。
WorkBook
Dim xlSheet As Excel。Worksheet
3、在程式中操作Excel表常用命令:
Set xlApp = CreateObject (“Excel。Application”)’建立Excel物件
Set XlBook = xlApp。
Workbooks。Open(“檔名”) ’開啟已經存在的Excel工作薄檔案
xlApp。Visible = True ’設定Excel物件可見(或不可見)
Set xlSheet = xlBook。Worksheets(“表名”)
xlSheet。
Cells(row,col) = 值 ’給單元格(row,col)賦值
xlSheet。PrintOut ’列印工作表
xlBook。CloseTrue ’關閉工作薄
xlApp。Quit ’結束Excel物件
Set xlApp = Nothing ’釋放xlApp物件
xlBook。
RunAutoMacros xlAutoOpen ’執行Excel啟動宏
xlBook。RunAutoMacros xlAutoClose ’執行Excel關閉宏
4、在運用以上VB命令操作Excel表時,除非設定Excel物件不可見,否則VB程式可繼續執行其它操作,也能夠關閉Excel,同時也可對Excel進行操作。
但在Excel操作過程中關閉Excel物件時,VB無法知道,如果此時使用Excel物件,則VB程式會出現自動化錯誤,形成VB程式無法完全控制Excel狀況,使得VB與Excel脫節。
二、Excel的宏功能
其中,Excel有兩個自動宏:一個是啟動宏(Sub Auto_Open()),另一個是關閉宏(Sub Auto_Close())。它們的特性是:當用Excel開啟含有啟動宏的工作薄時,就會自動執行啟動宏,同理,當關閉含有關閉宏的工作薄時就會自動執行關閉宏。
但是透過VB的自動化功能來呼叫Excel工作表時,啟動宏和關閉宏不會自動執行,而需要在VB中透過命令 xlBook。RunAutoMacros(xlAutoOpen)和xlBook。RunAutoMacros(xlAutoClose)來執行啟動宏和關閉宏。
三、VB與Excel的相互溝通:
充分利用Excel的啟動宏和關閉宏,可以實現VB與Excel的相互溝通,其方法如下:
VB程式在執行時透過判斷此標誌檔案存在與否來判斷Excel是否開啟,如果此標誌檔案存在,表明Excel物件正在執行,應該禁止其它程式的執行。如果此標誌檔案不存在,表明Excel物件已被關閉,此時如果要使用Excel物件執行,必須重新建立Excel物件。
四、舉例
Dim xlApp As Excel。
Application "定義Excel類
Dim xlBook As Excel。Workbook "定義工作薄類
Dim XlSheet As Excel。Worksheet "定義工作表類
Private Sub Command1_Click() "開啟Excel過程
If Dir(“D:\temp\ ”)= “”Then "判斷Excel是否開啟
Set xlApp = CreateObject(“Excel。
Application”) "建立Excel應用類
xlApp。Visible = True "設定Excel可見
Set xlBook = xlApp。Workbooks。Open(“D:\temp\bb。xls”) "開啟Excel工作薄
Set xlSheet = xlBook。
Worksheet(1) "開啟Excel工作表
xlSheet。Activate "啟用工作表
xlSheet。Cells(1,1) = “abc” "給單元格1行駛列賦值
xlBook。RunAutoMacros(xlAutoOpen) "執行Excel中的啟動宏
Else
MsgBox(“Excel已開啟”)
End If
End Sub
Private Sub Command2_Click()
If Dir(“D:\temp\ ”)<> “” Then "由VB關閉Excel
xlBook。
RunAutoMacros(xlAutoClose) "執行Excel關閉宏
xlBook。Close(True)關閉Excel工作薄
xlApp。Quit "關閉Excel
End If
Set xlApp = Nothing "釋放Excel物件
End
End Sub
2、在D盤根目錄上建立一個名為temp的子目錄,在temp目錄下建立一個名為“bb。
xls”的Excel檔案。
3、在“bb。xls”中開啟Visual Basic編輯器,在工程視窗中點滑鼠鍵選擇插入模組,在模組中輸入以下程式存檔:
Sub auto_open()
Open “d:\temp\ ” For Output As #1
Close #1
End Sub
Sub auto_close()
Kill “d:\temp\ ”
End Sub
2。用VB。NET結合Excel設計統計生產報表
用EXCEL做企業生產報表的理由
Excel表格生成和公式設定十分強大便利,是一個強有力的資訊分析與處理工具。
特別是EXCEL的公式、函式、VBA語言,功能極其強大。我試用過其他電子表格軟體,在功能上和EXCEL根本沒有可比性。
Visual Studio ,NET也同樣是MicroSoft的產品,Visual Studio ,NET呼叫EXCEL做企業報表十分方便。
證明當時我選Visual Studio ,NET作為首選開發工具是正確的。
軟體構思
先在EXCEL裡定製好名為《統計表》的樣表(模版),,在樣表中設定好各種格式,填寫好固定項。
在窗體上放很三個控制元件,兩個DateTimePicker控制元件,用來選擇開始統計時間和結束統計時間。
一個Button以啟動程式。
軟體欲實現的功能是:點選Button1,自動查詢符合日期符合日期範圍的生產計劃工作表,然後利用SortedList統計各個辦事處的計劃數量和未完成數量,及各個產品型號的計劃數量和未完成數量。再把SortedList的資料讀出寫到《統計表》中。
這裡要注意的是,各個生產報表格式必須規範統一,因為程式是按照固定單元格位置讀取資料的。
SortedList類
除了具備VB,NET呼叫EXCEL的基礎知識外,本例主要用到SortedList類。
SortedList類表示鍵/值對的集合,這些鍵和值按鍵排序並可按照鍵和索引訪問。
SortedList 是 Hashtable 和 Array 的混合。當使用 Item 索引器屬性按照元素的鍵訪問元素時,其行為類似於 Hashtable。當使用 GetByIndex 或 SetByIndex 按照元素的索引訪問元素時,其行為類似於 Array。
SortedList 在內部維護兩個陣列以將陣列儲存到列表中;即,一個數組用於鍵,另一個數組用於相關聯的值。每個元素都是一個可作為 DictionaryEntry 物件進行訪問的鍵/值對。鍵不能為空引用(Visual Basic 中為 Nothing),但值可以。
SortedList 的容量是列表可擁有的元素數。隨著向 SortedList 中新增元素,容量透過重新分配按需自動增加。可透過呼叫 TrimToSize 或透過顯式設定 Capacity 屬性減少容量。
SortedList 的元素將按照特定的 IComparer 實現(在建立 SortedList 時指定)或按照鍵本身提供的 IComparable 實現並依據鍵來進行排序。
不論在哪種情況下,SortedList 都不允許重複鍵。
VB,NET結合EXCEL統計生產報表
以下是實現程式碼,供參考。為方便初學者,部份地方加以註釋。
。