Google表格聚合拼接捐赠数据:公式实现与脚本嵌入问题
原生Google表格公式实现
针对你的三个需求,可直接用原生公式实现,无需脚本:
1. 捐赠次数
直接分割字符串后计数:
=COUNTA(SPLIT(A2, " ::: "))
批量处理整列可搭配ARRAYFORMULA:
=ARRAYFORMULA(IF(A2:A="",,COUNTA(SPLIT(A2:A, " ::: "))))
2. 捐赠总额
提取每个捐赠项的金额部分(下划线后数字)再求和:
=SUMPRODUCT(VALUE(REGEXEXTRACT(SPLIT(A2, " ::: "), "_(\d+)")))
批量处理用BYROW更简洁:
=BYROW(A2:A, LAMBDA(x, IF(x="",,SUMPRODUCT(VALUE(REGEXEXTRACT(SPLIT(x, " ::: "), "_(\d+)"))))))
3. 最后一次捐赠年份
提取每个捐赠项的年份(字符串前4位),取最大值(年份越大代表捐赠时间越晚):
=MAX(VALUE(LEFT(SPLIT(A2, " ::: "),4)))
批量处理用BYROW:
=BYROW(A2:A, LAMBDA(x, IF(x="",,MAX(VALUE(LEFT(SPLIT(x, " ::: "),4))))))
Apps Script 解决方案
扩展现有自定义函数
你已编写的number_of_donations无需创建独立项目——只需打开表格的「扩展 > Apps Script」,将代码粘贴进去保存,就能直接在单元格中调用(比如=number_of_donations(A2)或=number_of_donations(A2:A))。
可继续扩展实现另外两个需求:
// 计算捐赠总额 function total_donations(s) { if(Array.isArray(s)) return s.map(total_donations); return s.split(' ::: ').reduce((sum, item) => sum + parseInt(item.split('_')[1], 10), 0); } // 获取最后一次捐赠年份 function last_donation_year(s) { if(Array.isArray(s)) return s.map(last_donation_year); const donations = s.split(' ::: '); const years = donations.map(item => parseInt(item.substring(0, 4), 10)); return Math.max(...years); }
表格内使用Python的可能性
Google表格原生不支持直接嵌入Python作为公式,但可通过两种间接方式实现:
- 使用Google Colab连接当前表格,编写Python代码处理数据后写回表格;
- 将Python代码部署为Google Cloud Functions,再通过Apps Script调用该函数,封装成自定义函数在表格中使用。不过这两种方式都比直接用Apps Script或原生公式复杂,仅当你有特定Python依赖需求时才推荐。
内容的提问来源于stack exchange,提问作者Vadim Kantorov
相关产品推荐
相关产品推荐

