抱歉这个难以理解的问题标题。我有一个工作簿,在表中有大量链接,由HYPERLINK
函数生成,如下所示:
=HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=",[@[Patent No]],"&sourceid=navclient"),"Search")
生成的网址会在Google上搜索专利号[@[Patent No]]
,并使用Google的“我感觉很幸运”导航到第一个匹配的网页。然而,我收到的许多专利都是错误的语言,例如http://www.google.ch/patents/US20150086824。解决方案很简单,在网址中将.ch更改为.com。
我的问题是如何在Excel中自动执行此操作?因此,获取我感觉幸运的页面链接将发送给我,然后将.ch更改为.com,然后将该固定链接提供为我在Excel中获得的链接。
我希望这是有道理的,如果可以通过功能完成那么最好,或者必要时使用vba。我快速浏览一下,但在搜索时发现问题很棘手。
也许我应该让我感觉幸运的部分更加清晰。假设我想在谷歌上搜索“Stack Overflow”并点击谷歌搜索出现的第一个链接(很可能是https://stackoverflow.com/,但我不想只链接到网站本身,我想链接到我感觉幸运的结果)。 目前Excel构建如下链接:
=HYPERLINK(CONCAT("http://google.com/search?btnI=I%27m+Feeling+Lucky&q=","Stack Overflow","&sourceid=navclient"),"Search")
在地址为Search 的Excel 中提供网址:http://google.com/search?btnI=I%27m+Feeling+Lucky&q=Stack%Overflow&sourceid=navclient
如果我点击Search,我会转到https://stackoverflow.com/,但Excel不知道,在我点击链接然后 <之前,没有人知道em> Google决定目的地。基本上我在Excel中使用可变搜索词(Stack Overflow或专利号), export 将该信息提供给Google(以我很幸运链接的形式)决定链接到哪里,然后导入 Google决定返回Excel的目的地 - 我可以替换.ch并创建新的搜索在Excel中链接。
答案 0 :(得分:0)
我找到了解决方案:
我在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次搜索,我用宏来实现这些函数,而不是输入单元格(对于“表1”,使用列A包含搜索字词,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中是有点愚蠢的,但是如果你愿意,可以很容易地修复它们。