谷歌表格Apps Script:根据骰子求和在对应列末行写入x
谷歌表格掷骰子记录脚本优化方案
需求说明
- B1、C1单元格使用
RANDBETWEEN(1,6)生成1-6的随机数,模拟掷骰子效果 - 当A1单元格的复选框被勾选时,根据两数之和(范围2-12),在对应列的下一个空行写入
x:- 和为2 → D列,和为3 → E列,……,和为12 → N列
- 复选框触发操作后自动重置为未勾选状态
优化后的完整代码
function onEdit(e) { // 仅响应A1从"未勾选"变为"勾选"的操作 if (e.oldValue !== "false" || e.value !== "TRUE") return; const cell = e.range; if (cell.rowStart !== 1 || cell.columnStart !== 1) return; addX(); // 执行完成后将复选框重置为未勾选 cell.setValue(false); } function addX() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('dice roller auto'); // 获取两个骰子的数值并计算和 const dice1 = sheet.getRange('B1').getValue(); const dice2 = sheet.getRange('C1').getValue(); const sumValue = dice1 + dice2; // 计算目标列索引:和为2对应第4列(D),公式为 sumValue + 2 const targetColIndex = sumValue + 2; // 获取目标列的所有数据,确定最后一个非空行的位置 const targetColValues = sheet.getRange(1, targetColIndex, sheet.getLastRow()).getValues(); const lastEmptyRow = targetColValues.filter(String).length + 1; // 在目标列的下一个空行写入"x" sheet.getRange(lastEmptyRow, targetColIndex).setValue('x'); }
关键优化点
- 简化列定位逻辑:通过
sumValue + 2直接计算目标列的索引,替代原代码中逐个列定义变量的冗余写法 - 高效定位空行:仅针对目标列获取数据,过滤非空值后得到已有内容的行数,加1即为下一个空行位置
- 逻辑流程清晰:先计算骰子和,再定位目标列,最后写入标记,步骤明确易维护
- 保留精准触发条件:仅在A1复选框从"未勾选"切换为"勾选"时执行操作,避免误触发
内容的提问来源于stack exchange,提问作者Tim Welch
相关产品推荐
相关产品推荐

