google-apps-script - 如何计算新的 Google 工作表链接
问题描述
我很久以前就问过这个问题并得到了很好的答案:“Google 表格:计算价值 > 0 的 HYPERLINKS 的数量” Google 表格:计算价值 > 0 的 HYPERLINKS 的数量
现在谷歌已经改变了他们的超链接在一个单元格中插入多个超链接 - 很好......但他们也不再以这种方式插入它了:
=HYPERLINK("http:/www.test.com", 100")
所以现在我的老问题又出现了:How to count number of cells with HYPERLINKS where value > 0
解决方案
我相信你的目标如下。
- 您想从 Google 电子表格的工作表上的某个范围内检索超链接的数量。
您希望通过修改以下 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 电子表格中使用超链接的规范似乎已更改。这样,不幸的是,上面的脚本现在不能使用。但是,在当前阶段,可以使用类 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 一起使用。
参考:
- 既然链接没有反映为 HYPERLINK,如何从单元格中提取链接?
- 类 RichTextValue
- 可惜现阶段,官方文档好像还没有更新。所以
getLinkUrl()
找不到文件。但是getLinkUrl()
可以使用。
- 可惜现阶段,官方文档好像还没有更新。所以
添加:
当我看到您的示例电子表格时,我可以理解您的问题的原因。您的问题的原因是由于数字值用于超链接。在当前阶段,似乎getRichTextValues
无法检索数值。HYPERLINK
这样,只检索到 number of 。我认为这可能是一个错误。所以我已经将此问题发布到问题跟踪器。参考当这个问题得到解决时,我认为上面的示例脚本可能会起作用。
顺便说一句,无法检索具有没有 URL 的超链接的单元格。请注意这一点。
解决方法:
作为当前的解决方法,例如,当单元格格式从数字更改为文本时,可以看到计数。但是在这种情况下,无法检索具有没有 URL 的超链接的单元格。请注意这一点。
推荐阅读
- javascript - 无法让 socket.io 正常运行
- operating-system - 每个系统调用的代码是否加载到每个进程的地址中?
- r - R中是否有一个函数可以聚合在某些列中具有相同值但在其他列中具有不同值的行?
- java - 获取每个数组列表中的最小值
- javascript - mongo中是否有一个函数来查找数组中是否存在元素?
- php - 在 NodeJS 中检查查询结果?
- python - 基于元素字符串的过滤列表
- modal-dialog - 在 MSC Nastran 中获取简化模型的固有频率
- ios - 全新安装后使用 CloudKit 从 CoreData 加载具有“允许外部存储”的二进制数据时“无法为文件创建保护位置”
- c++ - cmake上relove错误CHECK_CXX_FLAGS如何失败