2011-05-13 82 views
0

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

+0

OleDbDataReader应该能够读取任何Excel 2010文件。具体造成这个问题的是什么? OleDbDataReader非常快速,因为它是前向的,只读的。 – Stewbob 2011-05-13 15:09:48

+0

即时通讯使用objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,Nothing)从Excel工作表获取列名时出现如下错误:'外部数据库驱动程序(1)出现意外错误' – chinnu 2011-05-14 04:43:06

回答

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 

如果您尝试访问电子表格有宏,上面的代码可能会失败。