从Excel读取的数据表中获取错误的数据类型

从Excel读取的数据表中获取错误的数据类型,excel,vb.net,types,datatable,Excel,Vb.net,Types,Datatable,我试图从不同的Excel工作表中获取数据表。我使用OleDbConnection正确获取数据表。但是,有些列被错误地读取为字符串,但有些列是双精度或日期时间类型 我正在阅读的Excel我已经从Access文件中创建了它,并且它是用正确的数据类型编写的。我还验证了Excel工作表中没有显示“数字存储为文本”单元格消息。当我试图读取此Excel文件中大多数行为空的列时,问题就出现了 从中可以看出,ADO.NET根据列中的大多数值选择数据类型。因此,我不知道这些字段中的大多数条目都是空的这一事实是否会

我试图从不同的Excel工作表中获取数据表。我使用
OleDbConnection
正确获取数据表。但是,有些列被错误地读取为
字符串
,但有些列是
双精度
日期时间
类型

我正在阅读的Excel我已经从Access文件中创建了它,并且它是用正确的数据类型编写的。我还验证了Excel工作表中没有显示“数字存储为文本”单元格消息。当我试图读取此Excel文件中大多数行为空的列时,问题就出现了

从中可以看出,ADO.NET根据列中的大多数值选择数据类型。因此,我不知道这些字段中的大多数条目都是空的这一事实是否会影响读取它

但是,我重复一下,从Access读取数据表内容时不会发生这种情况,因为Access设计中的字段是用相应的
数据类型定义的,而在Excel中则不是

这是我的函数,用于获取所需的工作表内容,如
DataTable

Public Function GetDatatable(sheetName As String, versionFilter As String) As DataTable
    Try
        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim ds As System.Data.DataSet
        Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
        Dim dbProvider As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
        Dim dbSource As String = String.Format("Data Source={0};", Trim(IExcelValue))
        Dim dbProperties As String = "Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;"""
        'Set version filter string if needed
        If Not versionFilter Is Nothing Then
            versionFilter = String.Format(" where numversion = '{0}'", versionFilter)
        Else
            versionFilter = ""
        End If
        'Set the connection string
        Dim connectionString As String = String.Format("{0}{1}{2}", dbProvider, dbSource, dbProperties)
        MyConnection = New System.Data.OleDb.OleDbConnection(connectionString)
        MyCommand = New System.Data.OleDb.OleDbDataAdapter(String.Format("select * from [{0}$]{1}", sheetName, versionFilter), MyConnection)
        MyCommand.TableMappings.Add("Table", sheetName)
        ds = New System.Data.DataSet
        MyCommand.Fill(ds)
        MyConnection.Close()
        GetDatatable = ds.Tables(sheetName)
    Catch ex As Exception
        MsgBox(ex.ToString)
        Return Nothing
    End Try
End Function
我知道哪些字段必须是
Double
DateTime
String
,我可以在这些列上循环并指定正确的
数据类型,但这并不优雅

因此,我假设在从Excel工作表读取时,如果数据表中的大多数记录都是空的,则特定字段的默认数据类型为
String
type。在这些情况下,我如何才能获得正确的
数据类型

(我不知道它是否重要,但我正在使用它编写Excel文件)