Google apps script 通过唯一标识符,使用google apps脚本根据另一个工作表中的数据更新第一个工作表中的数据

Google apps script 通过唯一标识符,使用google apps脚本根据另一个工作表中的数据更新第一个工作表中的数据,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我有两张电子表格 第一页我从外部API获取数据,以查看通过触发器不断更新的所有即将出现的类 id |等级|开始|结束|说明 1 tig焊接7/6/2013 10:30 7/6/2013 12:30等级说明 2 tig焊接7/8/2013 10:30 7/8/2013 12:30等级说明 3 Serger Basics 7/8/2013 14:30 7/6/2013 16:30课程描述 第二个是静态类列表,我在其中添加了第二列“category” 类|类 tig焊接金属加工 谢尔盖基本纺织品 我想

我有两张电子表格

第一页我从外部API获取数据,以查看通过触发器不断更新的所有即将出现的类

id |等级|开始|结束|说明 1 tig焊接7/6/2013 10:30 7/6/2013 12:30等级说明 2 tig焊接7/8/2013 10:30 7/8/2013 12:30等级说明 3 Serger Basics 7/8/2013 14:30 7/6/2013 16:30课程描述

第二个是静态类列表,我在其中添加了第二列“category”

类|类 tig焊接金属加工 谢尔盖基本纺织品

我想检查两张电子表格中的标题是否匹配,如果匹配,请在第一张表格中添加类别,如:

id |标题|开始|结束|描述|类别

然后,我将该电子表格作为JSON提供给第三方web应用程序。听起来需要做很多工作,但还没有找到其他解决方案。 这是正在进行的工作代码,其中有一个注释我被卡住了

function listClasses(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0]; //list of all upcoming classes
 var sheet1 = ss.getSheets()[1]; //list of titles

 var data = sheet.getDataRange().getValues(); // read all data in the sheet
 var data1 = sheet1.getDataRange().getValues();

 for(n=1;n<data1.length;++n){
    var title1 = data1[n][0];
    var category = data1[n][1];

  // compare Check if title appears in column A of sheet 2.
  if (ArrayLib.find(data1, 0, title1) != -1) {
    // Yes it does, do something in sheet 0
    for( var row = data.length -1; row >= 0; --row )
      if (data[row][1] == title1){

          var id = data[row][0];
          var title = data[row][1];
          var start = data[row][3];
          var finish = data[row][4];
          var description = data[row][5];
          var category = data1[n][1];

  // and here is where I got stuck!
  data.appendRow([category]); 


}
        }

      }

    }
函数列表类(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheets()[0];//所有即将出现的类的列表
var sheet1=ss.getSheets()[1];//标题列表
var data=sheet.getDataRange().getValues();//读取工作表中的所有数据
var data1=sheet1.getDataRange().getValues();
对于(n=1;n=0;--行)
如果(数据[行][1]==标题1){
var id=数据[行][0];
var title=数据[行][1];
var start=数据[行][3];
var finish=数据[行][4];
var description=数据[行][5];
var类别=数据1[n][1];
//这就是我被卡住的地方!
数据。附录行([类别]);
}
}
}
}

根据您的评论,您似乎想在匹配的行上添加一列。。。在数组级别,只要在找到匹配项时将值赋给行数组元素,就可以很容易地完成这项工作。唯一需要注意的是,每一行(即代表一行的每个数组)必须具有完全相同的长度,否则您将无法将其正确地写回工作表

您没有提到的一个细节是类别行是否为最后一行,和/或您的电子表格上是否有一个标题,标题中有“类别”的列名

在第一段代码中,我假设您有,然后您可以简单地使用

    data[row][6]=category;// because data[row][6] already exist in this array because the header defines a range width of (at least) 7 when you used getDataRange()
    ...
    // and after the loop just write back data to sheet like this
    sheet.getRange(1,1,data.length,data[0].length).setValues(data);
如果列“category”不存在,那么您应该使用该方法在循环的第一次运行时在每行中添加一个元素,以便每行都存在
数据[row][6]
。。。大概是这样的:

if(data[row].length<7){data[row].push(' ')};// ensure that data[row][6] does exist

if(数据[行].length是否希望将新行添加到工作表的底部,还是希望在回写到工作表之前对其进行排序?我想在工作表一中的现有行中添加一列我想我希望清除与类标题匹配的现有行,并使用类别更新的数据添加回写。这有意义吗?这正是我在寻找什么。谢谢!数据增长了,我在运行此代码时遇到另一个问题,应用程序脚本中的数据错误太多。虽然没有太多,但我不认为…我遗漏了什么吗?我在这里创建了一个新问题: