【问题标题】:Copy the most recently updated cells from sheet 1 to sheet 2将最近更新的单元格从工作表 1 复制到工作表 2
【发布时间】:2018-07-02 05:52:00
【问题描述】:

我有一个谷歌表格,我需要每天更新一些统计数据:每天我都会在最后一个数字下方的单元格中输入一个新数字。我希望能够在同一工作簿的第二张工作表上显示最近的 6 个条目。

所以我希望工作表 2 始终只包含工作表 1 中的最后 6 个单元格,并且每当我将每天的数字放入工作表 1 时它都会更新。

目前我想了一半,在 onEdit 中我将特定单元格从工作表 1 复制到工作表 2,但是当我每天添加一个新数字时,这并不好。我在我的脚本中指定了静态单元格,这是错误的:我需要脚本只选取最近的 6 个单元格。

似乎在论坛上找不到任何答案,因此非常感谢您的帮助。到目前为止我的代码:

function onEdit() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var target = SpreadsheetApp.openById("15ih18G5WCnmPTwo1SCSj0tvw0ZVyi-hXUP4qrFyQOi4"); 
  var source_sheet = ss.getSheetByName("Sheet1");
  var target_sheet = target.getSheetByName("Most Recent");
  var source_range = source_sheet.getRange("C10:C15");
  var target_range = target_sheet.getRange("B5:B10");
  source_range.copyTo(target_range);
  var last_row = target_sheet.getLastRow();
  target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1)); 
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    下面的 sn-p 在 Sheet1 中的每个编辑事件中将 Sheet1 的底部六个单元格复制到 Sheet2 中

     function onEdit() {
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var destination = ss.getSheetByName("Sheet2");
      var origin = SpreadsheetApp.getActiveSheet();
    
      if (origin.getName() == "Sheet1") { 
        var r = origin.getActiveCell();
        var row = r.getRow();
        var numberOfCol = 3;
        if( row > 1) { 
          var numberOfRows = row >= 7 ? 6 : row - 1;
          var startRow = row >= 7 ? row - numberOfRows + 1 : 2;
          range = origin.getRange(startRow, 3, numberOfRows, numberOfCol);
          range.copyValuesToRange(destination, 1, numberOfCol, 1, numberOfRows);
        };
      };
    }
    

    【讨论】:

    • 请检查您的代码:r.getRow 上的条件至少应大于 6,并且您反转了 copyValues 中的列和行(1116 而不是通常的 1161)。
    • r.getRow() 引用了两个标题行,而不是实际内容。假设 OP 没有重新开始,因此行号小于 6 + 标题行数的情况不包括在内。更新了我的答案以包括这个极端案例。行和列未倒置 - 复制按预期工作。
    • 谢谢你,对范围的混乱感到抱歉,这是我从未使用过的方法...关于所有其他方法都使用 row-col-nofrow-nocol 序列,因此是我的错误。无论如何,您的代码现在更清晰了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多