使用OleDbDataAdapter从excel读取一些科学计数法的数字单元格?

时间:2013-03-07 19:47:14

标签: vb.net excel oledb

使用OleDbDataAdapter从excel读取一些科学记数法的数字单元格。只有仅为数字的字符串(某些字符串可能包含字母)且为6位或7位或更多。我不可能在每个细胞之前加上'。在较新版本的excel中,根本没有问题。问题来自旧版本(我认为它是2003年,但我不确定)

Dim dt As DataTable = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                                     New Object() {Nothing, Nothing, Nothing, "TABLE"})

Dim dbAdapter As New OleDbDataAdapter("SELECT * FROM [" & strSheet & "]  ", dbConn)

我已经尝试了一切,我不知道该怎么做。我已经尝试按名称选择每个列并连接一个空字符串,我尝试将IMEX = 1添加到连接字符串。或修改注册表:

    Private Function CheckRegKey() As Boolean
    Try
        Dim strRows As String = My.Computer.Registry.GetValue( _
            "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel", "TypeGuessRows", "99").ToString
        Dim strTypes As String = My.Computer.Registry.GetValue( _
            "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel", "ImportMixedTypes", "zip").ToString

        If strRows <> "0" Then
            My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel", "TypeGuessRows", 0, Microsoft.Win32.RegistryValueKind.DWord)
        End If
        If strTypes <> "Text" Then
            My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel", "ImportMixedTypes", "Text")
        End If
    Catch ex As Exception
        Return False
    End Try
    Return True

End Function

Dim dbAdapter As New OleDbDataAdapter("SELECT * FROM [" & strSheet & "]  ", dbConn)

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我似乎可以通过修改select语句来修复它。这与我上面的代码一起使用时有效。

我只包含了给我提问的列,但是因为我将它从SELECT *切换到指定列数据,所以包含所需的每个列名都很重要。

Dim dbAdapter As New OleDbDataAdapter("SELECT FORMAT(part_no, ""######"") As part_no FROM [" & strSheet & "]  ", dbConn)