Google 工作表:计算值 > 0 的超链接数

Google Sheets: count numbers of HYPERLINKS where value > 0

我在 Google 工作表中有一系列单元格 其中一些单元格包含值(数字),有些带有超链接,有些不带超链接 如果值 > 0

,我需要计算此单元格范围的超链接数

此函数工作正常,但不包含任何单元格值 Counting hyperlinks on Google Sheets formula

  • 你想计算公式=HYPERLINK()且数值大于0的单元格个数。
    • 这是一行 运行,还有一些单元格没有超链接。
    • 您想使用自定义函数实现此目的。
  • 作为示例,在您共享的电子表格中,您需要 2.
  • 的数量

我能像上面那样理解你的目标。如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。

您当前的脚本:

从共享的电子表格中,我确认您当前的脚本如下。

function countLinks(rangeNotation, range) {
  var formulas = SpreadsheetApp.getActiveSheet().getRange(rangeNotation).getFormulas();
  return formulas.reduce(function(acc, row) {
    return acc + row.reduce(function(acc, formula) {
      return acc + (/^=HYPERLINK/i.test(formula) ? 1 : 0);
    }, 0);
  }, 0);
}

修改点:

  • 在您当前的脚本中,没有检索到这些值。
    • 在此修改中,公式和值均从单元格中检索。
  • 在您的例子中,公式是从一行中检索的。所以可以去掉一个reduce()
  • range未使用

当以上几点反映到你现在的脚本中,就变成了下面的样子。

修改后的脚本:

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);
}

用法:

当您将其用作自定义函数时,例如,请将以下自定义函数放入共享电子表格中的单元格 "AO3"。

=countlinks("A3:AN3")

结果:

将上述脚本用于您的共享电子表格时,将获得以下结果。

参考文献:

更新时间:2020 年 6 月 8 日:

2020 年 5 月,似乎更改了 Google 电子表格中超链接的使用规范。不幸的是,现在不能使用上面的脚本。但是,在当前阶段,可以使用 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);
}

参考文献: