Excel VBA从具有发布数据的Web服务导入CSV

时间:2014-01-10 09:41:52

标签: excel vba excel-vba csv excel-web-query

我有一个可以生成大量CSV数据的Web服务,我需要将其导入到excel 2013中。

我找到了直截了当的方法:

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & URL, Destination:=Cells(1, 1))
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .WebPreFormattedTextToColumns = True
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    .WorkbookConnection.Delete
End With

但是,我还需要向Web服务发送带有参数的有效负载,以便过滤它返回的数据。

我发现这样做的唯一方法是使用.PostText属性,但这需要连接为“URL;”而不是“TEXT;”因此不允许.TextFileCommaDelimiter属性,这对工作表中的输出至关重要。

有没有一种直接的解决方法 - 即使用帖子数据从Web服务中提取数据,还要确保excel正确解释逗号分隔格式?

2 个答案:

答案 0 :(得分:0)

您是否可以更改网络服务提供的格式?

我已经以HTML格式(<table>...</table>)返回数据,然后执行您需要的操作 - 即使用Connection:"URL"

然后,数据将根据HTML表格标签自动格式化为Excel工作表。

答案 1 :(得分:0)

有类似的问题,并且XML变体花了太长时间在Excel 2007中反序列化(35k行)。

因此,既然它是您的服务,您可以实现POST和GET http选项,然后通过将?param=value添加到网址来编码GET请求的参数,例如:http://yourhost/service.do?AsOfDate=20140903,仍在使用“文本;”在连接中。