Google Apps Script问题:多单元格值复制至另一工作表新增代码报错
问题分析与解决方案
你遇到的报错核心原因是重复声明了const data变量——const类型的变量不允许被重复定义,所以新增同变量名的代码行必然触发语法错误。以下是两种复制更多单元格的可行方案:
方案1:复制连续的单元格区域
如果要复制的是连续范围(比如D2:F6,涵盖D、E、F三列的2-6行),直接修改getRange的参数即可,无需新增变量:
function myFunction() { const ss = SpreadsheetApp.getActive(); const sh1 = ss.getSheetByName('Nieuw'); const sh2 = ss.getSheetByName('Database'); // 改为目标连续范围,示例为D2到F6 const data = sh1.getRange('D2:F6').getValues(); // 粘贴时匹配数据的行列数:data.length是行数,data[0].length是列数 sh2.getRange(1, sh2.getLastColumn() + 1, data.length, data[0].length).setValues(data); }
原代码仅处理单列数据,现在多列场景下,setValues需要的范围列数要与data的列数一致(用data[0].length动态获取列数),确保数据能完整粘贴到Database的新列起始位置。
方案2:复制不连续的单元格区域
如果要复制的是分散的不连续区域(比如D2:D6和G2:G6),需要分别获取数据后合并成统一的二维数组再粘贴:
function myFunction() { const ss = SpreadsheetApp.getActive(); const sh1 = ss.getSheetByName('Nieuw'); const sh2 = ss.getSheetByName('Database'); // 分别获取两个不连续范围的数据 const dataRange1 = sh1.getRange('D2:D6').getValues(); const dataRange2 = sh1.getRange('G2:G6').getValues(); // 合并数组:将两个范围的对应行数据拼接成一行 const mergedData = dataRange1.map((row, index) => [...row, ...dataRange2[index]]); // 粘贴合并后的数据 sh2.getRange(1, sh2.getLastColumn() + 1, mergedData.length, mergedData[0].length).setValues(mergedData); }
通过map遍历每一行,把两个范围的对应行数据合并为一行,最终得到包含多列的二维数组,再完成粘贴操作。
内容的提问来源于stack exchange,提问作者Mike XD
相关产品推荐
相关产品推荐

