我正在将数据从 Excel 电子表格导入 VB.NET DataTable
。这个 Excel 电子表格在前 18 行中有很多垃圾数据,包括很多空单元格。我最终在后处理中删除了这些行,但我需要按原样访问 Excel 文件,根本不需要手动修改它。
我意识到该设置IMEX=1
指示 Jet 引擎假定所有列都是文本。但是,我在将其设置为另一个值时遇到了问题(下面将详细解释)。因此,默认的 Jet 引擎列类型扫描不会特别好。
我想:
- 导入前手动定义列类型
- 强制 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
谢谢!