Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ADODB二进制流转换为字符串vba_Vba_File_Csv_Download_Delimited Text - Fatal编程技术网

将ADODB二进制流转换为字符串vba

将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

我有以下问题: 我有一个存储在服务器上的CSV文件,但它有3个字符作为分隔符:“[|]”。我想从URL加载数据,并使用[|]作为分隔符在Excel页面的列中填充数据。到目前为止,我找到了使用ADODB记录集从网站加载该文件的代码,但我无法获得更多:

 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?在答案中添加了一个代码示例。嗨,蒂姆!这段代码真的做到了!!!!我得到了我的数据从网址与代码是!!!!!可悲的是,我没有足够的声誉来发布这个问题的答案!但是这个解决方案一尘不染!!!!谢谢