Google Sheets自动生成ID时未录入值就提前生成下一行ID问题
问题根因
- 现有逻辑仅校验ID列是否为空,没有判断当前行是否存在实际录入的业务数据,会自动给所有空白行生成ID
- 代码中调用
getSheetValues时使用rows+1作为行数参数,会额外读取一行空白区域,触发多余的ID生成逻辑
修复后的代码
function myFunction() { var AUTOINC_COLUMN = 0; // ID所在列索引,0对应第1列 var CONTENT_COLUMN = 1; // 业务数据录入列索引,1对应第2列,可根据实际情况修改 var HEADER_ROW_COUNT = 1; var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var worksheet = spreadsheet.getSheetByName("Sequence Tbl"); var rows = worksheet.getDataRange().getNumRows(); // 去掉额外+1,只读取已有数据的区域 var vals = worksheet.getSheetValues(1, 1, rows, 2); for (var row = HEADER_ROW_COUNT; row < vals.length; row++) { try { var id = vals[row][AUTOINC_COLUMN]; var content = vals[row][CONTENT_COLUMN]; // 新增判断:仅当业务列有内容、ID列为空时才生成ID if ((""+id).length === 0 && (""+content).length > 0) { let idCell = worksheet.getRange(row+1, AUTOINC_COLUMN+1); idCell.setValue(row); idCell.setNumberFormat("00000"); } } catch(ex) { console.error(ex); } } }
使用说明
- 如果你的业务数据录入在其他列,只需要修改
CONTENT_COLUMN的参数值即可,索引从0开始,对应表格的第1列 - 可以给脚本绑定
onEdit触发器,每次你编辑表格内容后会自动触发ID生成,不需要手动运行脚本 - 如果需要多列校验,只需要在判断条件中增加对应列的非空判断逻辑即可
内容的提问来源于stack exchange,提问作者MrsToes
相关产品推荐
相关产品推荐

