当新数据添加到另一个单元格时,如何自动填充当前日期?

How do you autofill Current Date when New Data is Added to another Cell?

所以我在论坛上四处查看,我不敢相信没有人问过这个问题,我相信你们中的一些人可能也想知道这个。

所以肯定有关于自动日期填充的问题,但是,我发现的几乎 100% 的脚本都没有做我正在寻找的事情,所以这就是问题所在。

所以问题:当另一个单元格已填充时,如何将一个单元格自动填充到当前日期?但... 总是遗漏一件事......如果同一列中有多个单元格被填充,你如何获得日期来填充相同数量的行?

我遇到的问题是,当我在工作时试图创建一些传播sheets,是这个日期问题。我希望能够获取一批数据,填充一个单元格或任何我想指定脚本的单元格,而不是让列 A 只为一批数据填充一个日期。我必须将许多信息粘贴到 sheet 中,我不想手动将 A 列中的每个单元格填充到当前日期。

这是我的脚本,请告诉我如何修改它。 我正在使用此脚本处理的列是日期的 A 列,我正在填充 E 列。

示例图片:

var COLUMNTOCHECK = 5;
var DATETIMELOCATION = [0,-4];
var SHEETNAME = 'Appraisers'

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date());
      }
  }
}

您的代码本身没有问题。它工作得很好。但正如@TheMaster 所说,您应该阅读 OnEdit 触发器中的 e 变量,因为它 returns 有多个 "event objects" and these are described in detail in the Trigger documentation

这是值得的,因为您会知道 OnEdit 在您 编辑 数据时有效,而不是在您 copy/paste 时有效。但有一个解决方法。

e.range 对象会告诉您 copy/paste 发生的范围。您可以通过 运行 一个简单的记录器命令对其进行测试:
Logger.log("e range = "+e.range.getA1Notation());
通过使用该范围,我们可以计算范围内的起始行和行数,因此循环可以创建偏移值。

试试这个代码。

归功于

中的 Cooper
function so_53471920(e) {

    // set up the spreadsheet
    var ss = SpreadsheetApp.getActiveSpreadsheet();

    // set up some key variables
    var COLUMNTOCHECK = 5;
    var DATETIMELOCATION = [0, -4];
    var SHEETNAME = "Appraisers";
    var adjustdate = new(Date);

    // return the edited range from OnEdit
    var myrange = e.range;
    // get the starting row, starting column, range depth in the range and name of the active sheet
    var startRow = e.range.getRow();
    var startColumn = e.range.getColumn();
    var rowdepth = e.range.getNumRows();
    var activeSheet = e.source.getActiveSheet().getName();
    // Logger.log("1=e.range = "+e.range.getA1Notation());// DEBUG
    // Logger.log("2=starting column in e.range = "+startColumn);// DEBUG
    // Logger.log("3=starting row in e.range = "+startRow);// DEBUG
    // Logger.log("4=Number of rows in e.range = "+rowdepth);// DEBUG
    // Logger.log("5=The sheet name is "+activeSheet);

    // test the sheet and column
    // Note: getColumn returns the starting column position for this range; so this works only if the left hand paste column is "E"
    if (activeSheet !== SHEETNAME || startColumn !== COLUMNTOCHECK) {
        // quit if this isn't the right sheet or column
        Logger.log("system quit");
        return;
    } else {
        // loop through the number of rows in the pasted range
        // getNumRows returns the number of rows in this range.
        //Logger.log("start row="+startRow+", target i = "+(startRow+rowdepth)); //DEBUG
        for (var i = startRow; i < (startRow + rowdepth); i++) {
            // i = the row number
            // Logger.log("Updated row A"+i);//DFEBUG
            e.source.getActiveSheet().getRange("A" + i).setValue(adjustdate);
        }
    }
}