既然链接没有反映为超链接,如何从单元格中提取链接?

Edo*_*uma 7 google-sheets google-apps-script

“插入链接”不再产生=HYPERLINK(’’,’’)

之前,如果您使用值“X”链接单元格。它被转换成公式=HYPERLINK(*link*,’X’)

两天前“插入链接”改变了。

现在单元格的内容保持不变,只是加了下划线。

使用脚本,既然单元格的值和公式都不包含此信息,我该如何从单元格中提取链接?

我搜索了文档,但我能找到的与链接相关的唯一方法是 setShowHyperlink(showHyperlink)

Tan*_*ike 9

我可以确认你的情况。在这种情况下,似乎可以从RichTextValue对象中检索超链接。也就是说,我认为规范已更改为使用RichTextValue.

所以作为一个示例,它假设如下。

  • 的文本X放在单元格“A1”中。
  • 此单元格手动链接到一个 URL,如https://www.google.com

在这种情况下,单元格没有=HYPERLINK("https://www.google.com","X")。用于从这种情况检索 URL 的示例脚本如下。

示例脚本:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var url = sheet.getRange("A1").getRichTextValue().getLinkUrl();
console.log(url);
Run Code Online (Sandbox Code Playgroud)
  • 在这种情况下,URL 链接到 URL 中的整个文本。所以可以使用上面的脚本。

笔记:

  • 在当前阶段,可以在一个单元格中的文本中添加多个超链接。例如,当将 2 个 URL 放入单元格中的文本时,您可以使用以下示例脚本。在此示例中的文本url1, url2放在一个单元格“A1”,并url1url2每个环节联系在一起。

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
    var RichTextValue = SpreadsheetApp.newRichTextValue()
      .setText("url1, url2")
      .setLinkUrl(0, 4, "https://url1/")
      .setLinkUrl(6, 10, "https://url2/")
      .build();
    sheet.getRange("A1").setRichTextValue(RichTextValue);
    
    Run Code Online (Sandbox Code Playgroud)
  • 从单元格中的文本检索多个 URL 时,您可以使用以下示例脚本。

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
    var range = sheet.getRange("A1");
    var RichTextValue = range.getRichTextValue().getRuns();
    var res = RichTextValue.reduce((ar, e) => {
      var url = e.getLinkUrl();
      if (url) ar.push(url);
      return ar;
    }, []);
    console.log(res);
    
    Run Code Online (Sandbox Code Playgroud)

参考:

2020 年 6 月 13 日更新:

通过在更新2020 6月12日,的文件getLinkUrl(),并setLinkUrl(linkUrl)加入到官方文件。

  • @TheMaster 我使用了 `getLinkUrl()` 和脚本编辑器的自动完成功能。但是现在,我发现当我现在查找 `getLinkUrl()` 的官方文档时,它不包含在内。我对此感到很惊讶。官方文档好像还没有更新。但相信不久的将来官方文档也会更新。 (7认同)