【问题标题】:Using Excel VBA to import website table created by JavaScript使用 Excel VBA 导入 JavaScript 创建的网站表
【发布时间】:2013-10-08 22:42:36
【问题描述】:

我正在尝试使用 Excel VBA 从网站中提取表格,但该表格是使用 JavaScript 创建的,我真的不知道该怎么做。

一般情况下,我会像这样提取一个表格:

Dim Document As Object
Dim StatementTable As HTMLTable

Set Document = CreateObject("HTMLFile")

With CreateObject("msxml2.xmlhttp")
    .Open "GET", Url, False
    .send
    Do: DoEvents: Loop Until .readyState = 4
    Document.body.innerHTML = .responseText
    .abort
End With

Set StatementTable = Document.getElementById("TableID")

With StatementTable
    For r = 0 To .Rows.Length - 1
        For c = 0 To .Rows(r).Cells.Length - 1

            Sheets(Destination).Cells(r + 1, c + 1).Value = .Rows(r).Cells(c).innerText
        Next c
    Next r
End With

我尝试在此链接上做类似的事情:

http://financials.morningstar.com/income-statement/is.html?t=JPM&region=USA&culture=en-US

但是,正如我所说,该表是使用 JavaScript 创建的,而不是 HTML 文件中的本机。

我浏览了源代码,似乎创建表格的 JavaScript 在 HTML 文件的第 238-242 行执行:

<script type="text/javascript">
    var print4com = false
    SRT_stocFund.LoadAComponent("sfcontent", "JPM", "is", "en-US","USA", "", "usa", null,{showSubTab: false}, {refresh:"", urlAppendix:"&t=XNYS:JPM&region=usa&culture=en-US&cur=USD"});
    var ops = "";
</script>

不过,我只是不知道如何将其加载到 VBA 并将其导入 Excel。

另外,如果可能的话,我想避免使用 Internet Explorer。

感谢您提供的任何帮助。

-瑞恩

【问题讨论】:

  • 您想避免使用 IE,但您完全可以使用 Excel 和 VBA?
  • 您需要执行脚本来创建表格,因此您需要自动化 IE 或寻找其他方法来实现相同的结果。
  • 忘记屏幕上显示的内容并弄清楚 JavaScript 从哪里提取数据并直接使用它可能更合理。或者只是向该站点询问该死的 API - 如果没有 API,它可能不希望您提取它的数据。
  • 能否请您提供要提取数据的表的ID或名称。

标签: excel vba import vbscript integration


【解决方案1】:

VBScript 和 JScript 共享全局命名空间,所以这样的事情应该可以工作:

<script type="text/javascript">
    var print4com = false
    js_data = SRT_stocFund.LoadAComponent("sfcontent", "JPM", "is", "en-US","USA", "", "usa", null,{showSubTab: false}, {refresh:"", urlAppendix:"&t=XNYS:JPM&region=usa&culture=en-US&cur=USD"});
    var ops = "";
</script>

<script type="text/vbscript">
  Dim vb_data = js_data
</script>

详细介绍了从 VBScript 导入 Excel elsewhere。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多