代码之家  ›  专栏  ›  技术社区  ›  Umar.H

将多个sheetname传递到数组google app脚本中,但不使用timestamp函数

  •  0
  • Umar.H  · 技术社区  · 7 年前

    剧本里有什么我不知道的吗?当工作表名称的变量设置为单个工作表时,它工作得很好,当我将工作表名称更改为数组[“Sheet1”,“Sheet2”,“Sheet3”,“Sheet4”]时,它不会启动(在编辑时)

    function onEdit(e) {
      var COLUMN_TO_CHECK = [1,4,5]; // The columns to check if something is entered. (Columns A & B)
      var DATE_TIME_COLUMN = 13; // Where you want the date time stamp (Column C)
      var SHEET_NAME = ["User1", "User2", "User3"]; // 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());
          }
        }
      }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Diego    7 年前

    editedSheet.getName() 是一个字符串。 SHEET_NAME 是一个数组。这些永远都不平等( === )

    使用 SHEET_NAME.indexOf(editedSheet) != -1 ,因为 Array.indexOf() 将返回 -1 如果不存在。

    更新的代码(复数 板名 SHEET_NAMES ):

    function onEdit(e) {
      var COLUMN_TO_CHECK = [1,4,5]; // The columns to check if something is entered. (Columns A & B)
      var DATE_TIME_COLUMN = 13; // Where you want the date time stamp (Column C)
      var SHEET_NAMES = ["User1", "User2", "User3"]; // Sheet you are working on
    
      var editedCell = e.range;
      var editedSheet = e.range.getSheet();
      if (SHEET_NAMES.indexOf(editedSheet.getName()) != -1) {
        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());
          }
        }
      }
    }