首页 > 解决方案 > 在编辑之前复制已编辑的值

问题描述

我正在尝试设置一份每日报告,该报告将向我发送一封电子邮件,其中仅包含工作表中已编辑的行,还包括编辑之前的旧值。

我编写了以下脚本,当编辑指定范围时,整行被转移到另一个名为“new_values”的选项卡。

function onEdit_inRange(e,sheetName,sheetRange){
    var sh=e.range.getSheet();
    if(sh.getName()===sheetName){
        var range = SpreadsheetApp.getActiveSheet().getRange(sheetRange);
        var xy=[e.range.getColumn(),e.range.getRow()];
        if (xy[0]>=range.getColumn() && xy[0]<=range.getLastColumn() && xy[1]>=range.getRow() && xy[1]<=range.getLastRow()) {
            return e.range;
        }
    }
    return false;
}

function onEdit(e){
    var range=0;
    if((range=onEdit_inRange(e,'sheet','M6:O'))){
      //  SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');

    } else if ((range=onEdit_inRange(e,'sheet','Q6:Q'))) {
     //   SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');
    }
   var ss = e.range.getSheet();
  //ss.getRange(e.range.getRow(),49)  //set timestamp in column 49
  //.setValue(new Date()); // Set time of edit in "G"
   var appendSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('new_values');
   var archiveLastRow = appendSheet.getLastRow();
       Logger.log(archiveLastRow);
   var archiveAppendRange = "new_values!" + (appendSheet.getLastRow() + 1) + ":" + (appendSheet.getLastRow() + 1);
       Logger.log(archiveAppendRange);
   var destRange = ss.getRange(archiveAppendRange);
       Logger.log(destRange);
   var sourceDataValues = ss.getRange(range.getRow(),1,1,49).copyTo(destRange);
       Logger.log(sourceDataValues);

}

我无法做到的是让这个脚本在编辑旧值时也复制它们,并将它们移动到另一个单独的选项卡(称为“old_values”)。

当以与新值相同的方式编辑单元格时,如何复制旧值?

我的计划是我将合并两个表并通过电子邮件发送。

这是带有我的代码的示例电子表格:https ://docs.google.com/spreadsheets/d/1xzyVD7ElA0FMVC8sta6beDJCIwOQEMRqjhF5eW4mExI/copy

标签: google-apps-scriptgoogle-sheets

解决方案


推荐阅读