#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