App Script复制数据异常:需从A2行粘贴而非A3行的调整问询
问题解决:调整脚本让数据从A2行开始追加
你的脚本现在把数据粘到A3,核心原因是目标表「Name My Sheet Destiny」的A2行Q列有公式,getLastRow()会把带公式的行算作已占用行,导致lastrowB = sheetB.getLastRow()+1算出的结果是3。要改成从A2开始追加,我们得换个方式计算目标表的起始粘贴行——只看要粘贴数据的A-O列的实际数据行数,别被Q列的公式干扰。
修改后的完整脚本
const app = SpreadsheetApp; const ss = app.getActiveSpreadsheet(); const sheet1 = ss.getSheetByName("Name My Sheet dataBase"); const lastrowD = sheet1.getLastRow(); const dados = sheet1.getRange("A2:O" + lastrowD).getValues(); const ssB = app.openById("ID My Sheet Destiny"); const sheetB = ssB.getSheetByName("Name My Sheet Destiny"); // 统计A列非空单元格的数量(只算实际有数据的行) const filledRowsInA = sheetB.getRange("A:A").getValues().filter(cell => cell[0] !== "").length; // 如果A列只有表头(A1),就从A2开始;否则从现有数据的下一行开始 const startRow = filledRowsInA === 1 ? 2 : filledRowsInA + 1; // 用dados.length来确定粘贴行数,比原脚本的lastrowD-1更稳妥 sheetB.getRange(startRow, 1, dados.length, 15).setValues(dados);
核心修改点
- 重新计算起始粘贴行:通过过滤A列的非空单元格,避开Q列公式对
getLastRow()的影响,确保第一次运行时能定位到A2。 - 优化粘贴行数:改用
dados.length代替lastrowD - 1,如果原表没有数据,不会出现无效的0行数粘贴,避免报错。
这样改完后,第一次运行数据会准确放到A2,Q列的公式会自动计算该行的到期日期;之后每次运行,数据都会追加到现有数据的下一行,完全符合你的需求。
内容的提问来源于stack exchange,提问作者dkrug3r
相关产品推荐
相关产品推荐

