将ADODB二进制流转换为字符串vba
我有以下问题: 我有一个存储在服务器上的CSV文件,但它有3个字符作为分隔符:“[|]”。我想从URL加载数据,并使用[|]作为分隔符在Excel页面的列中填充数据。到目前为止,我找到了使用ADODB记录集从网站加载该文件的代码,但我无法获得更多:将ADODB二进制流转换为字符串vba,vba,file,csv,download,delimited-text,Vba,File,Csv,Download,Delimited Text,我有以下问题: 我有一个存储在服务器上的CSV文件,但它有3个字符作为分隔符:“[|]”。我想从URL加载数据,并使用[|]作为分隔符在Excel页面的列中填充数据。到目前为止,我找到了使用ADODB记录集从网站加载该文件的代码,但我无法获得更多: myURL = "http://www.example.com/file.csv" Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", myURL, F
myURL = "http://www.example.com/file.csv"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send
myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1 'binary type
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile "E:\file.csv", 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
这可以很好地直接保存文件。但我不想将其保存到文件中,我想在适当的单元格中输入数据。有没有办法做到这一点?我不希望使用Internet Explorer对象您也可以使用LoadFromFile方法将ADO.Stream与本地文件一起使用,并将值存储到本地变量中。我在这里有一个例子,它用于读取使用UTF-8代码页的文件
Dim adoStream As ADODB.Stream
Dim strText As String
Set adoStream = New ADODB.Stream
adoStream.Charset = "UTF-8"
adoStream.Open
adoStream.LoadFromFile "C:\Temp\Datei.txt"
strText = adoStream.ReadText
adoStream.Close
Set adoStream = Nothing
如果文件不是UTF-8文件,那么只需删除带有字符集的行。
之后,您将整个文件内容保存在变量strText中。然后可以使用split()函数通过使用分隔符进行剪切
以下是我获取页面内容的方式:
Dim oRequest As Object
Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
oRequest.Open "GET", "http://www.cboden.de"
oRequest.Send
MsgBox oRequest.ResponseText
这也适用于使用常规CSV文件测试正常的CSV:
Sub Tester()
Dim myURL As String, txt As String, arrLines, arrVals
Dim l As Long, v As Long, WinHttpReq As Object
Dim rngStart As Range
myURL = "http://www.mywebsite.com/file.csv"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send
txt = WinHttpReq.responseText
'might need to adjust vbLf >> vbCrLf or vbCr
' depending on the file origin (Win/Unix/Mac)
arrLines = Split(txt, vbLf)
Set rngStart = ActiveSheet.Range("A1")
For l = 0 To UBound(arrLines)
arrVals = Split(arrLines(l), "[|]")
For v = 0 To UBound(arrVals)
rngStart.Offset(l, v).Value = arrVals(v)
Next v
Next l
End Sub
为什么不能通过指定分隔符将文件导入Excel?从响应中获取响应文本,使用vbCrLf将其拆分为一个行数组,然后在每行上使用
split(lineHere,[|]”)
来获取一个值数组-在工作表上逐行写入这些值。嗨,A.S.H.我也问过自己这个问题,但是Excel在数据文本导入中不允许添加3个字符作为分隔符。蒂姆,你能想出那个解决办法吗?因为我认为这是可行的,假设我可以从站点加载文件,然后将其输入Excel列中。你能查看responseText(例如使用debug.print)吗?它看起来像你期望的吗?嗨,Cboden,这里显示的代码是我使用的,但是如果您从网站获取数据,您不能将ADODB流用作文本,它必须是二进制的。因此,我可以从网站加载文件,并将其存储为文本格式的本地文件,然后将其读出,但这不是我想要的。我想从web加载文件,并在excel工作表的适当列中使用“[|]”分隔符转换数据。谢谢,我明白了。。。问题不在于流。。。这是HTTP请求。为什么不使用WinHttp.WinHttpRequest.5.1而不是XMLHTTP?在答案中添加了一个代码示例。嗨,蒂姆!这段代码真的做到了!!!!我得到了我的数据从网址与代码是!!!!!可悲的是,我没有足够的声誉来发布这个问题的答案!但是这个解决方案一尘不染!!!!谢谢