从Excel超链接公式中提取URL

我有一个使用超链接公式=HYPERLINK( <targetURL>, <friendlyName> )数百个单元格的Excel文件。 我需要从这些中提取纯文本的URL。 我发现的大多数例子都依赖于使用不同的超链接方法的单元格。

所以这样的function:

 Function HyperLinkText(pRange As Range) As String Dim ST1 As String Dim ST2 As String If pRange.Hyperlinks.Count = 0 Then HyperLinkText = "not found" Exit Function End If ST1 = pRange.Hyperlinks(1).Address ST2 = pRange.Hyperlinks(1).SubAddress If ST2 <> "" Then ST1 = "[" & ST1 & "]" & ST2 End If HyperLinkText = ST1 End Function 

导致单元格文本“未find”。 或者,有没有办法将这些单元格转换为其他超链接格式,以便我有工作的macros?

这是一个方法,它将返回超链接文本,不pipe它是由公式创build的还是通过插入/超链接方法。

如果是前者,我们只需要parsing公式; 如果是后者,我们需要迭代工作表上的超链接集合。

如果cell_ref中没有超链接,公式将不会返回; 改变以适应。


 Option Explicit Function HyperLinkText(rg As Range) Dim sFormula As String, S As String Dim L As Long Dim H As Hyperlink, HS As Hyperlinks sFormula = rg.Formula L = InStr(1, sFormula, "HYPERLINK(""", vbBinaryCompare) If L > 0 Then S = Mid(sFormula, L + 11) S = Left(S, InStr(S, """") - 1) Else Set HS = rg.Worksheet.Hyperlinks For Each H In HS If H.Range = rg Then S = H.Address End If Next H End If HyperLinkText = S End Function 

你可以用正则expression式来提取它:

 Dim re Set re = CreateObject("VBScript.RegExp") re.Pattern = "^=HYPERLINK\(""([^""]+)""" If re.Test(pRange.Formula) Then Debug.Print "URL = " & re.Execute(pRange.Formula)(0).SubMatches(0) Else Debug.Print "URL not found" End If 

这只是检查,看看公式是否开始于:

 =HYPERLINK(" 

如果是的话,从这一点抓取文本,直到下面的"

.Address – 玩弄它,我找不到。 .Address也可以。

你说你只想提取URL,我可以用这个macros来做到这一点:

 Function hyperlinkText(pRange As Range) As String Dim st1 As String, st2 As String Dim tempSub1 As String, tempSub2 As String If Left(pRange.Formula, 10) <> "=HYPERLINK" Then hyperlinkText = "not found" Exit Function Else tempSub1 = WorksheetFunction.Substitute(pRange.Formula, """", "[", 1) tempSub2 = WorksheetFunction.Substitute(tempSub1, """", "]", 1) hyperlinkText = Mid(tempSub2, WorksheetFunction.Find("[", tempSub2) + 1, WorksheetFunction.Find("]", tempSub2) - WorksheetFunction.Find("[", tempSub2) - 1) End If End Function 

请注意,它没有得到Hyperlink()公式的“友好名称”,只是URL。

非VBA的可能性:

工作与链接单元格的副本,因为第一步是取代部分内容(具体=我build议不签字?)。 然后,假设副本在A1:

 =SUBSTITUTE(LEFT(MID(A1,13,LEN(A1)),FIND("""",MID(A1,13,LEN(A1)))-1),"¬","=") 

并用=代替链接包含等号的地方。

我结束了使用Python:

  1. 将电子表格下载(或转换)为xlsx格式。
  2. 使用pip或conda安装openpyxl
  3. 阅读xlsx的代码类似于:

     from openpyxl import load_workbook wb = load_workbook(filename = 'cities.xlsx') print(wb.worksheets) print(dir(wb)) sheet_ranges = wb['Sheet1'] for c in sheet_ranges['B']: print(c.hyperlink.target) 

请注意名称“Sheet1”或列名可能是不同的情况下(“B”是在我的情况下超链接的列)。

  1. 打印链接之后,将它们复制并粘贴到工作表的新列中。

这是一个Excel公式,可以从用于单元格的超链接中提取URL。

A1 =您想要提取URL的Excel单元格。

 =MID(FORMULATEXT(A1),FIND(CHAR(34),FORMULATEXT(A1))+1,FIND(CHAR(34),FORMULATEXT(A1),FIND(CHAR(34),FORMULATEXT(A1))+1)-1-FIND(CHAR(34),FORMULATEXT(A1))) 

Excel公式从Excel超链接获取URL [Image]