从Excel导入 - 忽略非数字值

时间:2009-09-19 12:14:24

标签: asp.net import-from-excel

我有从指定格式的Excel工作表导入的代码。在其中一列中,大多数数据都是数字,但也存在非数字值。由于某种原因,导入代码会忽略非数字值。

connectionstring看起来像这样:

    Dim FileConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & Path & "\" & _
    Filename & ";Extended Properties=" & _
    """Excel 12.0;HDR=YES;IMEX=1;"""

实际的导入代码如下所示:

    Dim Factory As DbProviderFactory = _
    DbProviderFactories.GetFactory("System.Data.OleDb")

    Dim Adapter As DbDataAdapter = Factory.CreateDataAdapter(), _
    DataObject As New DataSet

    Using Connection As DbConnection = Factory.CreateConnection
        Connection.ConnectionString = FileConnectionString

        Using Command As DbCommand = Connection.CreateCommand

            Command.CommandText = _
            "SELECT [Column1], [Column2]" & _
            "FROM [Sheet1$]"

            Adapter.SelectCommand = Command

            Adapter.Fill(DataObject)

            ...

请注意,我已启用 IMEX = 1 通知Excel将显示混合数据。这似乎没有帮助。知道发生了什么事吗?

2 个答案:

答案 0 :(得分:3)

我注意到引擎从列中的第一个值推断出列的数据类型。

因此,如果您的第一个值是数字,则引擎会将该列视为数字,并且在尝试将Alpha值转换为数字时将失败。

我通常做的是在Excel上的所有值附加下划线,然后在SQL或DataSet上添加下划线以替换第一个下划线。希望它会有所帮助

答案 1 :(得分:2)

默认情况下,Excel会根据前8行数据的列来确定列的数据类型。要更改此设置,您需要更新注册表项:

  

HKLM \ Software \ Microsoft \ Office \ 12.0 \ Access Connect Engine \ Engines \ Excel

包含您希望Excel扫描的行数。将值设置为0以使其扫描所有行。请注意,将其设置为零可以减慢Excel负载,特别是在大型电子表格上。

此外,如果您还使用Excel 2003,则需要更新第二个注册表项:

  

HKLM \ SOFTWARE \微软\喷气\ 4.0 \发动机\ Excel中