You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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作为公式,但可通过两种间接方式实现:

  1. 使用Google Colab连接当前表格,编写Python代码处理数据后写回表格;
  2. 将Python代码部署为Google Cloud Functions,再通过Apps Script调用该函数,封装成自定义函数在表格中使用。不过这两种方式都比直接用Apps Script或原生公式复杂,仅当你有特定Python依赖需求时才推荐。

内容的提问来源于stack exchange,提问作者Vadim Kantorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:22:13