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

时间:2018-11-25 20:59:20

标签: google-apps-script google-sheets google-sheets-formula

所以我在论坛周围到处都是,我不敢相信没有人问过这个,而且我敢肯定,你们中有些人可能也想知道这一点。

因此,肯定存在有关自动日期填充的问题,但是,我发现几乎100%的脚本都无法满足我的需求,所以这里就是问题。

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

我遇到的问题是,当我在工作中尝试创建一些电子表格时,就是这个日期问题。我希望能够获取一批数据,填充一个单元格或我要指定脚本的任何单元格,而没有A列,所以只能填充一个日期以获取一批数据。我必须将很多信息粘贴到工作表中,并且我不想手动填充到当前日期的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());
      }
  }
}

1 个答案:

答案 0 :(得分:0)

您的代码本身没有问题。它工作正常。但是正如@TheMaster所说,您应该在OnEdit触发器中读取e变量,因为它返回了多个"event objects",这些在Trigger documentation中有详细描述。

这很值得,因为您会知道OnEdit在您编辑数据时有效,而不是在复制/粘贴时有效。但是有一种解决方法。

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

尝试此代码。

Google script onEdit in all pasted cells中应归功于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);
        }
    }
}