刷新后如何保留Web导入数据的新结构?

时间:2013-03-03 11:59:55

标签: excel web

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

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

我将数据导入Excel电子表格:格式非常糟糕。因此,我开始剪切并粘贴为“名称”创建一列,一个用于“电子邮件”,类似用于“工作位置”。手动取消所有其他信息。

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

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

感谢大家的支持!

氪, 甲

1 个答案:

答案 0 :(得分: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