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

如何将单行数据源批量追加到Google Sheets指定工作表的多行中?

解决方案

核心思路是把单行数据转换成包含7次重复的二维数组,然后一次性写入表格,避免多次重复调用API,既简化代码又提升执行效率。

优化后的代码如下:

function copytomaster(){
  const sheet = SpreadsheetApp.openById("1Z319ABahpIhAKU8Hfc1J18Ss8_2kxFYYa1ySbjgDMQA");
  const check_in_sheet = sheet.getSheetByName("Check In");
  const master = sheet.getSheetByName("Data");
  const lastrow = master.getLastRow() + 1;
  const rowCount = 7; // 固定重复7行

  // 读取7行的核心数据
  const check_in_values = check_in_sheet.getRange(11, 1, rowCount, 14).getValues();

  // 读取单行数据并转换为7行重复的二维数组
  const biometrics_values = Array(rowCount).fill(check_in_sheet.getRange(4,7,1,4).getValues()[0]);
  const sleep_values = Array(rowCount).fill([check_in_sheet.getRange(3,4,1,1).getValue()]);
  const steps_value = Array(rowCount).fill([check_in_sheet.getRange(4,4,1,1).getValue()]);
  const training_value = Array(rowCount).fill([check_in_sheet.getRange(3,6,1,1).getValue()]);
  const cardio_value = Array(rowCount).fill([check_in_sheet.getRange(4,6,1,1).getValue()]);
  const nutrition_values = Array(rowCount).fill(check_in_sheet.getRange(4,11,1,4).getValues()[0]);
  
  // 处理其他单行数据
  const achievement_value = Array(rowCount).fill([check_in_sheet.getRange(7,3).getValue()]);
  const improvement_value = Array(rowCount).fill([check_in_sheet.getRange(7,7).getValue()]);
  const struggle_value = Array(rowCount).fill([check_in_sheet.getRange(7,11).getValue()]);
  const bb_value = Array(rowCount).fill([check_in_sheet.getRange(30,2).getValue()]);
  const nt_value = Array(rowCount).fill([check_in_sheet.getRange(31,2).getValue()]);
  const diet_value = Array(rowCount).fill([check_in_sheet.getRange(32,2).getValue()]);
  const ao_value = Array(rowCount).fill([check_in_sheet.getRange(33,2).getValue()]);
  const leaner_value = Array(rowCount).fill([check_in_sheet.getRange(30,5).getValue()]);
  const clothes_value = Array(rowCount).fill([check_in_sheet.getRange(31,5).getValue()]);
  const ms_value = Array(rowCount).fill([check_in_sheet.getRange(33,5).getValue()]);
  const alcohol_value = Array(rowCount).fill([check_in_sheet.getRange(32,5).getValue()]);
  const meds_value = Array(rowCount).fill([check_in_sheet.getRange(30,12).getValue()]);
  const travel_value = Array(rowCount).fill([check_in_sheet.getRange(31,12).getValue()]);
  const other_value = Array(rowCount).fill([check_in_sheet.getRange(32,12).getValue()]);
  const done_value = Array(rowCount).fill([check_in_sheet.getRange(33,13).getValue()]);
  const name_value = Array(rowCount).fill([check_in_sheet.getRange(1,1).getValue()]);

  // 一次性写入所有数据
  master.getRange(lastrow, 1, rowCount, 14).setValues(check_in_values);
  master.getRange(lastrow, 15, rowCount, 4).setValues(biometrics_values);
  master.getRange(lastrow, 19, rowCount, 1).setValues(sleep_values);
  master.getRange(lastrow, 20, rowCount, 1).setValues(steps_value);
  master.getRange(lastrow, 21, rowCount, 1).setValues(training_value);
  master.getRange(lastrow, 22, rowCount, 1).setValues(cardio_value);
  master.getRange(lastrow, 23, rowCount, 4).setValues(nutrition_values);
  master.getRange(lastrow, 27, rowCount, 1).setValues(achievement_value);
  master.getRange(lastrow, 28, rowCount, 1).setValues(improvement_value);
  master.getRange(lastrow, 29, rowCount, 1).setValues(struggle_value);
  master.getRange(lastrow, 30, rowCount, 1).setValues(bb_value);
  master.getRange(lastrow, 31, rowCount, 1).setValues(nt_value);
  master.getRange(lastrow, 32, rowCount, 1).setValues(diet_value);
  master.getRange(lastrow, 33, rowCount, 1).setValues(ao_value);
  master.getRange(lastrow, 34, rowCount, 1).setValues(leaner_value);
  master.getRange(lastrow, 35, rowCount, 1).setValues(clothes_value);
  master.getRange(lastrow, 36, rowCount, 1).setValues(alcohol_value);
  master.getRange(lastrow, 44, rowCount, 1).setValues(ms_value);
  master.getRange(lastrow, 37, rowCount, 1).setValues(meds_value);
  master.getRange(lastrow, 38, rowCount, 1).setValues(travel_value);
  master.getRange(lastrow, 39, rowCount, 1).setValues(other_value);
  master.getRange(lastrow, 40, rowCount, 1).setValues(done_value);
  master.getRange(lastrow, 41, rowCount, 1).setValues(name_value);
}

关键优化说明:

  • 单行转多行:用Array(rowCount).fill(...)快速生成重复7行的二维数组。多列单行数据先取一维数组再填充,单列单行数据把值包裹在数组中再填充,完美适配setValues的参数要求。
  • 减少API调用:把原来几十次重复的setValues/setValue调用缩减到20次以内,既提升脚本运行速度,又避免触发Google Apps Script的API调用次数限制。

内容的提问来源于stack exchange,提问作者Emily Beale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:24:51