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);
}
参考文献:
我在 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);
}