3

为了从 Excel 中的 web 服务获取数据,我创建了一个 excel 插件提供函数来获取它;用户只需要输入单元格: =sendRequest("http://webservice.com")

我有 2 个 excel 文件来演示sending request两种方法:1.同步和 2.异步

sync方法中,该函数可以正常发送请求和获取数据。但是,如果我们有 100、200 个单元格调用它,Excel 将花费大量时间等待;这也使得 Exel没有响应

我目前的解决方案是使用如下代码async的方法

Public Function sendAsyncRequest(URL)
    'other statement

    ' Get some stuff asynchronously.
    xmlHttpRequest.Open "GET", URL, True
    xmlHttpRequest.send
    sendAsyncRequest = xmlHttpRequest.responseText
End Function

但单元格的值始终为零 0 而不是响应文本。

我必须使用我的处理程序类将其与OnReadyStateChangeof绑定,xmlHttpRequest object以将响应文本设置到单元格中。但是,它也会清除单元格的公式。

所以我的问题是如何在不更改其公式的情况下更改单元格的显示文本?

我也欢迎另一种发送请求并在async方法下获取返回值的解决方案。

4

2 回答 2

1

这是我针对您的问题的解决方案文件;确实它是从您的异步测试文件中更新的。

基于讨论,您可以change the display text of cell without changing its formula使用 Range(yourCellAddress).NumberFormat = "0;0;0;""要显示的值"""

所以对于你的问题,解决方案是

  1. 在您的sendAsyncRequest函数中将返回行替换为

    sendAsyncRequest = "anything other than numbers"

  2. 在你的ReadyStateChangeHandler潜艇,更换

    Application.Range(cellAddress).Value = XMLHttpReq.responseText 'return responseText to cell

经过

cellDisplayText = XMLHttpReq.responseText
Range(cellAddress).NumberFormat = "0;0;0;""" & cellDisplayText & """"
于 2012-07-11T14:13:39.887 回答
1

As the downside of the solution stated here, the proper way to get the async return value for the function is to 1) cache your request's url => returned value to a collection/dictionary, and then 2) refresh your formula

于 2012-07-15T11:38:05.180 回答