我将数据从Excel电子表格导入VB.NET DataTable
。这个Excel电子表格在前18行中有很多垃圾数据,包括很多空单元格。我最终在后期处理中删除了这些行,但是我需要按原样访问Excel文件,而不需要手动修改它。
我意识到设置IMEX=1
会指示Jet引擎假设所有列都是文本。但是,我有一个问题,将其设置为另一个值(下面将详细说明)。因此,默认的Jet引擎列类型扫描不会特别好。
我想要:
但是,我确实遇到了#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
谢谢!
答案 0 :(得分:1)
你应该可以说:
sql.Append("SELECT * FROM [" & totalDollars & "$A18:X95]")
其中totalDollars是工作表名称,x95是最后一个有效行。除非在第18行提供,否则您将无法包含标题。