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

时间:2017-07-14 08:45:44

标签: excel vb.net types datatable

我正在尝试从不同的Excel工作表中获取数据表。我使用OleDbConnection正确获取数据表。但是,某些列被错误地理解为String,但其中一些列为DoubleDateTime类型。

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

this post我得到ADO.NET根据列中的大多数值选择数据类型。所以我不知道这些字段中大多数条目是空的这一事实是否会在阅读时产生影响。

但是,我再说一遍,从Access中读取数据表内容时不会发生这种情况,因为Access设计中的字段是使用相应的DataType定义的,而在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

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

因此,如果从Excel工作表中读取时DataType中的大多数记录为空,我认为特定字段的默认DataTableString类型。在这些情况下,如何设法获得正确的DataType

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

0 个答案:

没有答案