[英]Excel: get hyperlink from a linked url
抱歉这个难以理解的问题标题。 我有一个工作簿,在表中有大量链接,由HYPERLINK
函数生成如下:
=HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=",[@[Patent No]],"&sourceid=navclient"),"Search")
生成的URL在Google上搜索专利号[@[Patent No]]
,并使用谷歌的“ 我感觉很幸运 ”来导航到第一个匹配的页面。 但是,我收到的许多专利都是错误的语言,例如http://www.google.ch/patents/US20150086824 。 解决方案很简单,在网址中将.ch更改为.com。
我的问题是如何在excel中自动化这个? 因此,获得其中手气不错会送我的页面的链接,然后换到.CH .COM,然后提供固定链接作为一个我在Excel中获得。
我希望这是有道理的,如果可以通过功能来完成那么最好,或者如果必要的话可以使用vba。 我已经快速浏览了一下,但在搜索时发现我的问题很棘手。
也许我应该让我感觉幸运的部分更加清晰。 假设我想在谷歌上搜索“Stack Overflow”并点击Google搜索出现的第一个链接(很可能是https://stackoverflow.com/ ,但我不想只是链接到网站本身,我想链接到我感觉幸运的结果)。 目前Excel构造如下链接:
=HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=","Stack Overflow","&sourceid=navclient"),"Search")
提供网址:在Excel中搜索 地址http://google.com/search?btnI=I%27m+Feeling+Lucky&q=Stack%Overflow&sourceid=navclient
如果我点击搜索它会转到https://stackoverflow.com/但Excel不知道,没有人知道,直到我点击链接然后 谷歌决定目的地在哪里 。 基本上我在Excel中使用可变搜索词(Stack Overflow或专利号),将该信息导出到谷歌(以我感觉幸运链接的形式),以决定链接到哪里,然后导入 Google决定返回Excel的目的地 - 我可以替换.ch并在Excel中创建新的搜索链接。
我找到了一个解决方案:
我在UDF中包含的重要代码,它返回了Google提供的第一个链接(效果与我感觉幸运但没有特别使用它)
Function GOOGLE(SearchTerm)
Dim url As String, lastRow As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object
Dim cookie As String
Dim result_cookie As String
url = "https://www.google.co.uk/search?q=" & SearchTerm & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHTTP.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHTTP.ResponseText
Set objResultDiv = html.getelementbyid("rso")
Set objH3 = objResultDiv.getelementsbytagname("H3")(0)
'friendlyName = objH3.InnerText
GOOGLE = objH3.parentElement.href
End Function
之后我只需要一些简单的嵌套函数来切换国家代码(我决定将其包装在另一个UDF中):
Function CHANGE_CODE(link As String, newcode As String) As String
Dim linkst As Double
Dim trimmed As String
Dim oldcode As String
On Error GoTo ErrHandler
linkst = WorksheetFunction.Search("google.", link) + 6
trimmed = Right(link, Len(link) - linkst)
oldcode = Mid(link, linkst, WorksheetFunction.Search("/", trimmed))
CHANGE_CODE = WorksheetFunction.Substitute(link, oldcode, newcode, 1)
Exit Function
ErrHandler:
CHANGE_CODE = link
End Function
所以我的最终电子表格代码类似于=HYPERLINK(CHANGE_CODE(GOOGLE(
"blah"
),".com"),"Search")
我后来才意识到GOOGLE()
是易变的,所以为了避免每次更新我的工作表时等待100次搜索,我用宏来实现这些功能而不是输入单元格(对于包含搜索项的A列的“表1”, B栏名为“Google”,其中包含结果):
Sub CallGoogle() 'places a google link in each cell of a table
Dim c As Range
Set Table = Range("Table1[Google]")
For Each c In Table.Cells
link = CHANGE_CODE(GOOGLE(c.Offset(0, -1)), ".com")
ActiveSheet.Hyperlinks.Add _
Anchor:=c, _
Address:=link, _
ScreenTip:="Google top rank for " & c.Offset(0, -1), _
TextToDisplay:="Search"
Next
End Sub
这让我觉得把所有东西都放在UDF中有点愚蠢,但是如果你愿意的话可以很容易地修复它们!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.