使用谷歌应用程序脚本通过唯一标识符,根据来自其他工作表的数据更新第一页中的数据

时间:2013-07-08 19:19:13

标签: google-apps-script google-sheets google-spreadsheet-api

我在电子表格中有两张纸。

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

id |班级|开始|完成|描述 1 tig welding 7/6/2013 10:30 7/6/2013 12:30课程描述 2 tig welding 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焊接金属加工 Serger Basics纺织品

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

id |标题|开始|完成|描述|类

然后我将该电子表格作为JSON提供给第三方网络应用。听起来很多工作,但没有提出任何其他解决方案。 这是正在进行中的工作代码,其中包含我被卡住的注释。

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]); 


}
        }

      }

    }

1 个答案:

答案 0 :(得分:0)

从您的评论中,您似乎想要在匹配的行上添加一个列...您可以在数组级别轻松地执行此操作,只需在找到匹配项时将值分配给行数组元素即可。唯一需要注意的是每行(即每个代表一行的数组)必须具有完全相同的长度,否则您将无法将其正确地写回到工作表中。

您没有提及的一个细节是类别行是否是最后一个和/或如果您的电子表格上有一个标题为“类别”的列名称。

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

    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);

如果列“类别”不存在,那么您应该使用push方法在循环内的第一次运行中添加元素,以便{{1每行存在......像这样:

data[row][6]

这一行应该放在迭代数据数组的循环中(索引“row”)

通过你提供的一些信息进一步推进是有点困难,我希望我做出了正确的猜测。