将条件下的值复制到不同的工作表

时间:2017-09-10 22:04:00

标签: google-apps-script google-sheets

每天,我在工作表中添加一行,(使用onEdit()和我时间戳 - 此函数未显示在此处) 问题发生在最后。

请参阅以下内容:

First sheet

我的目的是将值复制到名为"付款"的另一张纸上,选择一种付款方式:PPAL,CASH或其他。 (本例中为PPAL)

function typesOfPayment() {

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("John");
var rows = ss.getMaxRows();// *because I add a line per day, on the top*
var columns = ss.getMaxColumns();// *I probably never will add columns...*
var values = ss.getRange(1,1,rows,columns).getValues();
var target = new Array();

     for(i=0;i<values.length;i++) {
        if (values[i][2]=="PPAL"){ // *if condition is true copy the whole row to target*
        target.push(values[i]);// *copy the whole row*
        }  
     }

var sDest=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Payment");
sDest.getRange(1,1,rows,columns).setValues(target); 
}

我收到最后一条错误消息:&#34; 0已指定,但等待8&#34;。 var行似乎错了?

我迷路了。怎么办?

感谢您的帮助。 埃里克

1 个答案:

答案 0 :(得分:1)

修改要点:

  1. 数组索引从0开始。因此PPAL列的索引为1。
  2. getRange()使用的setValues()的行数和列数是target的大小setValues()
  3. 当这些内容反映到您的脚本时,修改后的脚本如下所示。

    修改后的脚本:

    function typesOfPayment() {
      var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("John");
      var rows = ss.getMaxRows();// *because I add a line per day, on the top*
      var columns = ss.getMaxColumns();// *I probably never will add columns...*
      var values = ss.getRange(1,1,rows,columns).getValues();
      var target = new Array();
      for(i=0;i<values.length;i++) {
        if (values[i][1]=="PPAL"){ // *if condition is true copy the whole row to target*
          target.push(values[i]);// *copy the whole row*
        }  
      }
      var sDest=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Payment");
      sDest.getRange(1,1,target.length,target[0].length).setValues(target); 
    }
    

    如果我误解了你的问题,我很抱歉。