【问题标题】:Copy a specific row to new google sheet based on value in a cell in the row (JavaScript)根据行中单元格中的值将特定行复制到新的谷歌工作表(JavaScript)
【发布时间】:2019-04-20 22:02:39
【问题描述】:

我正在尝试创建一个 Google 脚本,它可以根据单元格的值将行从一个 Google 表格复制到另一个表格中。

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

我尝试了不同的方法,但仍然缺少一些东西。它总是指向 "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

    }
}

我希望只复制具有“完成”值的行。我错过了什么?

【问题讨论】:

  • getValues 返回“二维值数组,先按行索引,然后按列索引”doc。所以,“数据”是一个数组,永远不会“等于”“完成”。然后是评估哪个行的问题。研究一些循环通过getValues 返回的值的示例。另外,看看替代的getRange(row, column, numRows, numColumns)doc,其中包括一个很好的循环示例。

标签: javascript google-apps-script


【解决方案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(),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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多