Скрипт для штамповки даты на нескольких листах

Я очень, очень, очень новичок во всем этом. Мне нужна помощь, я пытаюсь использовать редактор сценариев, чтобы получить статически помеченную дату в одном столбце, когда что-то вводится в другом столбце. Я подумал, как сделать это для одной вкладки, но мне нужно, чтобы это происходило на нескольких вкладках на одном листе, и я изо всех сил пытаюсь заставить его работать. Есть ли один код, который будет работать для этого? Это скрипт, который я использовал для одной вкладки:

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

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

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) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date());
      }
  }
}

Спасибо за ваше время заранее.

1 ответ

Решение

Чтобы продолжить работу с несколькими листами, вы можете проверить имя листа в массиве допустимых имен.

function onEdit() {

    var colToCheck = 9;

    // Offset from the input [row, column]
    var dateOffset = [0, -8];

    // Sheets to proceed on
    var sheetNames = ['Sheet 2', 'Sheet 3'];

    var sheet = SpreadsheetApp.getActive().getActiveSheet();
    var name = sheet.getName();

    if (sheetNames.indexOf(name) > -1) {

      var cell = sheet.getActiveCell();
      var col = cell.getColumn();

      if (col == colToCheck) {

          var dateTimeCell = cell.offset(dateOffset[0], dateOffset[1]);
          dateTimeCell.setValue(new Date());
        }
    }
}

Рекомендации

Массивы

индекс()


РЕДАКТИРОВАТЬ ОДИН

Если вам нужно несколько вариантов, вы можете установить их в массивах. Порядок элементов в массивах должен совпадать.

Этот код предполагает, что отметка времени всегда находится в одной строке.

function onEdit() {

    var sheetNames = ['Sheet 2', 'Sheet 3'];
    var colsToCheck = [9, 15];
    var colOffsets = [-8, -4];

    var sheet = SpreadsheetApp.getActive().getActiveSheet();
    var name = sheet.getSheetName();

    var index = sheetNames.indexOf(name);

    if (index > -1) { 
      var cell = sheet.getActiveCell();
      var col = cell.getColumn();

      if (col == colsToCheck[index]) { 
          var dateTimeCell = cell.offset(0, colOffsets[index]);
          dateTimeCell.setValue(new Date());
        }
    }
}

РЕДАКТИРОВАТЬ ВТОРОЙ

Для тех из вас, кто предпочитает предметы

function onEdit() {

    var sheets = {

        'Sheet 2': {
            checkCol: 9,
            offset: -8
        },

        'Sheet 3': {
            checkCol: 15,
            offset: -4
        }
    };

    var sheet = SpreadsheetApp.getActive().getActiveSheet();
    var name = sheet.getSheetName();

    var settings = sheets[name];

    if (settings) { 
      var cell = sheet.getActiveCell();
      var col = cell.getColumn();

      if (col == settings.checkCol) { 
          var dateTimeCell = cell.offset(0, settings.offset);
          dateTimeCell.setValue(new Date());
        }
    }
}
Другие вопросы по тегам