0

我正在创建一个 Excel 数据库。我想从公司网站导入公司所有员工的姓名、电子邮件和职位。我选择 Data->From Web 并选择整个页面,因为这是唯一的可能性。

该页面没有显示包含数据的表格;只是一长串员工的照片,旁边有姓名、电子邮件和工作职位

我将数据导入我的 Excel 电子表格:格式非常糟糕。所以我开始剪切和粘贴,为“名称”创建一个列,一个为“电子邮件”,同样为“工作职位”。所有其他信息都被手动取消。

我想刷新保持这种新格式的数据。不幸的是,每次我使用“全部刷新”按钮刷新导入的数据时,它们都会返回到原始格式。

刷新后如何保持我的网络导入数据的新格式?

我感谢大家的支持!

氪,一

4

1 回答 1

2

我已经整理了一个示例,该示例将从您指定的页面中提取名称和标题,并将它们放入工作表 1。

代码只有在底层 html 的布局保持不变的情况下才能工作。它不支持更新现有列表(在再次阅读列表之前删除了工作表 1 上的任何内容)

要使用此代码,您必须将其放置在新的代码模块(而不是工作表或工作簿部分)中,您可以从代码编辑器或通过 Excel 主窗口中的宏菜单运行它。

' Note: This code requires the following references to be loaded.
' Microsoft HTML Object Library (mshtml.tlb)
' Microsoft Internet Controls (ieframe.dll)
' To add a reference
' In the VBA Code Editor, in the Tools Menu click the References item
' Scroll through the list and ensure that the references are selected
' Press OK and your done.

Sub Scrape()
Dim Browser As InternetExplorer
Dim Document As HTMLDocument
Dim Element As IHTMLElement
Dim Elements As IHTMLElementCollection
Dim empName As String
Dim empTitle As String

Dim Sheet As Worksheet

    Set Sheet = ThisWorkbook.ActiveSheet

    Sheet.UsedRange.ClearContents ' Nuke the old list

    Set Browser = New InternetExplorer

    Browser.navigate "http://www.hsbc.com/about-hsbc/leadership"

    Do While Browser.Busy And Not Browser.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop

    Set Document = Browser.Document

    Set Elements = Document.getElementsByClassName("profile-col1")

    For Each Element In Elements
        empName = Trim(Element.Children(1).Children(0).innerText)
        empTitle = Trim(Element.Children(1).Children(1).innerText)
        Sheet.Range("A1:B1").Insert xlShiftDown
        Sheet.Cells(1, 1).Value = empName
        Sheet.Cells(1, 2).Value = empTitle
        'Debug.Print "[  name] " & empName
        'Debug.Print "[ title] " & empTitle
    Next Element

    Set Browser = Nothing
    Set Elements = Nothing

End Sub
于 2013-03-03T14:51:33.743 回答