自动地从一个片将数据移动到另一个在谷歌文档(Automatically move data from

2019-09-01 09:14发布

我有我跟踪我需要完成的任务的电子表格,完成一次我进入最后一栏的日期。 我要的是为完成任务被转移到表2。

目前我有片1命名SUD_schedule,我想数据的已完成的行要被移动到名为SUD_archive片2。 我已经通过了论坛帖子看过了,我已经试过脚本的变化,但到目前为止没有运气。 我今天来最接近的是这个脚本:

function onEdit() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();//Original sheet
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];//target sheet
   // to act on only one sheet, check the sheet name here:
  //If it si not first sheet, it will do nothing
  if (sheet1.getSheetName() != "SUD_schedule") {
    return; 
  }
  //Get Row and column index of active cell.
  var rowIndex = sheet1.getActiveRange().getRowIndex();
  var colIndex =  sheet1.getActiveRange().getColumnIndex();

  //If the selected column is 10th and it is not a header row
  if (colIndex == 16 && rowIndex > 1) {
    //Get the data from the current row
   var data = sheet1.getRange(rowIndex,1,1,9).getValues();
   var lastRow2; 
    (sheet2.getLastRow()==0)?lastRow2=1:lastRow2=sheet2.getLastRow()+1;
    //Copy the data to the lastRow+1th row in target sheet
    sheet2.getRange(lastRow2,1,1,data[0].length).setValues(data);
  }
}

列P(16)是任务完成日期,第1行被冻结,包含列标题。

任何人可以帮助显示我要去哪里错了。

亲切的问候书斋

Answer 1:

我不知道你有如下使用的语法是完全正确的。

(sheet2.getLastRow()==0)?lastRow2=1:lastRow2=sheet2.getLastRow()+1;
sheet2.getRange(lastRow2,1,1,data[0].length).setValues(data);

如果省略变量lastRow2一起,用这个代替我知道会为某些工作。

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


Answer 2:

你的代码是不通用的,你是你的目标更加复杂化。 下面将解决您的需要。

    function onEdit(){

     var ss = SpreadsheetApp.getActiveSpreadsheet();

     var sheet1 = ss.getSheetByName('SUD_schedule');
     var sheet2 = ss.getSheetByName('SUD_archive');

     var dateColumn = "16";
     var array = []

     var range = sheet1.getRange(1, 1, sheet1.getLastRow(), dateColumn); 

      for (var i = 2; i <= sheet1.getLastRow(); i++) //i iterates from 2 as you say R1 is header
      {
        if(isValidDate(range.getCell(i, dateColumn).getValue()) == true) //checking if any values on column16 is valid date
        {
          data = sheet1.getRange(i, 1, 1, dateColumn).getValues(); //Getting the range values of particular row where C16 is date

          for (var j = 0; j < dateColumn; j++) //Adding the row in array
          {
          array.push(data[0][j]);
          }

        }
        if(array.length > 0)
        {
        sheet2.appendRow(array); //Appending the row in sheet2
        array = [];
        sheet1.deleteRow(i); //deleting the row in sheet as you said you want to move, if you copy remove this and next line
        i=i-1; //managing i value after deleting a row.
        }

      }


    }

//Below function return true if the given String is date, else false

    function isValidDate(d) {
      if ( Object.prototype.toString.call(d) !== "[object Date]" )
        return false;
      return !isNaN(d.getTime());
    }


Answer 3:

为了补充阿城的答案,这里是你如何能适应的代码,如果你没有在最后一排的日期。 在代码如下所示部分取代Lastcolumnumber与最后一列。

//Getting the range values of particular row where C16 is date
data = sheet1.getRange(i, 1, 1, LASTCOLUMNNUMBER).getValues(); 

//Adding the row in array
for (var j = 0; j < LASTCOLUMNNUMBER; j++)


文章来源: Automatically move data from one sheet to another in google docs