从Excel中读取DataTable中的错误数据types

我试图从不同的Excel工作表中获取数据表。 我使用OleDbConnection正确获取数据表。 但是,某些列被错误地读为String ,但其中一些是DoubleDateTimetypes。

我正在阅读的Excel中,我已经从一个Access文件创build它,它是用正确的数据types写的。 我也validation了Excel表格中没有“存储为文本的数字”单元格消息。 当我尝试读取这个Excel文件中大多数行都是空的列时,问题就出现了。

从这篇文章中,我得到ADO.NET根据列中的大部分值select数据types。 所以我不知道这些字段中的大部分条目都是空的事实在阅读时可能会产生影响。

但是,我再说一遍,从Access读取数据表内容时不会发生这种情况,因为Accessdevise中的字段是用相应的DataType定义的,而在Excel中则不是。

这是我的function,获取所需的工作表内容为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 

我知道哪些字段必须是DoubleDateTimeString并且我可以遍历这些列并分配正确的DataType ,但这并不优雅。

所以,我想如果DataTable大部分logging都是空的,则从Excel工作表读取时,特定字段的默认DataTypeStringtypes。 在这种情况下,我怎样才能获得正确的DataType

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