Google Apps Script修改文本后如何将数组值写入Sheet2单元格
问题根因
- Google Sheets的
setValues()方法要求传入二维数组,第一维度对应表格行,第二维度对应表格列。你当前的arraymod是一维数组,外层包裹[]后得到[ [值1, 值2, ...] ]的1行多列结构,只能写入同一行的多个列,无法逐行写入第一列。 - 你计算循环次数时用
arraytexttomod.length -1会漏掉最后一行源数据,属于逻辑错误。 - 写入范围的行列数必须和传入数组的行列数完全匹配,你之前调用
getRange(2,1)未指定行数、列数,和数组结构不匹配导致写入失败。
修复后代码
// Array to cells function textReplaceLoop2() { var sheet = SpreadsheetApp.getActive(); var ss1 = sheet.getSheetByName('Sheet1'); var ss2 = sheet.getSheetByName('Sheet2'); // 读取Sheet1第一列从第2行开始的所有数据 var arraytexttomod = ss1.getRange(2,1,ss1.getLastRow(),1).getValues(); var arraymod = []; // 循环修改文本,构造符合setValues要求的二维数组 for (var i = 0 ; i < arraytexttomod.length ; i++ ) { var textmodread = arraytexttomod[i]; var textmodmod = textmodread.toString().replaceAll(".", ""); // 每一行数据存为单独的数组元素 arraymod.push([textmodmod]); } // 指定写入范围的行数、列数和数组完全匹配,直接写入 ss2.getRange(2,1,arraymod.length,1).setValues(arraymod); }
关键修改说明
- 移除了行数减1的错误逻辑,遍历所有读取到的源数据行,不会遗漏数据
- 构造
arraymod时每个处理后的值都放在单独的数组中,最终得到[ [值1], [值2], ...]的N行1列二维结构,符合逐行写入第一列的需求 - 写入时调用
getRange(2,1,arraymod.length,1)指定和数组一致的行数、列数,结构匹配即可正常写入
内容的提问来源于stack exchange,提问作者Dancul
相关产品推荐
相关产品推荐

