Как прочитать строки с разделителями CRLF из MSXML.ResponseText в VBA / Excel - PullRequest
2 голосов
/ 06 декабря 2011

Большинство примеров, которые я вижу с MSXML, связаны с Javascript или JQuery, но я пишу макрос Excel 2010, который тоже не использует.

Моя цель - загрузить файл (как показано ниже) и проанализировать CSV-файл среднего размера (от 5 до 15 МБ). В конечном итоге я хочу сохранить данные CSV на скрытой вкладке данных.

Я немного продвинулся в этом образце CSV VBA здесь , но я не знаю, как склеить вывод MSXML.ResponstText с этим образцом.

Вот мой код VBA / Macro

Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
'objHttp.SetRequestHeader "Content-Type", "text/csv"
'objHttp.SetRequestHeader "charset", "gb2312"
Call objHttp.Open("GET", fileURL, False)
Call objHttp.Send("")
'Call MsgBox(objHttp.ResponseText)

Как заставить Excel работать с ResponseText и читать только одну строку за раз?

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Я говорю, не путайте вещи. Сначала загрузите файл CSV, затем прочитайте его.

Из твоего вопроса не очевидно, какова твоя цель. Если вы хотите проанализировать файл, то вы можете читать и анализировать его построчно, как это, используя собственные операторы VBA:

Dim filePath As String
Dim fn As Integer
Dim myLine As String
Dim myParsedLine() As String

filePath = "C:\DatabaseWeeklyStats.csv"

fn = FreeFile()
Open filePath For Input As #fn
Do Until EOF(fn)
    Line Input #fn, myLine
    myParsedLine = Split(myLine, ",")
    ' Line is now parsed. Do stuff.
Loop

Если вы просто хотите вставить весь файл CSV в новый лист в своей книге, не обязательно предварительно его «разбирая» (т.е. интерпретируя его содержимое), то вы можете сделать это:

Dim dbSheet As Worksheet
Dim targetSheet As Worksheet

Workbooks.Open Filename:="C:\DatabaseWeeklyStats.csv", _
    Format:=2 ' use comma delimiters
Set dbSheet = ActiveSheet

Set targetSheet = Workbooks("Book1").Sheets(3) ' wherever you want to move it to

dbSheet.Move After:=targetSheet
' dbSheet is now in your workbook.

' Hide it.
Set dbSheet = ActiveSheet
dbSheet.Visible = xlSheetHidden
1 голос
/ 06 декабря 2011
Dim opener As New FileSystemObject
Dim fContainer

Set fContainer = opener.OpenTextFile("c:\DatabaseWeeklyStats.csv")

Do Until fContainer.AtEndOfStream
    sText = fContainer.ReadLine
    Debug.Print sText
Loop

'Для этого требуется ссылка на Microsoft Scripting Runtime

...