Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html VBA:使用<;ul和<;李和<;部门及<;跨度_Html_Excel_Vba_Web Scraping - Fatal编程技术网

Html VBA:使用<;ul和<;李和<;部门及<;跨度

Html VBA:使用<;ul和<;李和<;部门及<;跨度,html,excel,vba,web-scraping,Html,Excel,Vba,Web Scraping,我正在使用VBA从中的HTML中提取数据,您可以获取两个节点列表,一个用于日期,一个用于事项,然后将它们循环到工作表中。基于数据绑定属性值匹配日期事项关于类名: Dim dates As Object, matters As Object, i As Long, ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") Set dates = ie.document.querySelectorAll("[data-bind^='tex

我正在使用VBA从
中的HTML中提取数据,您可以获取两个节点列表,一个用于日期,一个用于事项,然后将它们循环到工作表中。基于
数据绑定
属性值匹配
日期
<代码>事项
关于
类名

Dim dates As Object, matters As Object, i As Long, ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Sheet1")
Set dates = ie.document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
Set matters = ie.document.querySelectorAll(".wo-notes")

With ws

    For i = 0 To dates.Length - 1
        .Cells(i + 1, 1) = dates.Item(i).innertext
        .Cells(i + 1, 2) = matters.Item(i).innertext
    Next

End With

从C列读取值的示例:

Option Explicit

Public Sub GetMatters()
    Dim ws As Worksheet, lastRow As Long, urls(), results(), ie As SHDocVw.InternetExplorer, r As Long

    Set ie = New SHDocVw.InternetExplorer
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    urls = Application.Transpose(ws.Range("C2:C" & lastRow).Value)
    ReDim results(1 To 1000, 1 To 2)

    With ie
        .Visible = True

        For i = LBound(urls) To UBound(urls)
            .navigate2 "https://www.MyURL/sc/wo/Worders/index?id=" & urls(i)
            While .Busy Or .readyState <> 4: DoEvents: Wend

            Dim dates As Object, matters As Object, i As Long

            Set dates = .document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
            Set matters = .document.querySelectorAll(".wo-notes")

            For i = 0 To dates.Length - 1
                r = r + 1
                results(r, 1) = dates.Item(i).innertext
                results(r, 2) = matters.Item(i).innertext
            Next
            Set dates = Nothing: Set matter = dates
        Next
        .Quit
    End With

    ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End Sub
选项显式
公共事务
将ws作为工作表,最后一行作为长,URL(),results(),即作为SHDocVw.InternetExplorer,r作为长
设置ie=New SHDocVw.InternetExplorer
设置ws=ThisWorkbook.Worksheets(“Sheet1”)
lastRow=ws.Cells(ws.Rows.Count,“C”).End(xlUp).Row
URL=Application.Transpose(ws.Range(“C2:C”和lastRow).Value)
重拨结果(1到1000,1到2)
与ie
.Visible=True
对于i=LBound(URL)到UBound(URL)
.导航2“https://www.MyURL/sc/wo/Worders/index?id=“&URL(i)
忙时或准备时状态4:DoEvents:Wend
黯淡的日期作为对象,重要的事情作为对象,我一样长
设置日期=.document.querySelectorAll(“[data bind^='text:createdDate']”)。wo-notes-col-1[data bind^='text:createdDate']
设置事项=.document.queryselectoral(“.wo注释”)
对于i=0到日期。长度-1
r=r+1
结果(r,1)=日期。项目(i)。内部文本
结果(r,2)=事项。第(i)项。内部文本
下一个
设置日期=无:设置事项=日期
下一个
退出
以
ws.Cells(2,1).Resize(UBound(results,1),UBound(results,2))=结果
端接头

参考文献:


  • 谢谢QHarr,你花了一些时间来解决我的问题。你能帮我把代码循环几次吗?你说的循环几次是什么意思?上面写的表是否如预期的那样?意味着我在URL 76888564中提到的数字将改变频率。这意味着我需要使用这个宏处理多个数字(工作顺序)。是否可以循环多个工作单。很抱歉给您带来不便。谢谢这些新结果适用于不同的工单吗?您需要一个类似于如下所示的循环结构:
    Option Explicit
    
    Public Sub GetMatters()
        Dim ws As Worksheet, lastRow As Long, urls(), results(), ie As SHDocVw.InternetExplorer, r As Long
    
        Set ie = New SHDocVw.InternetExplorer
        Set ws = ThisWorkbook.Worksheets("Sheet1")
        lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
        urls = Application.Transpose(ws.Range("C2:C" & lastRow).Value)
        ReDim results(1 To 1000, 1 To 2)
    
        With ie
            .Visible = True
    
            For i = LBound(urls) To UBound(urls)
                .navigate2 "https://www.MyURL/sc/wo/Worders/index?id=" & urls(i)
                While .Busy Or .readyState <> 4: DoEvents: Wend
    
                Dim dates As Object, matters As Object, i As Long
    
                Set dates = .document.querySelectorAll("[data-bind^='text:createdDate']") '.wo-notes-col-1 [data-bind^='text:createdDate']
                Set matters = .document.querySelectorAll(".wo-notes")
    
                For i = 0 To dates.Length - 1
                    r = r + 1
                    results(r, 1) = dates.Item(i).innertext
                    results(r, 2) = matters.Item(i).innertext
                Next
                Set dates = Nothing: Set matter = dates
            Next
            .Quit
        End With
    
        ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
    End Sub