如何将来自多个 g-sheets 的数据合并为一个?

How can I combine data from multiple g-sheets into one?

这里是 link 的例子:

https://docs.google.com/spreadsheets/d/1qNN3G4c9FNGk3bwKXJODUuIQIe5dRfVOwu8M7ZgU384/edit#gid=329910889

我想将“第一”、“第二”和“第三”选项卡中的数据合并到“合并”选项卡中,所有选项卡都在同一 Headers(标题、类型、流派)

如果有脚本,请告诉我 - 因为我需要使用它的实际文档有超过 30 个选项卡,公式可能会崩溃。

解释:

  • 以下脚本使用 forEach 遍历 sheet, 不包括 exclude_sheets 数组中提到的那些。

  • 对于每个 sheet,它会将您需要在脚本开头设置的特定范围之间的值存储到 data 数组。

  • 范围从第第6行(start_row)开始,第列Astart_col=1) 和 C 列 (end_col = 3)。结束行被定义为包含内容的最后一行,因此您无需手动设置它并且它在 sheet 之间也可以不同。但是,sheet 之间的起始行和列范围必须相同。

  • 它最终将 data 粘贴到从单元格 A2 开始的测试 sheet (res_sheet = 'Test')。

请随意修改以上参数,但请尊重底层逻辑,否则脚本将无法正常运行。


Google Apps 脚本解决方案:

function myFunction() {
  
  const ss = SpreadsheetApp.getActive();
  const sheets = ss.getSheets();
  const exclude_sheets = ['Combined','Test'];
  const res_sheet = 'Test';
  const start_row = 6;
  const start_col = 1;
  const end_col = 3;
  
  const data = []
  sheets.forEach(sh=>{
                 
  if(!exclude_sheets.includes(sh.getName())){
  let temp = sh.getRange(start_row,start_col,sh.getLastRow()-start_row+1,end_col).getValues()
  data.push(...temp);
  }});

 ss.getSheetByName(res_sheet).getRange(2,1,data.length,data[0].length).setValues(data);
 
}

请确保在使用此解决方案之前已启用 V8 runtime enviroment


参考文献: