Google Apps Script 复制行时如何无需OnEdit直接在A列添加时间戳
我的目标
我希望借助下述代码,给符合条件的行添加A列时间戳:
for (var i = 0; i < numRows; i++){ let aVal = dataSetValues[i][0]; let bVal = dataSetValues[i][1]; let cVal = dataSetValues[i][2]; let dVal = dataSetValues[i][3]; let fVal = dataSetValues[i][5]; let gVal = dataSetValues[i][6]; let hVal = dataSetValues[i][7]; // + other columns let sum = +fVal + +gVal; if (sum > 115) { let row = dataSetValues[i]; var rngDest = dest.getRange(dest.getLastRow() + 1, 6, 1, row.length); rngDest.setValues([row]); } }
我当前使用的代码
var i = spreadsheet.getActiveCell(); if(i.getColumn() == 6) { var timestamp = i.offset(0, -5); if( timestamp.getValue() === '' ) timestamp.setValue(new Date()); } }
遇到的问题
当前时间戳没有正常生成,只有我手动在F列输入内容时才会生效。我不想使用OnEdit脚本,请问是否可以在复制行的过程中直接完成时间戳添加操作?
补充更新
我已经补充了完整的主代码,明确需求为在A列添加时间戳。我之所以不想用OnEdit,是因为ws2表格后续我还要添加其他数据,需要保留可编辑属性。
解决方案
直接修改原有复制行的逻辑即可,无需依赖OnEdit触发器,修改后代码如下:
for (var i = 0; i < numRows; i++){ let aVal = dataSetValues[i][0]; let bVal = dataSetValues[i][1]; let cVal = dataSetValues[i][2]; let dVal = dataSetValues[i][3]; let fVal = dataSetValues[i][5]; let gVal = dataSetValues[i][6]; let hVal = dataSetValues[i][7]; // + other columns let sum = +fVal + +gVal; if (sum > 115) { let row = dataSetValues[i]; // 构建带时间戳的新行,A列位置直接写入当前时间 let rowWithTimestamp = [new Date(), ...row]; // 写入起始位置改为A列(第1列),适配新的行结构 var rngDest = dest.getRange(dest.getLastRow() + 1, 1, 1, rowWithTimestamp.length); rngDest.setValues([rowWithTimestamp]); } }
修改说明
- 在符合条件、要写入目标表的行数据前新增时间戳元素,对应目标表的A列
- 把原写入范围的起始列从第6列改为第1列,刚好匹配带时间戳的新行结构
- 所有逻辑都嵌入原有行复制流程中,不会触发任何编辑类触发器,完全不影响后续手动编辑表格的需求
如果不需要保留原行的第一列数据,或者需要调整列的对应顺序,直接调整rowWithTimestamp数组的元素排列即可。
内容的提问来源于stack exchange,提问作者Zimox
相关产品推荐
相关产品推荐

