ADO 文本文件查询 - 结果以逗号分割
ADO text file query - results split by comma
我正在使用 ADO 查询文本文件以将数据导入 Excel。
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & filePath & ";" & _
"Extended Properties='text';"
rs.Open "SELECT * FROM " & fileName, cn
wsImport.Range("A1").CopyFromRecordset rs
我面临的问题是查询结果被分割,以逗号作为分隔符。这意味着当我将数据写入工作表时,它会跨多个列输出。
我已经确认它是在查询阶段拆分的,而不是在将数据写入工作表阶段拆分的。我必须使用 rs.Fields(0)
和 rs.Fields(1)
来访问某些数据行,当我希望所有数据都可以在创建的记录集的第一个字段中访问时(允许将数据写入列 A工作表)。
任何人都可以阐明我如何查询文本文件,而不用任何定界符分割数据吗?
我还尝试在扩展属性中使用以下内容。
Extended Properties='text;HDR=Yes;FMT=Delimited';
和
Extended Properties='text;HDR=Yes;FMT=FixedLength';
下面是读取文本文件的简单示例:
Sub foo(filePath As String)
Dim sDataIn As String
Dim sDataTemp() As String
Dim sDataOut() As String
Dim n As Long
Open filePath For Binary As #1
sDataIn = Space$(LOF(1))
Get #1, , sDataIn
Close #1
sDataTemp() = Split(sDataIn, vbNewLine)
ReDim sDataOut(1 To UBound(sDataTemp) + 1, 1 To 1)
For n = LBound(sDataTemp) To UBound(sDataTemp)
sDataOut(n + 1, 1) = sDataTemp(n)
Next n
ActiveSheet.Range("A1").Resize(UBound(sDataOut), 1) = sDataOut
End Sub
如果你打开宏录制器,让它记录你一次导入文件的所有步骤,你应该会有答案。
我刚刚试了一下,得到了这个。
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+s
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\your_path_here\test.txt", Destination:=Range("$A"))
.CommandType = 0
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
我正在使用 ADO 查询文本文件以将数据导入 Excel。
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & filePath & ";" & _
"Extended Properties='text';"
rs.Open "SELECT * FROM " & fileName, cn
wsImport.Range("A1").CopyFromRecordset rs
我面临的问题是查询结果被分割,以逗号作为分隔符。这意味着当我将数据写入工作表时,它会跨多个列输出。
我已经确认它是在查询阶段拆分的,而不是在将数据写入工作表阶段拆分的。我必须使用 rs.Fields(0)
和 rs.Fields(1)
来访问某些数据行,当我希望所有数据都可以在创建的记录集的第一个字段中访问时(允许将数据写入列 A工作表)。
任何人都可以阐明我如何查询文本文件,而不用任何定界符分割数据吗?
我还尝试在扩展属性中使用以下内容。
Extended Properties='text;HDR=Yes;FMT=Delimited';
和
Extended Properties='text;HDR=Yes;FMT=FixedLength';
下面是读取文本文件的简单示例:
Sub foo(filePath As String)
Dim sDataIn As String
Dim sDataTemp() As String
Dim sDataOut() As String
Dim n As Long
Open filePath For Binary As #1
sDataIn = Space$(LOF(1))
Get #1, , sDataIn
Close #1
sDataTemp() = Split(sDataIn, vbNewLine)
ReDim sDataOut(1 To UBound(sDataTemp) + 1, 1 To 1)
For n = LBound(sDataTemp) To UBound(sDataTemp)
sDataOut(n + 1, 1) = sDataTemp(n)
Next n
ActiveSheet.Range("A1").Resize(UBound(sDataOut), 1) = sDataOut
End Sub
如果你打开宏录制器,让它记录你一次导入文件的所有步骤,你应该会有答案。
我刚刚试了一下,得到了这个。
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+s
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\your_path_here\test.txt", Destination:=Range("$A"))
.CommandType = 0
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub