Getlink 脚本 Google Sheet 超链接

问题描述 投票:0回答:2

我一直在尝试使用 getlink 函数 来提取超链接的 URL。我需要从中提取链接的单元格未配置超链接公式。

Screenshot Spreadsheet with link to URL (hovered above cell)

但是,当我使用下面的脚本时,我总是得到:

*TypeError: Cannot read properties of null (reading 'getLinkUrl') (line 5). Why is that? *

我用于此函数的公式:

=GETLINK(CELL("Address";R2))

我使用的脚本:

function GETLINK(input){
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(input);
  var value = range.getRichTextValue();
  var url = value.getLinkUrl(0,1);
  return url;
}
function google-apps-script google-sheets hyperlink
2个回答
0
投票

修改要点:

从以下示例图像和错误消息

TypeError: Cannot read properties of null (reading 'getLinkUrl')

我认为您当前的问题可能是由于数值引起的。当前阶段,当单元格值为数值时,

range.getRichTextValue()
返回
null
。 (这已经报告给 Google 问题跟踪器。Ref)在这种情况下,即使单元格具有超链接,也会显示类似错误消息的错误。

为了解决这个问题并找回超链接,下面的修改如何?

修改后的脚本:

请将以下脚本复制并粘贴到 Google Spreadsheet 的脚本编辑器中并保存脚本。

在此修改中,由于

setNumberFormat
,该脚本无法用作自定义函数。因此,我提出了一个示例脚本,用于从源范围检索 URL 并将 URL 放入目标范围。

使用此脚本时,请设置

srcRange
dstRange
的值,并通过脚本编辑器运行脚本。这样,脚本就会运行并从
srcRange
检索 URL,并将检索到的 URL 放入
dstRange

function sample() {
  var srcRange = "Sheet1!A1:A10"; // Please set the source range you want to use.
  var dstRange = "Sheet2!B1:B10"; // Please set the destination range you want to use.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getRange(srcRange);
  var orgNumberFormats = range.getNumberFormats();
  var values = range.setNumberFormat("@").getRichTextValues();
  var urls = values.map(r => r.map(c => c && (c.getLinkUrl() || "")));
  range.setNumberFormats(orgNumberFormats);
  ss.getRange(dstRange).setValues(urls);
}
  • 运行此脚本时,将保存
    srcRange
    的数字格式,将单元格值转换为字符串值,并从
    srcRange
    检索富文本值。然后,检索 URL 并将 URL 放入
    dstRange

注:

  • 如果您的错误已从显示脚本中删除,则可以使用以下脚本。但是,在这种情况下,当单元格值为数字值时,即使单元格具有超链接,也不会返回任何值。请注意这一点。

      function GETLINK(input) {
        var sheet = SpreadsheetApp.getActiveSheet();
        var range = sheet.getRange(input);
        var value = range.getRichTextValue();
        return value && value.getLinkUrl(0, 1);
      }
    

参考资料:


0
投票

对我来说同样的情况(我想要提取的带有 URL 的单元格都是数字),Tanaike 的答案比简单地选择所有带有数字的单元格并单击格式 -> 数字 -> 纯文本更复杂。脚本现在可以运行了。感谢 Tanaike 指出脚本的问题 - 它无法处理包含数字的单元格的链接!

© www.soinside.com 2019 - 2024. All rights reserved.