繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM