Как вы автоматически заполняете текущую дату, когда новые данные добавляются в другую ячейку? - PullRequest
0 голосов
/ 25 ноября 2018

Так что я смотрел вверх и вниз по всему форуму, и я не могу поверить, что никто не спрашивал об этом, и я уверен, что некоторые из вас тоже захотят это знать.

Так чтоопределенно были вопросы об автозаполнении даты, однако почти 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 голосов
/ 08 декабря 2018

По сути, нет проблем с вашим кодом.Работает просто отлично.Но, как говорит @TheMaster, вы должны прочитать переменную e в триггере OnEdit, поскольку она возвращает количество "объектов событий" , и они подробно описаны в документации Trigger.

Это стоит того, потому что вы знали бы, что OnEdit работает, когда вы редактируете данные, а не когда вы копируете / вставляете.Но есть обходной путь.

Объект e.range сообщит вам диапазон, в котором произошло копирование / вставка.Вы можете проверить это, выполнив простую команду логгера:
Logger.log("e range = "+e.range.getA1Notation());
Используя этот диапазон, мы можем вычислить начальную строку и количество строк в диапазоне, чтобы цикл мог создать значение смещения.

Попробуйте этот код.

Причитается Куперу в Google скрипт onEdit во всех вставленных ячейках

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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...