如何根据特定列中的日期和另一列中的选择将整行从一个工作表移动到另一个工作表

时间:2016-06-01 21:58:25

标签: scripting google-sheets spreadsheet

所以现在这让我大吃一惊,没有人能帮我解决这个问题。我已成功将整行移到我的"存档"表格,但不是标题中提到的标准,我已经搞乱了大约两三个星期。我希望能够归档30天之前的整行并且值为#34;完成"。我一直在尝试成功合并onOpen脚本,但如果有其他方法,我们将不胜感激。

以下是我正在处理的onEdit脚本以及之前已成功使用的脚本(减去我想要设置的标准)。我以前用onOpen进行了编辑,没有任何错误,但它不起作用。

清单表是我从中排出的行,The" Archive" sheet是我移动行的目的地,第15列显然是我找到我的价值"完成"。如有必要,我可以让您访问我的测试表。

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Checklist" && r.getColumn() == 15 && r.getValue() == "Complete") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

1 个答案:

答案 0 :(得分:0)

我创建了一个示例电子表格here,其中包含所有应用脚本以完成您的任务;只需复制一下即可。 Sheet3上有一部分电子表格计算了脚本需要存档的行数的索引,抱歉我对此很新,所以也许其他人可以编辑我的脚本来包含它。

我用来获取需要存档的记录索引的公式是:

=COUNTA(IFERROR(FILTER(Sheet1!A:A,Sheet1!A:A<TODAY()-30,Sheet1!B:B="Complete")))

这个脚本:

  1. 在打开电子表格时,请执行以下步骤:
  2. 对sheet1中的前两列进行排序,将已完成的行放到顶部。
  3. 使用Sheet3上的索引将超过30天的日期移至Sheet2。
  4. 删除Sheet1以上30天以上的日期
  5. 按日期顺序对Sheet1上的两列进行排序。
  6. 注意:触发此脚本的另一个选项是更改功能名称,转到菜单中的enter image description here图标,添加新触发器,然后将其设置为功能&gt;来自电子表格&gt;在开放

        function onOpen() {
          var s1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
          var s2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
          var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet3');
    
          var sortRange = s1.getRange(1, 1, s1.getMaxRows(), 2);
    
            sortRange.sort([{column: 2, ascending: true}, //first column to sort 
            {column: 1, ascending: true}]);//second column to sort
    
          var lastDateIndex = s3.getSheetValues(3, 2, 1, 1); //number of rows to move
    
          var range = s1.getRange(1, 1, lastDateIndex, 2)
            startRow = range.getRowIndex(),
            numRows = range.getNumRows(),
            numCols = range.getNumColumns()
    
    
          var values = range.getValues(),
            lastRow = s2.getLastRow();
    
            s2.getRange(lastRow+1,1,lastDateIndex,2).setValues(values);
            s1.deleteRows(startRow,numRows);
    
          var sortRange = s1.getRange(1, 1, s1.getMaxRows(), 2); 
    
            sortRange.sort([{column: 1, ascending: true}]);
    
         }