2015-11-22 5 views
3

У меня проблема: У меня есть файл CSV, который хранится на сервере, но имеет 3 символа в качестве разделителей: «[|]». Я хотел бы загрузить данные из URL-адреса и заполнить данные в столбцах моей страницы Excel, используя разделитель [|] в качестве разделителя. До сих пор я не нашел код для загрузки файла с веб-сайта с использованием записей ADODB, но я не могу дальше:преобразовать двоичный поток ADODB в строку vba

myURL = "http://www.mywebsite.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

+0

Почему вы не можете импортировать файл в Excel с указанием разделителей? –

+0

Получите ответText из ответа, разделите его на массив строк, используя vbCrLf, затем используйте 'Split (lineHere," [|] ")' в каждой строке, чтобы получить массив значений, - записывайте каждый из этих строк по строке на листе. –

+0

Hi A.S.H. Этот вопрос я тоже задавал себе вопрос, но Excel в результате импорта данных не позволяет добавить 3 символа в качестве разделителя. Тим, не могли бы вы решить эту проблему? Потому что я думаю, что это то, что может работать, если я могу загрузить файл с сайта и затем ввести его в столбцы Excel. – g00golplex

ответ

4

Испытано OK с обычным 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 
+0

Привет Тим! Этот код действительно сделал это !!!! Я получил свои данные из URL с кодом, как есть !!!!! К сожалению, у меня недостаточно репутации, чтобы опубликовать этот вопрос как ответ! Но это решение работает безупречно !!!! THANKS – g00golplex

+0

Вам не нужна репутация, чтобы принять ответ. –

1

вы можете использовать ADO.Stream также с локальными файлами с помощью метода LoadFromFile и сохранить значение в локальной переменной. У меня есть пример, где это используется для чтения файла, использующего кодовую страницу 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, то просто удалите строку с помощью Charset. После этого вы получаете весь файл в переменной 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

+0

Привет, Cboden. Код, который вы показываете здесь, я использую, но если вы получаете данные с сайта, вы не можете использовать поток ADODB в качестве текста, он должен быть двоичным. Поэтому я могу загрузить файл с веб-сайта и сохранить его в виде локального файла в текстовом формате и прочитать это, но это не то, что я хочу. Я хочу загрузить файл из Интернета и преобразовать данные с помощью разделителя «[|]» в соответствующие столбцы листа excel. thankx – g00golplex

+1

a Я вижу ... проблема не в потоке ... это HTTP-запрос. Почему бы не использовать WinHttp.WinHttpRequest.5.1 вместо XMLHTTP? Добавили в ответ образец кода. – cboden

Смежные вопросы