Извлеките определенные данные из одного и того же класса таблиц на веб-странице на основе Java с помощью Excel VBA

#excel #vba

Вопрос:

На веб — сайте есть таблица и код, как показано ниже.

 lt;div id="InnerContent" style="height: 668px; position: relative; overflow: auto;"gt; lt;table class="Template" width="100%"gt;  lt;tbodygt;lt;tr class="Template"gt;  lt;td class="View"gt;  lt;table class="View" width="100%"gt;  lt;tbodygt;lt;tr class="View"gt;  lt;td class="View"gt; lt;pgt;there are some wording.lt;/pgt;  lt;div class="block-indent"gt;  lt;table class="Main"gt;  lt;tbodygt;lt;tr class="Main"gt;  lt;td class="Literal"gt;lt;a href="/default.aspx?Guid=asda334amp;amp;MenuId=amp;amp;Action=editamp;amp;Reference=saada"gt;1234567lt;/agt;lt;/tdgt;  lt;td class="Literal"gt;lt;bgt;Amendedlt;/bgt;lt;/tdgt;  lt;td class="Literal"gt;(aadasda) Total : 2232lt;brgt;lt;/tdgt;  lt;/trgt;  lt;tr class="Main"gt;  lt;td class="Literal"gt;lt;a href="/default.aspx?Guid=sdfs2323amp;amp;MenuId=amp;amp;Action=Editamp;amp;Reference=edasd"gt;123123lt;/agt;lt;/tdgt;  lt;td class="Literal"gt;lt;bgt;Amendedlt;/bgt;lt;/tdgt;  lt;td class="Literal"gt;(adasda) Total : 123lt;brgt;lt;/tdgt;  lt;/trgt;  lt;tr class="Main"gt;  lt;td class="Literal"gt;lt;a href="/default.aspx?Guid=12321asadaamp;amp;MenuId=amp;amp;Action=Editamp;amp;Reference=assada"gt;97897lt;/agt;lt;/tdgt;  lt;td class="Literal"gt;lt;bgt;Amendedlt;/bgt;lt;/tdgt;  lt;td class="Literal"gt;(bdfgbgf) Total : 999lt;brgt;lt;/tdgt;  lt;/trgt;  lt;/tbodygt;lt;/tablegt;  lt;/divgt; lt;table class="Main"gt;  lt;tbodygt;lt;tr class="Main"gt;  lt;td class="Literal" nowrap=""gt;abc:lt;/tdgt;  lt;td class="Field" title=""gt;lt;span class="String"gt;030lt;/spangt;lt;/tdgt;  lt;td class="Literal"gt;amp;nbsp;amp;nbsp;amp;nbsp;lt;/tdgt;  lt;td class="Literal" nowrap=""gt;cde:lt;/tdgt;  lt;td class="Field" title=""gt;lt;span class="String"gt;1234567890lt;/spangt;lt;/tdgt;  lt;/trgt;   lt;tr class="Main"gt;  lt;td class="Literal" nowrap=""gt;Version:lt;/tdgt;  lt;td class="Field" title="older Version': 02"gt;lt;span class="Changed String"gt;03lt;/spangt;lt;/tdgt;  lt;td class="Literal"gt;lt;/tdgt; lt;td class="Literal" nowrap=""gt;Last Amended:lt;/tdgt;  lt;td class="Field" title="'Last Amended': 13 Sep 21"gt;lt;span class="Changed Date"gt;15 Sep 21lt;/spangt;lt;/tdgt;  lt;td class="Literal"gt;amp;nbsp;amp;nbsp;amp;nbsp;lt;/tdgt;  lt;td class="Literal" nowrap=""gt;Revised:lt;/tdgt;  lt;td class="Field" title=""gt;lt;span class="String"gt;amp;nbsp;lt;/spangt;lt;/tdgt;  lt;/trgt;   lt;tr class="Main"gt;   lt;td class="Literal" nowrap=""gt;Order:lt;/tdgt;  lt;td class="Field" title=""gt;lt;span class="String"gt;A (Amended)lt;/spangt;lt;/tdgt;  lt;td class="Literal"gt;lt;/tdgt;  lt;td class="Literal" nowrap=""gt;Order2:lt;/tdgt;  lt;td class="Field" title=""gt;lt;span class="String"gt;W (Order)lt;/spangt;lt;/tdgt;  lt;/trgt;   

Раньше я получал данные с веб-сайта с использованием кода ниже, прежде чем применялся раздел «блок-отступ».

 Sheets("Sheetname").Range("E5") = ie.document.getElementById("InnerContent").getElementsByClassName("Template")(0).getElementsByClassName("View")(0).getElementsByClassName("Main")(2).getElementsByClassName("Field")(0).innerText  

результат был 02, как связанный с «Версией», потому что это был второй результат основной таблицы. после добавления раздела «блок-отступ» в код сайта количество основной таблицы больше не является постоянным. это означает, что версия может быть помещена в 5-ю основную, если у блока-отступа 3 основных таблицы или может быть на 6-м месте в блоке-отступе 4 основных таблицы.

Я пытался получить всю таблицу, но всегда могу получить только данные в разделе «отступ блока». Итак, как я получаю данные для «версии»?

Комментарии:

1. Это помогло бы показать ожидаемый результат.

Ответ №1:

Пройдите по таблицам, чтобы найти ту, которую вы хотите.

 Option Explicit  Sub demo()   Dim oDom As Object:  Set oDom = CreateObject("HtmlFile")    ' read html from file for testing  Dim fso As Object, ts As Object  Set fso = CreateObject("Scripting.FileSystemObject")  Set ts = fso.opentextfile("table.html")  oDom.body.innerHTML = ts.readall  ts.Close    '  Dim tbl As HTMLTable, r As HTMLTableRow  For Each tbl In oDom.getElementsByTagName("table")  For Each r In tbl.Rows  If r.Cells(0).innerText = "Version:" Then  Debug.Print r.Cells(1).innerText  End If  If r.Cells(0).innerText = "abc:" Then  Debug.Print r.Cells(4).innerText  End If  Next  Next End Sub  

Комментарии:

1. ошибка получения в файле opentextfile(«table.html») сырой. как файл не найден, когда я внедряю его в свой код.

2. @SelpaqM Я скопировал ваш html в текстовый файл с именем table.html в том же каталоге, что и ваша рабочая книга. Я предполагаю, что вы получаете html-код с веб-сайта.

3. да, вы правы, я получаю его, но как только я попробовал, в тот раз это не удалось. поэтому я не мог понять, когда увидел html-таблицу. вот почему я попробовал это сделать. где я могу использовать ссылку на страницу, чтобы решить эту проблему.

4. @SelpaqM Замените oDom на oDom.getElementsByTagName("table") свой ie.document

5. @selpaqM If r.Cells(0).innerText = "abc:" Then Debug.Print r.Cells(4).innerText