如何使用公式从Google表格中的链接中提取网址?

iam*_*toc 15 formula google-sheets

我从网站上复制了一系列超链接并将它们粘贴在Google工作表中.值显示为链接文本,而不是超链接公式,并且仍然正确链接.对于每一行,我试图仅提取URL(不是友好文本)并将其插入相邻列.如何使用公式实现这一目标?

例如:

=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)
Run Code Online (Sandbox Code Playgroud)

此类和类似方案不适用,因为粘贴的数据不是公式.我将接受脚本(GAS)解决方案或任何解决方案,但更愿意使用公式.我发现了几十个HYPERLINK操作脚本,但在这个特定场景中没有任何内容,甚至没有找到如何访问持有该URL的属性.谢谢.

MrG*_*MrG 24

这可以通过将它们粘贴到或与自动创建的链接来完成链接按钮按钮,方法是转到“工具”->“脚本编辑器”并创建以下脚本:

函数 GETLINK(输入){

返回 SpreadsheetApp.getActiveSheet().getRange(input).getRichTextValue().getLinkUrl();

}

如果单元格 A1 有链接,您将需要引用它,因为=GETLINK("A1") 如果您有很多链接,则不会动态更新,因此请使用=GETLINK(cell("Address",A1))它来解决这个问题。

感谢reddit上的 morrisjr1989 。

  • 这个 GETLINK 是今天唯一对我有帮助的东西。然而,由于我的链接值都在 B 列中,我最终使用 =GETLINK("B"&ROW())。(想了很长时间之后,为什么 =GETLINK(B2) 不想直接工作。) (2认同)
  • =GETLINK("B"&ROW()) 为我工作。我通过转到扩展 -> Apps 脚本并将脚本粘贴到那里找到了脚本编辑器。 (2认同)

Fre*_*ong 19

在 2020 年的一些更新之后,我在互联网上找到的所有代码都被破坏了,所以这是我的贡献:

/** 
 * Returns the URL of a hyperlinked cell, if it's entered with control + k. 
 * Author: @Frederico Schardong based on https://support.google.com/docs/thread/28558721?hl=en&msgid=28927581 and https://github.com/andrebradshaw/utilities/blob/master/google_apps/convertHiddenLinks.gs 
 * Supports ranges
 */
function linkURL(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }

  var formulas = range.getRichTextValues();
  var output = [];
  for (var i = 0; i < formulas.length; i++) {
    var row = [];
    for (var j = 0; j < formulas[0].length; j++) {
      row.push(formulas[i][j].getLinkUrl());
    }
    output.push(row);
  }
  return output
}
Run Code Online (Sandbox Code Playgroud)

  • 终于找到了解决方案,使用 getRuns() 完成了这项工作。我的“特定”脚本在这里:https://gist.github.com/glureau/833d83099cb74efc937f9afddba2cca4 你只需要调整想要的格式 (3认同)
  • 这很棒!多谢!我仍然有一个边缘情况需要解决,我在同一个“公式”中有多个链接(公式[0].length == 1)。你知道如何解决这个问题吗? (2认同)
  • 对于嵌入的 URL(不像 `HYPERLINK=...`),我首先使用这个附加组件 https://extract-urls.contributor.pw/ 来转换它们,然后使用这个 `linkURL` 来获取实际的 URL (2认同)

Jor*_*dan 15

如果您的超链接在另一个单元格中指定为公式 - 例如,假设单元格 A1 包含公式=HYPERLINK("https://www.wikipedia.org/","Wikipedia"),您可以使用正则表达式提取链接文本。您需要做的就是:

=REGEXEXTRACT(FORMULATEXT(A1),"""(.+)"",")

这个公式将产生结果:

https://www.wikipedia.org/

无需自定义功能。

  • 非常棒,当使用 `=hyperlink("https ...," ...")` 创建超链接时效果很好,但不幸的是,当从其他地方粘贴超链接时,这不起作用。是否可以转换粘贴到使用公式“=hyperlink()”的超链接?也许使用宏? (2认同)

Rya*_*ine 7

内置的SpreadsheetApp服务似乎不支持提取此类 URL,但“高级”表格服务支持。

根据Google 的说明启用 Advanced Sheets 服务,然后尝试以下代码:

function onOpen() {
  var menu = SpreadsheetApp.getUi().createMenu("Extract URLs");
  menu.addItem("Process =EXTRACT_URL(A1) formulas", "processFormulas");
  menu.addToUi();
}

function EXTRACT_URL() {
  return SpreadsheetApp.getActiveRange().getFormula();
}

function processFormulas() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var rows = sheet.getDataRange().getFormulas();
  for (var r = 0; r < rows.length; r++) {
    var row = rows[r];
    for (var c = 0; c < row.length; c++) {
      var formula = row[c];
      if (formula) {
        var matched = formula.match(/^=EXTRACT_URL\((.*)\)$/i);
        if (matched) {
          var targetRange = matched[1];
          if (targetRange.indexOf("!") < 0) {
            targetRange = sheet.getName() + "!" + targetRange;
          }
          var result = Sheets.Spreadsheets.get(spreadsheet.getId(), {
            ranges: targetRange,
            fields: 'sheets.data.rowData.values.hyperlink'
          });
          try {
            var value = result.sheets[0].data[0].rowData[0].values[0].hyperlink;
            sheet.getRange(r + 1, c + 1).setValue(value);
          } catch (e) {
            // no hyperlink; just ignore
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为的自定义函数EXTRACT_URL,您应该使用对包含链接的单元格的引用来调用该函数;例如,=EXTRACT_URL(B3)

不幸的是,它不能立即工作,因为高级表格服务不能由自定义函数直接使用。因此,此脚本向电子表格菜单栏添加了一个名为“提取 URL”的菜单,其中一个菜单项标记为“处理 =EXTRACT_URL(A1) 公式”。当您单击它时,它将EXTRACT_URL用 URL 本身替换该函数的所有使用。


Aur*_*ann 6

您可以使用 importxml 提取整个数据表及其内容:

=IMPORTXML(A1,"//tr")
Run Code Online (Sandbox Code Playgroud)

在它旁边,我们在标签中提取了 url 字符串

=IMPORTXML(A1,"//tr/td[1]/a/@href")
Run Code Online (Sandbox Code Playgroud)

最后将字符串与原始域连接起来以创建超链接

=ARRAYFORMULA("http://www.bnilouisiana.com/"&INDIRECT("A2:A"&COUNTA(A2:A)))
Run Code Online (Sandbox Code Playgroud)