我正在创建一个Excel数据库。我想从公司网站导入公司所有员工的姓名,电子邮件和工作职位。 我选择Data-> From Web并选择整个页面,因为这是唯一的可能性。
该页面不显示包含数据的表格;只是一长串员工的照片列表,旁边有姓名,电子邮件和职位
我将数据导入Excel电子表格:格式非常糟糕。因此,我开始剪切并粘贴为“名称”创建一列,一个用于“电子邮件”,类似用于“工作位置”。手动取消所有其他信息。
我想刷新保存这种新格式的数据。不幸的是,每次使用“全部刷新”按钮刷新导入的数据时,它们都会返回原始格式。
刷新后如何保留我的网络导入数据的新格式?
感谢大家的支持!
氪, 甲
答案 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