Google Apps Script复制表单仅值到数据表下空行仅单列复制问题求助
Google Sheets 脚本复制值问题修复方案
原代码核心错误
- 变量定义错误:
var datasheet = ss.getSheetByName("reciepedata").getLastRow()+1;将datasheet错误赋值为行号数字,而非工作表对象,后续调用方法会直接报错 - 值覆盖问题:反复对
values变量重新赋值,之前读取的标题、类型、REF、份量等值全部被覆盖,最后仅保留METHOD列的内容,自然只能写入单列 - 数组结构错误:混搭
getValue()(返回单个值)和getValues()(返回二维数组),额外嵌套多层方括号,导致数组结构和目标写入范围不匹配 - 写入参数错误:设定的写入范围是19行1列,不符合多列写入需求,且
getLastRow未加括号属于无效调用
修复后完整代码
function copyRecipeData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var formSS = ss.getSheetByName("NEW/ADD"); var datasheet = ss.getSheetByName("reciepedata"); // 读取食谱基础信息 var title = formSS.getRange("F6").getValue(); var type = formSS.getRange("F7").getValue(); var ref = formSS.getRange("F8").getValue(); var serves = formSS.getRange("F9").getValue(); // 初始化写入数组,每个元素对应目标表的一行 var outputValues = []; // 循环读取19行食材相关的5列数据 for(var i = 12; i <= 30; i++) { var ingredient = formSS.getRange("D"+i).getValue(); var amount = formSS.getRange("E"+i).getValue(); var measurement = formSS.getRange("F"+i).getValue(); var spec = formSS.getRange("G"+i).getValue(); var method = formSS.getRange("H"+i).getValue(); // 每行数据结构:[标题, 类型, REF, 份量, 食材, 数量, 单位, 规格, 步骤] // 可根据你目标表的实际列顺序调整 outputValues.push([title, type, ref, serves, ingredient, amount, measurement, spec, method]); } // 获取目标表第一个空行的行号 var startRow = datasheet.getLastRow() + 1; // 写入数据:行数为outputValues的长度,列数为每行元素的数量 datasheet.getRange(startRow, 1, outputValues.length, outputValues[0].length).setValues(outputValues); }
调整说明
- 如果你的目标表不需要每行都重复基础信息,只需要第一行带,可自行调整数组结构
- 如果你的目标表列顺序和示例不同,调整
push方法内的元素顺序即可 - 代码默认仅复制值,符合需求
内容的提问来源于stack exchange,提问作者Chantal Wells
相关产品推荐
相关产品推荐

