查询完成后,如何从Excel Web查询中后处理数据?
作为一个电子表格开发人员,我试图将两套行集合在一起:一个从Web查询到我自己的Web服务,另一个是电子表格用户(而不是我)添加的一组手动行。
Excel内置的Web Query / Connections对象只提供两种模式:我可以打开“启用后台刷新”,使Web查询asynchronous,或取消选中。
如果未选中,则在执行查询时Excel会冻结,这是不可取的。 通过检查,似乎没有任何callback或事件挂钩可用于通知,以便我可以针对刷新的Web数据进行操作。
有没有另外一种方法来做到这一点?
Excel Web查询利用称为QueryTable的对象来执行检索和显示数据的业务。
一个QueryTable可以被VBA访问。
就像图表对象一样,查询表对象的事件只能通过使用来自类模块的WithEvents
关键字来响应,如下所示:
Private WithEvents MyQueryTable As QueryTable Private Sub MyQueryTable_AfterRefresh(ByVal Success As Boolean) 'Do your post processing here... End Sub
Excel支持通过Workbooks.Open方法将URL作为另一个Excel工作簿打开的function:
来自MSDN:
Sub OpenUSDRatesPage() Dim objBK As Workbook Dim objRng As Range 'Open the page as a workbook. Set objBK = Workbooks.Open("http://www.x-rates.com/tables/USD.HTML") 'Find the Canadian Dollar cell. Set objRng = objBK.Worksheets(1).Cells.Find("Canadian Dollar") 'Retrieve the exchange rate. MsgBox "The CAD/USD exchange rate is " & objRng.Offset(-6, -1).Value End Sub
该调用是同步的,因此您可以在Open调用之后立即对新工作簿中的结果数据进行操作。
在加载工作簿时,Excel将显示一个进度条。 完成后,可以调用。closuresWeb数据工作簿。 (例如,对于MSDN示例,当您完成时,您会调用objBK.Close
。)
使用这种方法的警告:
- 不像可刷新的具有设置目标的Excel Web查询,您可以自己将数据从Web工作簿迁移到自己的(
ThisWorkbook
)。 - 如果您的Web端点具有与在Excel中打开的文档的名称相匹配的文档名称,则用户将看到一个警告,即具有相同名称的文档已打开。