2013-10-08 2 views
0

Я пытаюсь извлечь таблицу с веб-сайта с помощью Excel VBA, но таблица создается с использованием JavaScript, и я действительно не знаю, как это сделать.Использование 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, который создает таблицу выполняется в строках 238-242 в HTML файл:

<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, если это возможно.

Спасибо за любую помощь, которую вы можете предоставить.

-Ryan

+1

Вы хотите избежать IE, но вы отлично разбираетесь в Excel и VBA? –

+1

Вам необходимо выполнить скрипты для создания таблицы, поэтому вам понадобится автоматизировать IE или найти другой способ добиться того же результата. –

+2

Возможно, было бы разумнее забыть, что отображается на экране, и выяснить, откуда этот JavaScript вытаскивает данные, и использовать их напрямую. Или просто попросите сайт проклятый API - если нет API, он, вероятно, не хочет, чтобы вы потянули его данные в любом случае. –

ответ

0

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.

Смежные вопросы