【问题标题】:Pulling value from table on website using VBA without any Names/IDs使用没有任何名称/ID 的 VBA 从网站上的表中提取值
【发布时间】:2021-02-28 08:43:00
【问题描述】:

我正在使用 VBA 尝试从县评估员的网站检索数据。我在其他部分使用过 getElementByName/ID 等,但似乎没有标识符,数据只是在普通网格中。有没有办法用不同的方法检索这些数据?这个网页还有好几个格子,感觉好难找。

这是 HTML 源代码:

<div class="grid">
<table class="colborder w95">
<caption>Current Values</caption>
<thead><tr class="allborder"><th class="toleft">Type</th><th class="toleft">Class</th><th class="toright">Kind</th><th class="number">Land</th><th class="number">Bldg</th>
<th class="number">Total</th></tr>
</thead>
<tbody>
<tr class=" ">
<td class="tobottom toleft " >2020&#160;Value</td>
<td class="tobottom toleft rowborder" >Residential</td>
<td class="toright rowborder">Full</td>
<td class="number rowborder">$73,600</td>
<td class="number rowborder">$225,300</td>
<td class="number rowborder">$298,900</td></tr>

我试图提取的数字是表格的右下角,在本例中为 298,900 美元。我能想到的唯一能区分这部分的是“当前值”,它是网格的标题。我将如何使用此标题来定位表格并从右下角提取值?

任何帮助将不胜感激!

乔尔

【问题讨论】:

    标签: html excel vba internet-explorer html-table


    【解决方案1】:

    以下是从 HTML 表格中获取特定单元格数据的替代方法。

    如果元素不包含 ID、名称或任何其他属性,您可以尝试通过 TagName 访问该元素。

    然后您可以使用其索引键值引用特定元素。注意索引键是从0开始的。

    示例代码:

    Sub demo()
     Dim IE
     Dim ro As Integer
        Set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = True
        IE.navigate "https://Your_site_address_will_be_here"
    
        Do While IE.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop
              
        Set Table = IE.document.getElementsByTagName("table")
        Set tRows = Table(0).getElementsByTagName("tr")
                   
         ro = 1
         For Each r In tRows
              Set tcells = r.getElementsByTagName("td")
                For Each c In tcells
                    If ro = 6 Then
                    Debug.Print (c.innerText)
                    ro = 0
                    End If
                    ro = ro + 1
                Next
         Next
             
    End Sub
    

    输出:

    此外,您可以根据自己的要求修改代码示例。

    【讨论】:

    • 对 OT Deepak-MSFT 感到抱歉,但您能告诉我您使用哪个程序创建动画 GIF 以供您解释吗?
    • 您可以通过在搜索引擎中搜索screen recorder gif maker轻松找到所需的应用程序。让我们知道上述代码是否适合您。
    • 谢谢。我总是在谷歌上搜索屏幕录像机并获得录制 mp4 的工具。然后我向你要动画 GIF,你告诉我向谷歌要动画 GIF。有时我的大脑对我自己来说是个谜。
    • 代码对我有用。但是,我已经完成了变量声明,不得不通过 GUID Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") 初始化 IE 但这有 HTML 文件的本地调用的原因。在提供的 HTML 中,我还关闭了打开的标签。由于 Joel Unick 还想从其他表中获取数据,我不确定这种解释是否足以满足他的要求。但是对于更详细的答案,HTML sn-p 太小了。
    • @Zwenn,对不起。我以为你是操作者,我与你确认解决方案。
    【解决方案2】:

    这样的东西有点笨拙,但对我有用:

    Dim doc As New HTMLDocument, tbls As Object, tbl As Object
    
    doc.body.innerHTML = Range("A2").Value 'your sample HTML with closing </table></div>...
    
    Set tbls = doc.getElementsByTagName("table")
    For Each tbl In tbls
        If tbl.Caption.innerHTML = "Current Values" Then
            Debug.Print tbl.Rows(1).Cells(5).innerText
            Exit For
        End If
    Next tbl
    

    【讨论】:

    • 感谢您的帮助!我最终遇到了运行时错误,但我保证这是我的目标。当涉及到这些东西时,我是个新手。我让它与 Deepak 的方法一起使用。
    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2021-10-29
    • 2020-05-11
    • 2016-09-13
    相关资源
    最近更新 更多