You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:05