Google Apps脚本实现表格P列值复制到同行首个空白后续列问题求助
调整后可实现逐行判断逻辑的代码
function copyVals () { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('Sheet1'); const lastRow = sheet.getLastRow(); // 无有效数据直接退出 if (lastRow < 2) return; // 读取第2行起P、Q、R三列的所有数据,列号对应P=16、Q=17、R=18 const dataRange = sheet.getRange(2, 16, lastRow - 1, 3); const rowValues = dataRange.getValues(); // 逐行处理 for (let i = 0; i < rowValues.length; i++) { const pValue = rowValues[i][0]; // P列当前行无值则跳过 if (!pValue) continue; // 优先写入空的Q列 if (!rowValues[i][1]) { rowValues[i][1] = pValue; } // Q列有值则写入空的R列 else if (!rowValues[i][2]) { rowValues[i][2] = pValue; } // 需扩展到S、T等后续列的话,按上面格式加else if判断即可 // 清空当前行P列内容 rowValues[i][0] = ''; } // 把处理后的数据批量写回表格 dataRange.setValues(rowValues); }
改动说明
- 放弃了原代码整列判空的逻辑,改为批量读取P/Q/R三列的所有行数据后逐行判断,避免整列存在值就不处理空行的问题
- 采用批量读写的方式操作数据,相比逐行调用接口读写效率更高,数据量较大时也不会出现卡顿
- 如果需要后续继续扩展到S列及之后的列,只需要修改
getRange的最后一个参数(取值的列数),再在循环中补充对应列的判断逻辑即可
内容的提问来源于stack exchange,提问作者Marc Eli
相关产品推荐
相关产品推荐

