2012-11-29 53 views
3

我嘗試使用vb.net從文件excel中獲取工作表名稱並將它們顯示到文本框中。我使用此代碼嘗試:如何從excel 2007(* .xlsx)使用vb.net或c獲取工作表名稱

Imports Microsoft.Office.Interop 
Private Sub GetSheetsName 
Dim efa As New Excel.Application 
Dim ewb As Excel.Workbook 
Dim ews As Excel.Worksheet 
Dim fileName as string 
fileName="D:\test.xls" 
ewb = efa.Workbooks.Open(fileName) 
For Each ews In ewb.Worksheets 
    ExcelSheetName += ews.Name & vbNewLine 
Next ews 
TextBox1.text=ExcelSheetName 
end sub 

該代碼是爲檔案工作出色的* .xls,在文本框中顯示錶從文件TEST.XLS名稱

Sheet1 
Sheet2 
Sheet3 

但是當我嘗試用2007的Excel( * .xlsx),然後顯示像這樣的錯誤消息。 error message

我該怎麼辦?你能幫我嗎。

回答

10

試試這個代碼:

Private Sub GetExcelSheetNames(ByVal fileName As String) 
    Dim strconn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & 
      fileName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";" 
    Dim conn As New OleDbConnection(strconn) 

    conn.Open() 

    Dim dtSheets As DataTable = 
       conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 
    Dim listSheet As New List(Of String) 
    Dim drSheet As DataRow 

    For Each drSheet In dtSheets.Rows 
     listSheet.Add(drSheet("TABLE_NAME").ToString()) 
    Next 

    //show sheetname in textbox where multiline is true 
    For Each sheet As String In listSheet 
     TextBox1.Text = TextBox1.Text & sheet & vbNewLine 
    Next 

    conn.Close() 

End Sub 
+0

我會試試那個代碼... – Fauzi88

+0

那個代碼是工作的,謝謝 – Fauzi88

+0

這段代碼有效。但如果excel文件的行數大於60000,仍需要時間。有什麼方法可以快速獲取表格名稱 – MansoorShaikh

0

處理xlsx文件的優秀庫是EPPlus。

這裏是一個示例代碼:

var existingFile = new FileInfo(path); 
var sheets = new List<string>(); 
using (var package = new ExcelPackage(existingFile)) 
{ 
    sheets.AddRange(from worksheet in package.Workbook.Worksheets where worksheet.Dimension != null select worksheet.Name); 
} 

,你可以在這裏找到:http://epplus.codeplex.com/

+0

我會努力該代碼。 – Fauzi88

0

嘗試使用

For Each ews In ewb.Sheets 
    ExcelSheetName += ews.Name & vbNewLine 
Next ews 
+0

那還是錯誤的, – Fauzi88

相關問題