VB.Net 關於 Excel 中Sheet 名稱 取得

VB.Net 關於 Excel 中Sheet 名稱 取得

 

VB.Net 關於 Excel Sheet 名稱 取得

 

' Imports 陳述式

' 匯入在所參考的專案和組件中定義的命名空間( Namespace ) 或程式設計項目。

 

Imports System.Runtime.InteropServices

 

' System.Runtime.InteropServices 命名空間

' 提供各種支援COM Interop 和平台叫用服務的成員。與Unmanaged 程式碼互通。

 

Public Class Form1

 

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

        ' 取得 Excel 檔案中第一個 Sheet 名稱

        MessageBox.Show(Get_Xls_1st_Sht("C:\Book1.xls"))

    End Sub

 

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click

        ' 取得 Excel 檔案中所有 Sheet 名稱

        Dim ShtAry As Object = Get_Xls_Sht("C:\Book1.xls")

        For Each Sht As Object In ShtAry

            MessageBox.Show(Sht.TrimEnd("$"))

        Next

    End Sub

 

    Private Function Get_Xls_Sht(ByVal XlsFile As String) As Object ' 取得 Excel 檔案中第一個 Sheet 名稱

        Dim cnXls As Object = Activator.CreateInstance(Type.GetTypeFromProgID("ADODB.Connection"))

        cnXls.Open("Provider=MSDASQL.1;DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & XlsFile)

        Get_Xls_Sht = cnXls.OpenSchema(20).GetRows(-1, 1, 2) ' 傳回一個二維陣列。

        Marshal.ReleaseComObject(cnXls)

    End Function

 

    Private Function Get_Xls_1st_Sht(ByVal XlsFile As String) As String ' 取得 Excel 檔案中所有 Sheet 名稱

        Dim cnXls As Object = Activator.CreateInstance(Type.GetTypeFromProgID("ADODB.Connection")) ' 1

        cnXls.Open("Provider=MSDASQL.1;DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & XlsFile) ' 2

        Get_Xls_1st_Sht = cnXls.OpenSchema(20).GetRows(-1, 1, 2)(0, 0).TrimEnd("$") ' 3

        Marshal.ReleaseComObject(cnXls) ' 釋放 COM 物件所使用的資源

    End Function

 

End Class

 

' 1 :

'   ADODB.Connection ADO 連線物件之 ProgID 

'   Type.GetTypeFromProgID 方法: 根據 ProgID 取得物件的型別

 

' 2 :

'   Open 方法 (ADO 連接) : 開啟對資料源的連接。

'   語法: connection.Open ConnectionString

 

' 3 :

'   OpenSchema 方法 (ADO) : 從提供者取得資料庫結構描述資訊。

'   語法: recordset = connection.OpenSchema(QueryType)

'   20 = adSchemaTables

 

'   GetRows 方法 (ADO) : Recordset 物件中取得多個資料錄,將其放入陣列中。

'   語法: Array = recordset.GetRows(Rows, Start, Fields)

 

'   Rows   選擇性參數。表示要取得資料錄個數的 Long 運算式。

'   -1 = adGetRowsRest (預設值)

 

'   Start   選擇性參數。評定 GetRows 動作應該開始之資料錄書籤。

'   1 = adBookmarkFirst 由第一筆資料錄開始。

 

'   Fields   選擇性參數。表示單一資料欄名稱或序數位置,或資料欄名稱陣列或序數位置號碼。

'   2 = Table_Name

 

'   GetRows 會傳回一個二維陣列。

'   (0, 0) = 陣列第一個元素