如何在Google Apps Script中将区域值重复n次到另一区域?
问题分析
你的代码核心问题是每次写入F列时都从第1行开始,覆盖了之前的内容,所以最终只保留了最后一个C列值的重复结果。另外还有循环条件不够灵活、单元格读写效率低的问题。
修正后的代码
function Repeatn() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const repeatCount = sheet.getRange(1, 1).getValue(); // 批量获取C列第5行开始的非空数据 const sourceValues = sheet.getRange(5, 3, sheet.getLastRow() - 4, 1) .getValues() .filter(row => row[0] !== ""); // 生成需要写入的目标数组 const targetValues = []; sourceValues.forEach(row => { const value = row[0]; for (let i = 0; i < repeatCount; i++) { targetValues.push([value]); } }); // 清空F列原有内容(可选),然后批量写入 if (targetValues.length > 0) { sheet.getRange(1, 6, targetValues.length, 1).clearContent(); sheet.getRange(1, 6, targetValues.length, 1).setValues(targetValues); } }
关键改进点
- 避免覆盖问题:用数组收集所有需要写入的内容,最后一次性写入F列,确保内容依次排列。
- 动态获取数据源:通过
getLastRow()和filter自动获取C列从第5行开始的所有非空值,不需要固定循环次数。 - 提升效率:批量读写单元格(
getValues()/setValues())比单独调用getValue()/setValue()快得多,尤其当数据量较大时。
效果说明
运行修正后的代码后,C列从第5行开始的每个值会按照A1指定的次数重复,依次填充到F列,和你预期的效果一致。
内容的提问来源于stack exchange,提问作者Krishna Sharma
相关产品推荐
相关产品推荐

