Найти номер таблицы на html-странице, используя vba - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь открыть сайт IE (связанный с информацией о билете клиента) с помощью макроса. Мне нужно идентифицировать одну HTML-таблицу на веб-странице и скопировать ее содержимое в Excel через буфер обмена. Но для каждого полученного билета номер таблицы меняется. Для первого билета он прошел успешно, но для второго билета номер таблицы изменился. Как я могу получить номер таблицы HTML для каждого тикета, так как это переменная. Я пытаюсь использовать приведенный ниже код. Пожалуйста, дайте мне знать, если я что-то упускаю или мне нужно поделиться некоторыми подробностями. Я только изучаю VBA, поэтому, пожалуйста, не стесняйтесь указывать на любые ошибки.

sub sample()

Dim XMLHTTP As Object, html As Object
Dim Clipboard As Object
Dim Tabl_name As IHTMLElement

last_lin1st = Worksheets("sheet1").Columns(2).Find("Sum").Row
val_nci = Worksheets("sheet1").Range("B" & i).Value

With ThisWorkbook
    .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "temp"
End With

Set ie = Nothing
Set IeDoc = Nothing
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
strHTML = "webURL"

ie.navigate strHTML

Set IeDoc = ie.document
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")

msg = ie.document.Body.innerhtml

Set Clipboard = New MSForms.DataObject

Clipboard.SetText ie.document.getElementsByTagName("Table")(32).outerHTML
Clipboard.PutInClipboard

Worksheets("temp").Cells(1, 1).PasteSpecial

End Sub

Номер таблицы для первого билета - 32, что работает нормально. Но для следующего билета это 28. И отличается для остальных билетов. Поэтому я застрял в поиске номера таблицы, так как мне нужно скопировать эту таблицу и вставить ее в лист Excel для каждого билета.

PS: Если вы отрицаете вопрос, попросите вас указать причину, добавив комментарий. Иначе, я не смогу изменить вопрос, или я не узнаю, где проблема с моим вопросом. Заранее спасибо за вашу поддержку.

Ниже приведен пример HTML-кода страницы. Дайте мне знать, какое имя таблицы я должен ввести в getElementsbyTagName:

  <div class="issuePanelContainer" id="issue_actions_container">

  <table width="100%">
  <tr>
    <td bgcolor="#f0f0f0" width=34%><b>Transition</b></td>
    <td bgcolor="#f0f0f0" width=15%><b>Status Change Time</b></td>
    <td bgcolor="#f0f0f0" width=15% align=center><b>Execution Times</b></td>
    <td bgcolor="#f0f0f0" width=18%><b>Last Executer</b></td>
    <td bgcolor="#f0f0f0" width=18%><b>Last Execution Date</b></td>
  </tr>
  <tr>
<td bgcolor="#ffffff" width=34% valign=top>
<table width="100%">
<tr>
<td width=7% valign=center>                                           
    <img src="/images/icons/status_generic.gif" height="16" width="16" alt="New" title="New - The issue is created" />                        </td>
    <td width=40% valign=top>
        New
    </td>
    <td align="center" nowrap="nowrap" width=6% valign=top>
    <img src="/images/icons/arrow_right_small.gif" align="absmiddle" border="0" height="16" width="16">
    </td>
        <td width=7% valign=center>         
        <img src="/images/icons/status_open.gif" height="16" width="16" alt="Opened" title="Opened - The issue is open and ready for the assignee to start work on it." />
    </td>
    <td width=40% valign=top>
     Opened
     </td>
         </tr>
         </table>
         </td>
         <td bgcolor="#ffffff" width=15% valign=top align=right>
         <table width="100%">
     <tr>
     <td valign=top

         2d 20h 
         </td>
         </tr>
         </table>
         </td>
         <td bgcolor="#ffffff" width=15% valign=top align=center>
     <table width="100%">
     <tr>
     <td valign=top align="center">
      1
     </td>
     </tr>
     </table>
     </td>
     <td bgcolor="#ffffff" width=18% valign=top>
         <table width="100%">
     <tr>
     <td valign=top>
     <a id="email_470121" href="/secure/ViewProfile.jspa?name=123456">username</a>
         </td>
     </tr>
         </table>             
         </td>
     </td>
     <td bgcolor="#ffffff" width=18% valign=top align=right>
         <table width="100%">
     <tr>
     <td valign=top align=right>
         26/11/2017 12:47 PM
         </td>
         </tr>
         </table>
         </td>
         </tr>

1 Ответ

0 голосов
/ 27 апреля 2018

Вы должны просмотреть все таблицы, чтобы найти информацию, которую вы ищете.

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

Вот как вы это просматриваете.

Dim foundData as Boolean
Set tables = ie.document.getElementsByTagName("Table")
For x = 0 to tables.Length Step 1
    'You may need to use innerText or inner/outerHTML to find the text
    If tables(x).innerText Like "*TEXT IN TABLE*" Then
        'Table found, Copy the Data
        Set Clipboard = New MSForms.DataObject
        Clipboard.SetText tables(x).outerHTML
        Clipboard.PutInClipboard
        Worksheets("temp").Cells(1, 1).PasteSpecial
        foundData = True
        Exit For 'Exit Loop since the data was found
    End If
Next x
'Check if data was found after leaving the loop
If foundData <> True Then
    MsgBox "The Data Was Not Found on Any Tables"
End If

Я отредактировал код, чтобы добавить строки копирования, если таблица найдена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...