我需要从this page on Wikipedia中提取学校名称和缩写。
缩写将放在A栏和B栏中的学校名称中。
我希望使用the feature in IE,但我似乎无法弄清楚是否可以导出整个页面导出页面的某些方面。
我似乎无法弄清楚需要更改哪些设置才能使其正常工作。
答案 0 :(得分:0)
如果这是一次性的事情,你应该能够接近你需要的东西。 在新工作表上,如果选择一个可用选项
并按照将其导入工作表的指示范围A1,您将拥有无关的行,但您只能将A16:A380复制到另一个工作表。 在新工作表上选择范围时,选择DATA> Text to Columns,并将分隔符设为“ - ”(减号),这将基本上为您提供所需的内容。 从这里,在A上排序A:B并删除不需要的空行和[编辑]标题行。
由于数据不在单独的表中,因此您无法轻松自动执行此操作,但即使这样也可以使用宏来完成,如果这不是一次性的话。
这个例子是Office 2003,但其他版本可以做同样的想法。
答案 1 :(得分:0)
如果您想使用VBA宏来执行此操作,那么这里是您需要的代码。您需要设置对“Microsoft XML,v6.0”的引用,然后创建并运行此宏:
Option Explicit
Sub main()
Dim domResult As DOMDocument60
Dim ixnlLi As IXMLDOMNodeList
Dim iRow As Integer
Dim sResult As String
Dim iDashPos As Integer
Set domResult = New DOMDocument60
domResult.setProperty "ProhibitDTD", False
domResult.setProperty "SelectionNamespaces", "xmlns:ns='http://www.w3.org/1999/xhtml'"
domResult.resolveExternals = True
domResult.validateOnParse = False
domResult.async = False
domResult.Load "http://en.wikipedia.org/wiki/List_of_colloquial_names_for_universities_and_colleges_in_the_United_States"
Set ixnlLi = domResult.selectNodes("id('bodyContent')/ns:ul/ns:li")
With ThisWorkbook.Worksheets("Sheet1")
.UsedRange.ClearContents
For iRow = 1 To ixnlLi.Length
sResult = ixnlLi(iRow - 1).Text
iDashPos = InStr(sResult, "-")
If (iDashPos > 0) Then
.Cells(iRow, 1).Value = Trim$(Left$(sResult, (iDashPos - 1)))
.Cells(iRow, 2).Value = Trim$(Mid$(sResult, (iDashPos + 1)))
Else
.Cells(iRow, 1).Value = sResult
.Cells(iRow, 2).Value = ""
End If
Next iRow
.UsedRange.Columns.AutoFit
End With
End Sub
这将是一个非常脆弱的解决方案,因为如果有人改变页面结构,selectNodes
中使用的XPath表达式将会中断。您可以在//ns:li
中使用更简单且不那么脆弱的表达式selectNodes
,但这会从您必须从列表中删除的页面中提取其他一些无关的值。
该维基百科页面无效XHTML(由于两个空的<ul></ul>
标签对)