如何修改Google Sheets脚本实现多工作表同步生成递增序号
修正后支持3个工作表的完整脚本
function uPDATEiT() { // 工作表参数配置,后续改规则/加表直接修改该数组即可 const SHEET_CONFIG = [ { name: 'Sheet1', startRow: 2, checkCol: 'C' }, // Sheet1从第2行开始,校验C列是否有内容 { name: 'Sheet2', startRow: 6, checkCol: 'C' }, // 不需要校验对应列的话可把checkCol设为空字符串 { name: 'Sheet3', startRow: 6, checkCol: 'C' } ] const aiColumnName = 'A' // 所有表序号统一写入A列 const ss = SpreadsheetApp.getActiveSpreadsheet() // 遍历每个工作表单独处理逻辑 SHEET_CONFIG.forEach(config => { const worksheet = ss.getSheetByName(config.name) if (!worksheet) return // 跳过不存在的工作表 const lastRow = worksheet.getLastRow() // 仅读取起始行到最后有数据的行,减少无效计算 const aiColRange = worksheet.getRange(aiColumnName + config.startRow + ':' + aiColumnName + lastRow) const aiCol = aiColRange.getValues() const aiColIndex = aiColRange.getColumn() const reqCol = config.checkCol ? worksheet.getRange(config.checkCol + config.startRow + ':' + config.checkCol + lastRow).getValues() : [] // 计算当前表已有的最大序号 let maxSeq = 0 for (let i = 0; i < aiCol.length; i++) { const currentVal = parseInt(aiCol[i][0], 10) if (!isNaN(currentVal) && currentVal > maxSeq) { maxSeq = currentVal } } // 给符合条件的空行填充递增序号 for (let i = 0; i < aiCol.length; i++) { const hasReqValue = config.checkCol ? ('' + reqCol[i][0]).length > 0 : true const aiIsEmpty = ('' + aiCol[i][0]).length === 0 if (hasReqValue && aiIsEmpty) { maxSeq++ worksheet.getRange(i + config.startRow, aiColIndex).setValue(maxSeq) } } }) }
核心调整说明
- 修复原代码
getSheetByName传参错误问题,该方法仅支持传入单个工作表名,改为遍历配置列表逐个处理工作表 - 新增工作表独立配置项,可自定义每个表的起始行、校验列,适配Sheet1从第2行、Sheet2/Sheet3从第6行开始的需求
- 优化数据读取范围,不再固定读取1000行,仅读取有数据的区间,运行效率更高
- 修复原代码数组越界问题,原循环条件
i <= aiCol.length会超出数组索引范围,调整为i < aiCol.length - 新增序号非数字判断逻辑,避免非数字内容干扰最大序号计算
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

