2011-12-06 64 views
2

我使用MSXML看到的大多數示例都必須使用Javascript或JQuery,但我正在編寫一個不使用的Excel 2010宏。如何從VBA/Excel中的MSXML.ResponseText中讀取CRLF分隔的行

我的目標是下載一個文件(如下所示),並解析一箇中等大小(5到15MB)的CSV文件。我最終想要將CSV數據保存在隱藏的數據選項卡中。

我對這個CSV VBA sample here做了一點點改進,但​​是我不知道如何將MSXML.ResponstText的輸出粘貼到那個示例上。

這裏是我的VBA /宏代碼

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) 

我如何練成與responseText的工作,一次只讀取一行?

+0

你試過斯普利特(objHttp.ResponseText,vbCrLf)? – JimmyPena

+0

ps-你是下載一個文件還是閱讀一個web響應? – JimmyPena

+0

@JP我正在下載一個CSV文件[與此類似](http://nfp.blob.core.windows.net/exchange/DatabaseWeeklyStats.csv?se=2011-12-12T05%3A50%3A27Z&sr=b&si = readonly&sig = pk2CqlboFdSYQApAQiKOC9%2Bpds5qqRjo2JRCQJi%2Fdbg%3D) - 儘管請原諒/不準確的數據 – LamonteCristo

回答

1

我說,不要混爲一談。首先下載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 
+0

+1您還可以包含使用URLDownloadToFile API獲取CSV文件的代碼,這將使此答案完成。 – JimmyPena

1
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腳本運行時

+0

這有幫助,但它使用ServerXMLHTTP.ResponseText或URL作爲OpenTextFile的參數嗎?我想我明天會嘗試。 – LamonteCristo

+1

'opener' ?! 'fContainer'?奇怪的變量命名!不過,+1 –

相關問題