如何计算新的 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 的单元格。请注意这一点。
我很久以前就问过这个问题并且得到了很好的答案:"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 的单元格。请注意这一点。