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