Excel:从链接的url获取超链接

对不起,问题标题不可思议。 HYPERLINK函数生成的表格中有一个链接负载的工作簿,如下所示:

 =HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=",[@[Patent No]],"&sourceid=navclient"),"Search") 

由此产生的URL在Googlesearch专利号[@[Patent No]] ,并使用Google的“ 我很幸运 ”导航到第一个匹配页面。 然而,我收到的许多专利都是错误的语言,例如http://www.google.ch/patents/US20150086824 。 解决方法很简单,在URL中更改.ch到.com。

我的问题是如何在Excel中自动执行此操作? 所以得到我感觉幸运的页面的链接将发送给我,然后更改.ch到.com,然后提供固定的链接,作为我在Excel中获得的。

我希望这是有道理的,如果这可以用function来完成,那么最好,如果必要的话,vba。 我有一个快速的外观,但发现在search时说出我的问题很棘手。

更新

也许我应该让“我很幸运”的部分更加清晰。 假设我想在Google上search“Stack Overflow”,然后点击Googlesearch的第一个链接(这很可能是https://stackoverflow.com/ ,但我不想只链接到网站本身,我想链接到我感觉幸运的结果)。 目前,Excel构build这样的链接:

 =HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=","Stack Overflow","&sourceid=navclient"),"Search") 

提供url:在Excel中search 地址http://google.com/search?btnI=I%27m+Feeling+Lucky&q=Stack%Overflow&sourceid=navclient

如果我点击search ,它将带我到https://stackoverflow.com/,但Excel不知道,没有人知道,直到我点击链接, 然后 谷歌决定目的地在哪里 。 本质上,我在Excel中采用可变search术语(Stack Overflow或专利号码),将该信息导出到Google(以“ 我感觉幸运”链接的forms),以确定链接的位置,然后导入谷歌决定返回到Excel的目的地 – 我可以replace.ch并在Excel中创build一个新的search链接。

我find了一个解决scheme:

我用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, link 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) Set link = objH3.getelementsbytagname("a")(0) str_text = Replace(link.innerHTML, "<EM>", "") str_text = Replace(str_text, "</EM>", "") GOOGLE = link.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次search,我使用macros实现了函数,而不是键入单元格(对于包含search项的列“A”名为“Google”的B列包含结果):

 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中是有点愚蠢的,但是如果你愿意,它们可以很容易的被修复!