如何使用getElementsByTagName with overflow:隐藏在VBA上?

时间:2016-01-06 23:24:34

标签: html excel vba get element

我正在使用VBA自动化来获取我工作中的票务系统的一些信息。我试图将值输入到生成的表中,但只有最有用的信息才能进入列&#34; A&#34;在表格&#34; Plan1&#34;是<td>,其中包含溢出:隐藏的CSS属性。我不知道它们是否相关,但恰巧是唯一不会出现的数据。有人可以帮帮我吗?

HTML code:

<div id="posicionamentoContent">
  <table class="grid">
  <thead>...</thead>
  <tbody>
     <tr id="937712" class="gridrow">
         <td width="200px"> Leonardo Peixoto </td>
         <td width="200px"> 23/12/2015 09:45 </td>
         <td width="200px"> SIM </td>
         <td width="200px"> Telhado da loja com pontos de vazamento.</td>
         <td width="200px" align="center"></td>
         <td width="200px" align="center"></td>
     </tr>
...
...
...

完整代码:http://i.stack.imgur.com/4BsFo.png

我需要获得前4个<td>文本(Leonardo Peixoto,2015年12月23日09:45,SIM和Telhado da loja com pontos de vazamento。)但它们只是我可以和#39的文本;得到。

Obs:当我使用开发人员工具(f12)检查每个元素时,它完美地向我展示了<td>中我需要的信息。但是当我打开&#34;源代码&#34;页面检查html,代码是这样的:

<div id="tabPosicionamento" style="padding: 5px 0 5px 0;"  class="ui-tabs-hide">
    div id="posicionamentoContent"></div>
</div>

示例VBA:

    Sub extractTablesData1()
     'we define the essential variables

     Dim IE As Object, obj As Object
     Dim ticket As String


     Set IE = CreateObject("InternetExplorer.Application")

     ticket= InputBox("Enter the ticket code")

    With IE

     .Visible = False
     .navigate ("https://www.example.com/details/") & ticket


     While IE.ReadyState <> 4
     DoEvents
     Wend

    ThisWorkbook.Sheets("Plan1").Range("A1:K500").ClearContents

    Set data = IE.document.getElementsByClassName("thead")(0).getElementsByTagName("td")

            i = 0
            For Each elemCollection In data
            ThisWorkbook.Sheets("Plan1").Range("A" & i + 1) = data(i).innerText
            i = i + 1

            Next elemCollection

End With

IE.Quit
Set IE = Nothing

....

....

End Sub

此功能在&#34; A&#34; Plan1 <td class=info3"></td><td class=info4"></td>中返回,但我需要{{ 1}}和<td class=info1"></td>

3 个答案:

答案 0 :(得分:1)

由于代理阻止我,我无法读取页面代码,但我前一段时间遇到了类似的问题,我发现的解决方案是将所有数据放在剪贴板上并粘贴。之后,我清理工作表上的数据。

这里我用过的代码:

Set ieTable = ie.document.getElementById("ID")
            If Not ieTable Is Nothing Then
                Set clip = New DataObject
                clip.SetText "<html>" & ieTable.outerHTML & "</html>"
                clip.PutInClipboard
                Sheet1.Range("A1").Select
                ActiveSheet.PasteSpecial Format:="Unicode Text", link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
            End If

考虑到您需要隔离4 td行,您可以使用循环进行每次搜索。

答案 1 :(得分:0)

在您的示例中,它会对数据进行计算,但不会使用它。此外,单元格分配应该是单元格(x,y).value。这是工作代码。

Sub extractTablesData1()
    'we define the essential variables

    Dim IE As Object, Data As Object
    Dim ticket As String


    Set IE = CreateObject("InternetExplorer.Application")

    With IE
        .Visible = False
        .navigate ("put your data url here")


        While IE.ReadyState <> 4
            DoEvents
        Wend

        Set Data = IE.document.getElementsByTagName("tr")(0).getElementsByTagName("td")

        i = 1
        For Each elemCollection In Data
            ActiveWorkbook.Sheets(1).Cells(1, i).Value = elemCollection.innerHTML
            i = i + 1
        Next elemCollection

    End With

    IE.Quit
    Set IE = Nothing
End Sub

答案 2 :(得分:0)

它没有提供我需要的信息(持续<td>

<div id="posicionamentoContent">
  <table class="grid">
  <thead>...</thead>
  <tbody>
     <tr id="937712" class="gridrow">
         <td width="200px"> Leonardo Peixoto </td>
         <td width="200px"> 23/12/2015 09:45 </td>
         <td width="200px"> SIM </td>
         <td width="200px"> Telhado da loja com pontos de vazamento.</td>
         <td width="200px" align="center"></td>
         <td width="200px" align="center"></td>
     </tr>