如何编写循环拼接Google Sheets数据与指定单词并修正错误脚本
Google Sheets 字符串拼接脚本修正方案
你原脚本存在以下4个核心逻辑错误:
- 读写范围搞反:需求是A列存原始单词,拼接后输出到其他列,但原脚本把A列设为写入目标、B列设为数据源,刚好和需求相反
- 多单元格取值方法错误:
getValue()只能获取单个单元格的内容,要获取整列所有单元格的内容需要调用getValues(),返回的是二维数组,格式为[[行1值], [行2值], ...] - 循环边界错误:数组下标从0开始,且共有
lastRow条数据,循环条件应为i < lastRow,用<=会出现下标越界 - 整列重复赋值错误:循环内直接对整列范围调用
setValue(),会把整列所有单元格都覆盖为当前循环的拼接结果,也会导致大量重复IO,效率极低
修正后的代码(批量写入优化版,数据量大也不会卡顿)
function myJoin() { var sheet1 = SpreadsheetApp.getActiveSpreadsheet(); var sh0 = sheet1.getSheets()[0]; var lastRow = sh0.getLastRow(); // 读取A列原始单词,范围是第1行第1列到第lastRow行第1列 var originRange = sh0.getRange(1, 1, lastRow, 1); var originValues = originRange.getValues(); // 构建输出结果数组 var outputValues = []; for(var i = 0; i < lastRow; i++){ // 每个元素是二维数组的[i][0],拼接MASTER后放进结果数组 outputValues.push([originValues[i][0] + "MASTER"]); } // 把结果一次性写入B列(第2列),如果要写到其他列修改第二个参数即可 var outputRange = sh0.getRange(1, 2, lastRow, 1); outputRange.setValues(outputValues); }
补充说明
如果不需要批量写入,要逐行写入的话,只需要在循环内指定对应行的范围调用setValue即可,但数据量超过100条时不推荐该写法,性能会比批量写入差很多。
内容的提问来源于stack exchange,提问作者Joshua Roberts
相关产品推荐
相关产品推荐

