使用OpenXML读取Excel文件的性能

时间:2011-05-13 09:34:55

标签: excel oledb openxml

截至目前,我正在使用oledbreader阅读所有版本的excel文件。我引用了一个dll来读取Excel 2010文件。但我无法使用oledbreader阅读一些excel 2010文件。所以我想使用openxml来读取所有excel文件。这有什么性能问题吗? 哪个更好?

1 个答案:

答案 0 :(得分:2)

我很幸运使用以下代码从Excel电子表格中检索表名(工作表名称)和列名。

Private Sub GetWorksheetData

  Dim xlBaseConnStr1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=XLS;Extended Properties=""Excel 8.0;HDR=Yes"""
  Dim xlBaseConnStr2 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=XLS;Extended Properties=""Excel 12.0 Xml;HDR=YES"""
  Dim xlName As String
  Dim conStr As String

  Dim oDia As New OpenFileDialog

  oDia.ShowDialog()

  xlName = oDia.FileName

  If xlName = "" Then
     Exit Sub
  End If

  Dim extType As String = Path.GetExtension(xlName)
  Select Case extType
     Case ".xls"
        conStr = xlBaseConnStr1.Replace("XLS", xlName)
     Case ".xlsx"
        conStr = xlBaseConnStr2.Replace("XLS", xlName)
     Case Else
        MessageBox.Show("Unrecognized file type")
        Exit Sub
  End Select

  Dim dtSheets As New DataTable

  Using cn As New OleDbConnection(conStr)
     cn.Open()
     dtSheets = cn.GetSchema("Columns")
  End Using

  DataGrid1.ItemsSource = dtSheets.DefaultView

End Sub

上面的代码块从我放置的随机Excel电子表格中返回以下数据。

enter image description here

您需要导入以下命名空间才能生效:

Imports System.Data.OleDb
Imports System.Data
Imports Microsoft.Win32
Imports System.IO

如果您尝试访问的电子表格包含宏,则上述代码可能会失败。