Google Sheets会员积分更新求助:匹配用户名并累加对应行积分
Google Sheets 会员积分累加功能实现方案
需求回顾
完成员工提交「PointsForm」表单后的核心功能:
- 在「Membership Database」工作表的B列匹配输入的用户名
- 将「PointsForm」中F10单元格的积分值,累加到该用户对应行的M列总积分中
修改后的完整代码
function checksubmitfinal() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formSheet = ss.getSheetByName("PointsForm"); // 表单工作表 var dataSheet = ss.getSheetByName("Calcs"); // 追踪工作表 var memSheet = ss.getSheetByName("Member Database"); // 会员数据库工作表 // 获取表单输入值 var username = formSheet.getRange("C8").getValue().trim(); var task = formSheet.getRange("F8").getValue().trim(); var queryUser = formSheet.getRange("C10").getValue().trim(); var addPoints = formSheet.getRange("F10").getValue(); // 检查空字段与积分格式 var blankExists = false; if (!username || !task || !queryUser || isNaN(addPoints)) { blankExists = true; } if (blankExists) { SpreadsheetApp.getUi().alert('请确保所有字段填写完整,且积分值为有效数字!'); return; } // 匹配会员数据库中的用户名 var usernames = memSheet.getRange("B:B").getValues().flat(); // 获取B列所有用户名 var targetRow = usernames.indexOf(username) + 1; // 转换为表格行号(数组索引从0开始) if (targetRow === 0) { SpreadsheetApp.getUi().alert('未找到该用户名,请检查输入!'); return; } // 计算并更新总积分 var currentPoints = memSheet.getRange(targetRow, 13).getValue(); // M列对应第13列 var newPoints = currentPoints + addPoints; memSheet.getRange(targetRow, 13).setValue(newPoints); // 同步表单详情到追踪工作表 var values = [[username, task, queryUser]]; dataSheet.getRange(dataSheet.getLastRow() + 1, 1, 1, 3).setValues(values); SpreadsheetApp.getUi().alert('积分已成功添加!'); }
关键功能说明
- 输入校验优化:新增积分值的数字格式校验,避免非数字输入引发错误
- 用户名匹配逻辑:通过
indexOf快速定位B列中匹配的用户名,注意数组索引与表格行号的转换(数组从0开始,表格行从1开始) - 积分累加逻辑:读取目标行当前的M列积分,累加新增积分后重新写入
- 异常拦截:如果找不到匹配的用户名,弹出提示并终止流程,避免无效操作
- 代码精简:移除原代码中重复获取输入值的冗余部分,提升执行效率
内容的提问来源于stack exchange,提问作者TF99
相关产品推荐
相关产品推荐

