Google apps script 如何将两张谷歌工作表合并为一组?

Google apps script 如何将两张谷歌工作表合并为一组?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我知道我的问题有点奇怪,但请帮帮我 我有两张表格,其中有4列(学区、学校、学生、分数)。两者都是根据地区>学校>学生>分数*排序的 因此,在表1中有4000名学生的分数,在表2中有2000名学生的分数,其中一些是新生,一些是老学生,出现在表1中,但他们在表2中得到了更新的分数 所以现在我想要的是如何合并这些表,这样我就可以得到新的表,它应该与所有的新学生一起排序,并且有更新的分数??? 我有一种方法,但我不知道如何实现这一点- 。获取第二张表格,然后获取第一张表格,然后只添加那些不在第二张表格中

我知道我的问题有点奇怪,但请帮帮我

我有两张表格,其中有4列(学区、学校、学生、分数)。两者都是根据地区>学校>学生>分数*排序的

因此,在表1中有4000名学生的分数,在表2中有2000名学生的分数,其中一些是新生,一些是老学生,出现在表1中,但他们在表2中得到了更新的分数

所以现在我想要的是如何合并这些表,这样我就可以得到新的表,它应该与所有的新学生一起排序,并且有更新的分数???

我有一种方法,但我不知道如何实现这一点-

。获取第二张表格,然后获取第一张表格,然后只添加那些不在第二张表格中的地区、学校、学生的行。因此,只有未更新的数据(表2不存在)才会添加到表2中。然后对其进行排序。

尝试以下方法:

function updateMarks() {
  const ss=SpreadsheetApp.getActive()
  const sh1=ss.getSheetByName('Sheet1');//old marks
  const rg1=sh1.getRange(2,1,sh1.getLastRow()-1,sh1.getLastColumn());
  var vs1=rg1.getValues();
  var js1=vs1.map(function(r,i){return r[0]+r[1]+r[2];})
  const sh2=ss.getSheetByName('Sheet2');//updated marks
  const rg2=sh2.getRange(2,1,sh2.getLastRow()-1,sh2.getLastColumn());
  var vs2=rg2.getValues(); 
  const sh3=ss.getSheetByName('Sheet3');//combined marks
  sh3.clear();//clear sheet everytime
  sh3.appendRow(['District','School','Student','Marks']);//add headers
  vs2.forEach(function(r,i){
    let idx=js1.indexOf(r[0]+r[1]+r[2]);
    if(idx>-1) {
      vs1[idx]=r;
    }else{
      vs1.push(r);
    }
  });
  const rg3=sh3.getRange(2,1,vs1.length,vs1[0].length);
  rg3.setValues(vs1).sort([{column:1,ascending:true},{column:2,ascending:true},{column:3,ascending:true},{column:4,ascending:true}]);
}

Sheet3是输出工作表

例外:范围内的行数必须至少为1。(第4行,文件“代码”)我在sheet1中有数据,但它仍然抛出此错误。请帮助。我想知道您的工作表时间中是否有不正确的地方。谢谢。我在名为sheet1、sheet2、sheet3的不同文件上尝试此函数。sheet1、sheet2和sheet3不是文件名,而是工作表名。文件名是电子表格的名称