【问题标题】:Excel VBA importing CSV from a web service with post dataExcel VBA 从带有发布数据的 Web 服务导入 CSV
【发布时间】:2014-01-10 09:41:52
【问题描述】:

我有一个生成大量 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;”而不是“文本;”因此不允许 .TextFileCommaDelimiter 属性,该属性对工作表中的输出至关重要。

是否有一种直接的方法来解决这个问题 - 即从 Web 服务中提取数据,使用发布数据,同时确保 excel 正确解释逗号分隔格式?

【问题讨论】:

  • 你能分享网络服务链接吗?
  • 我不能,我害怕。它在专用网络上。
  • 如果您将 Web 服务设为 GET 而不是 POST,那么您可以通过 URL 传递参数。顺便说一句,谢谢你的提示。

标签: vba excel csv excel-web-query


【解决方案1】:

你能改变网络服务提供的格式吗?

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

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

【讨论】:

  • 我能够更改格式。实际上发现将源更改为制表符分隔而不是逗号分隔意味着它会自动以正确的格式出现。你不能用逗号来做这件事似乎仍然很奇怪,但这种方法解决了我的问题。
【解决方案2】:

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

因此,既然它是您的服务,您可以同时实现 POST 和 GET http 选项,然后通过将 ?param=value 添加到 url 来对 GET 请求的参数进行编码,例如:http://yourhost/service.do?AsOfDate=20140903,仍然使用“TEXT;”有联系。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2016-06-08
    • 2017-07-07
    • 2019-02-28
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多