如何计算新的 Google sheet 链接

How to count new Google sheet links

我很久以前就问过这个问题并且得到了很好的答案:"Google Sheets: count numbers of HYPERLINKS where value > 0"

现在 google 已将其超链接更改为在一个单元格中插入多个超链接 - 很好...但他们也不再以这种方式插入:

=HYPERLINK("http:/www.test.com", 100") 

所以现在我的老问题又出现了:如何计算具有 HYPERLINKS 的单元格数量,其中值 > 0

我相信你的目标如下。

  • 您想从 Google Spreadsheet.
  • 中的 sheet 范围内检索超链接的数量
  • 您想通过修改以下 Google Apps 脚本来实现此目的。

    function countLinks(rangeNotation) {
      var sheet = SpreadsheetApp.getActiveSheet();
      var formulas = sheet.getRange(rangeNotation).getFormulas()[0];
      var values = sheet.getRange(rangeNotation).getValues()[0];
      return formulas.reduce(function(acc, formula, i) {
        return acc += (/^=HYPERLINK/i.test(formula) && values[i] > 0 ? 1 : 0);
      }, 0);
    }
    

为此,这个答案怎么样?

问题与解决方案:

2020 年 5 月,Google Spreadsheet 中的超链接使用规范似乎已更改。不幸的是,现在不能使用上面的脚本。但是,在当前阶段,可以使用 Class RichTextValue 检索超链接。所以,在现阶段,为了达到你的目的,需要对上面的脚本进行如下修改。

修改后的脚本:

function countLinks(rangeNotation) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var richTextValues = sheet.getRange(rangeNotation).getRichTextValues();
  return richTextValues.reduce((c, row) => {
    row.forEach(col => {
      col.getRuns().forEach(r => {
        if (r.getLinkUrl()) c++;
      });
    });
    return c;
  }, 0);
}
  • 当您使用此脚本作为自定义函数时,请将以下公式放入单元格。在这种情况下,返回单元格 "A1:A10" 中的超链接数。

    =countlinks("A1:C10")
    

注:

  • 在此修改后的脚本中,可以检索使用和不使用 HYPERLINK 的超链接数。
  • 请在 V8 中使用此脚本。

参考文献:

  • Class RichTextValue
    • 很遗憾,目前阶段官方文档好像还没有更新。所以找不到getLinkUrl()的文档。但是可以用getLinkUrl()

已添加:

当我看到您的示例 Spreadsheet 时,我可以理解您出现问题的原因。您的问题的原因是由于数字值用于超链接。在目前阶段,似乎getRichTextValues 无法检索数字值。这样,仅检索 HYPERLINK 的数量。我认为这可能是一个错误。所以我已经将这个问题发布到问题跟踪器。 Ref 解决此问题后,我认为上面的示例脚本可能有效。

顺便说一句,无法检索具有超链接但没有 URL 的单元格。请注意这一点。

解决方法:

作为当前的解决方法,例如,当单元格格式从数字更改为文本时,可以看到计数。但在这种情况下,无法检索具有超链接但没有 URL 的单元格。请注意这一点。