谷歌工作表脚本有条件地将行移动到另一个电子表格

时间:2017-11-27 19:03:23

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

我是新手,我在试图解决这个问题时遇到了一些麻烦。我有一个电子表格,可以从谷歌表单中收集数据。我试图找到一种方法来根据列回答移动该数据到不同的谷歌表。 (不是同一文档中的工作表,而是一起使用不同的文档)。似乎有一些关于移动到同一文档中的不同选项卡的信息,但不是一个不同的文档。

我首先要说的是我只尝试了一个IMPORTRANGE函数,但它只反映了数据,并且不允许您更新或更改单元格。

到目前为止,这是我能够拼凑起来的东西,但我可能会离开。

我有一个每小时都会运行的触发器。

function myFunction() {
 var ss = SpreadsheetApp.openById('1U0I9SkbGkHgm-vRkwf2Ppc_yxlqrVlg2t8yKRy3sYuI');
 var sheetOrg = ss.getSheetByName("Form Responses 1");
 var value1ToWatch = "ANDERSON";
 var value2ToWatch = "BARNES";
 var sheetNameToMoveTheRowTo = "Sheet1"; //sheet has same name for each target openByID(" *url key* ")
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var ts1 =SpreadsheetApp.openById("1PxV1PQrMdu_2aSru4dpan8cUgHYdlYPUp5anyzjMAms");
     sheet1in = ts1.getSheetByName("Sheet1");
 var ts2 = SpreadsheetApp.openById("1BYyQZNiXc2QqsyqWs7uazjl5B6mfFYM1xj3u8gWyYOQ");
     sheet1in = ts2.getSheetByName("Sheet1");

 arr = [], 
values = sheetOrg.getDataRange().getValues(),
i = values.length;
while (--i) {
  if (value1ToWatch.indexOf(values[i][1]) > -1) {
    arr.unshift(values[i])
   sheetOrg.deleteRow(i + 1) 
   sheet1in.getRange(sheet1in.getLastRow()+1, 1, arr.length, 
     arr[0].length).setValues(arr); 
  };

 if (value2ToWatch.indexOf(values[i][1]) > -1) {
    arr.unshift(values[i])
   sheetOrg.deleteRow(i + 1) 
   sheet2in.getRange(sheet2in.getLastRow()+1, 1, arr.length, 
 arr[0].length).setValues(arr);
};
}
}
  1. 工作表google表单将信息转储到"表单回复1"。
  2. B列是我想要获取值的单元格。 (总共有9种不同的值可以像" ANDERSON"," BARNES"," SMITH"等)。
  3. 对于sheetNameToMoveTheRowTo是" Sheet1" - 这可能令人困惑,我可能需要改变它,但是例如
    • ts1 = SpreadsheetApp.openById(" 1PxV1PQrMdu_2aSru4dpan8cUgHYdlYPUp5anyzjMAms")我想要移动信息的工作表名称是" Sheet1"。
    • ts2 = SpreadsheetApp.openById(" 1BYyQZNiXc2QqsyqWs7uazjl5B6mfFYM1xj3u8gWyYOQ")工作表名称也是" Sheet1"但在另一份文件中。
  4. 我想如果我能够得到" ANDERSON"一个工作,然后我可以为每个可能的响应添加额外的变量,只需复制和粘贴额外的" IF"语句,只是更改valueToWatch和targetSheet值。 < =如果不正确请告诉我

    我试过调试,并运行上面的脚本但没有任何反应。调试中没有报告错误,但它没有移动任何信息。

    知道我做错了什么吗?

    //更新我让这个工作。我已经更新了列出的代码以及对我有用的代码。

1 个答案:

答案 0 :(得分:0)

以下是将数据从一个电子表格移动到另一个电子表格的简单示例。

function movingDataToSS(){
  var ss=SpreadsheetApp.getActive();
  var dss=SpreadsheetApp.openById('ssId');
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var dsh=dss.getSheetByName('Sheet1');
  var drg=dsh.getRange(1,1,rg.getHeight(),rg.getWidth()).setValues(vA);
}

如果您有兴趣通过从奇数行甚至列中获取输出来为输出添加一些条件。

function movingDataOddRowsAndEvenCols(){
  var ss=SpreadsheetApp.getActive();
  var dss=SpreadsheetApp.openById('ssId');
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var h=rg.getHeight();
  var w=rg.getWidth();
  var dsh=dss.getSheetByName('Sheet1');
  for(var i=0;i<h;i++){
    var out=[];
    if(i%2==0){
      for(var j=0;j<w;j++){
        if(j%2==1){
          out.push(vA[i][j]);
        }
      }
      dsh.appendRow(out);
    }
  }
}