2

我看到的大多数使用 MSXML 的示例都必须使用 Javascript 或 JQuery,但我正在编写一个不使用任何一个的 Excel 2010 宏。

我的目标是下载一个文件(如下所示),并解析一个中等大小(5 到 15MB)的 CSV 文件。我最终想将 CSV 数据保存在隐藏的数据选项卡中。

我在此处使用此 CSV VBA 示例取得了一些进展,但我不知道如何将 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)

如何让 excel 使用 ResponseText 并且一次只读取一行?

4

2 回答 2

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 Scripting Runtime

于 2011-12-06T04:37:40.477 回答
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
于 2011-12-06T08:42:35.410 回答