Google表格应用脚本时间戳记条件

时间:2018-07-16 13:19:28

标签: javascript google-apps-script google-sheets triggers timestamp

这可能真的很简单,但我无法弄清楚。

我有一个时间戳脚本,是我从这个酷炫的dude

复制来的

现在,如果列A,B,C中的单元格已更改或已填充,我只想 创建一个时间戳。

  /**
    * Creates a Date Stamp if a column is edited.
    */

//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = [2,3];
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,1];
// Sheet you are working on
var SHEETNAME = 'Sheet1'



function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //checks that we're on the correct sheet.
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    //checks the column to ensure it is on the one we want to cause the date to appear.
    if( selectedCell.getColumn() == COLUMNTOCHECK[0,1]) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date());
      }
  }
}

我曾假设在带有var索引的if语句上添加一个子句将解决此问题,将COLUMNTOCHECK更改为[2,3,4,5],依此类推。

if( selectedCell.getColumn() == COLUMNTOCHECK[0] || selectedCell.getColumn() == COLUMNTOCHECK[1] )

编辑。

对不起,我对我的英语使用不当和要求不明确表示歉意。

以下是我想要的。

  1. 用户会将数据输入我的电子表格。
  2. 我想使用上面的脚本创建一个时间戳,该脚本仅在更改多个单元格时才输入时间戳。

例如

John将销售数据输入到单元格A2,B2 =已创建时间戳记中。

John将数据输入到单元格A2 =未创建时间戳。

希望这有意义吗?

1 个答案:

答案 0 :(得分:1)

  1. 使用event object获取范围。
  2. indexOf()数组上使用COLUMNTOCHECK来检查您正在观看的列之一是否已被编辑。
  3. 循环遍历COLUMNTOCHECK,然后检查已编辑行中每一列的值。如果该行中的每一列都有一个值,请输入时间戳。

根据您的要求,您可以简化步骤3并使之运行得更快。如果仅检查A和B列,则只需获取一次该范围(editedSheet.getRange(editedRow, 1, 1, 2).getValues()),然后遍历返回的值数组。

还请注意,我删除了偏移量并将时间戳记放置在C列中。同样,我不确定您的要求,但是对于B列中进行的编辑,您的实现将覆盖B列中的值。 / p>

function onEdit(e) {
  var COLUMN_TO_CHECK = [1,2]; // The columns to check if something is entered. (Columns A & B)
  var DATE_TIME_COLUMN = 3; // Where you want the date time stamp (Column C)
  var SHEET_NAME = "Sheet1"; // Sheet you are working on

  var editedCell = e.range;
  var editedSheet = e.range.getSheet();
  if (editedSheet.getName() === SHEET_NAME) {
    if (COLUMN_TO_CHECK.indexOf(editedCell.getColumn()) != -1) {
      var allFilled = true;
      var editedRow = editedCell.getRow();
      for (var i in COLUMN_TO_CHECK) {
        if (editedSheet.getRange(editedRow, COLUMN_TO_CHECK[i]).getValue() == "") {
          allFilled = false;
        }
      }
      if (allFilled) {
        editedSheet.getRange(editedRow,DATE_TIME_COLUMN).setValue(new Date());
      }
    }
  }
}