0

我正在将数据从 Excel 电子表格导入 VB.NET DataTable。这个 Excel 电子表格在前 18 行中有很多垃圾数据,包括很多空单元格。我最终在后处理中删除了这些行,但我需要按原样访问 Excel 文件,根本不需要手动修改它。

我意识到该设置IMEX=1指示 Jet 引擎假定所有列都是文本。但是,我在将其设置为另一个值时遇到了问题(下面将详细解释)。因此,默认的 Jet 引擎列类型扫描不会特别好。

我想:

  1. 导入前手动定义列类型
  2. 强制 Excel 扫描更多行(我相信默认为 8)以确定列类型

但是,我确实对想法 #2 有疑问。我没有打开的管理权限regedit.exe,所以我无法使用该方法修改注册表。我以前确实通过某种方式导入密钥来规避这个问题,但我不记得我是怎么做到的。所以#1将是一个理想的解决方案,除非有人可以帮助我实施想法#2。

这可能吗?目前,我正在使用以下方法:

If _
    SetDBConnect( _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filepath & _
    ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""", True) Then

    dtSchema = _dh.GetOleDbSchemaTable()

    If _dh.Errors <> "" Then
       Throw New Exception("::LoadFileToBuffer.GetOleDbSchemaTable::" & _dh.Errors())
    End If

    For Each sheetRow In dtSchema.Rows
       If sheetRow("TABLE_NAME").ToString() = "TOTAL_DOLLARS$" Then
          totalDollars = sheetRow("TABLE_NAME").ToString()
        ElseIf sheetRow("TABLE_NAME").ToString() = "TOTAL_UNITS$" Then
          totalUnits = sheetRow("TABLE_NAME").ToString()
       End If
    Next

    'Get total dollars table
     sql.Append("SELECT * FROM [" & totalDollars & "]")
     dtDollars = _dh.GetTable(sql.ToString())
End If

谢谢!

4

1 回答 1

1

你应该可以说:

 sql.Append("SELECT * FROM [" & totalDollars & "$A18:X95]")

其中 totalDollars 是工作表名称,x95 是最后一个有效行。除非它们在第 18 行可用,否则您将无法包含标题。

于 2013-01-14T20:26:58.203 回答