根据行中单元格中的值将特定行复制到新的Google表格中(JavaScript)

时间:2019-04-20 22:02:40

标签: javascript google-apps-script

我正在尝试创建一个Google脚本,该脚本基于单元格的值将行从一个Google表格复制到另一个表格中。

我希望脚本运行,并在“ H”列中检查单词“ done”,如果找到,则将该数据行复制到另一张表的下一个空行中。

我尝试了不同的方法,但是仍然缺少一些东西。它总是指向“ else”,所以我猜测问题出在var data = range.getValues();

function transfer1() {

    var ss = SpreadsheetApp.getActive();
    var sheet1test = ss.getSheetByName("Sheet1test");
    var dbtest = ss.getSheetByName("dbtest2");


    var dataRange = sheet1test.getDataRange();
    var range = sheet1test.getRange("A2:H" + dataRange.getLastRow());
    var data = range.getValues();

    if ( data == "done" ) { //it seems that "done" is never found in any cell??

        dbtest.getRange(dbtest.getLastRow()+1, 1, data.length, data[0].length).setValues(data);

    } else {

        do nothing

    }
}

我希望只复制值“ done”的行。我想念什么?

1 个答案:

答案 0 :(得分:0)

尝试一下:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),7);//starting at column2
  var data=rg1.getValues();
  for(var i=0;i<data.length;i++) {
    if(data[i][6]=="done") {
      sh2.appendRow(data[i]);
    }
  }
}

或者这适用于:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),sh1.getLastColumn()-1);//starting at column2
  var data=rg1.getValues();
  for(var i=1;i<data.length;i++) {
    if(data[i][6]=="done") {
      sh1.getRange(i+1,2,1,sh1.getLastColumn()-1).copyTo(sh2.getRange(sh2.getLastRow()+1,1,1,sh1.getLastColumn()-1));
    }
  }
}

甚至是这个:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),sh1.getLastColumn()-1);//starting at column2
  var data=rg1.getValues();
  for(var i=0;i<data.length;i++) {
    if(data[i][6]!="done") {
      data.splice(i,1);
    }
  }
  sh2.getRange(sh2.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}

实际上,这很有趣:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getDataRange();
  var data=rg1.getValues();
  data.map(function(r){return r.splice(0,1);});
  for(var i=0;i<data.length;i++) {
    if(data[i][6]!="done") {
      data.splice(i,1);
    }
  }
  sh2.getRange(sh2.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}