Что не так с этим сценарием с отметкой времени? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть скрипт отметки времени, выдающий ошибку: не удается прочитать свойство «источник» из неопределенного. (строка 3, файл "Код")

Я посмотрел, была ли проблема в строке 1 function onEdit(e) и, основываясь на источниках, которые я читал, я не могу запустить это из редактора сценариев. Действительно ли строка 1 является причиной этой ошибки?

function onEdit(e)
{
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() == "Sheet1") //Name of sheet
  {
    var actRng = sheet.getActiveRange();
    var editColumn = actRng.getColumn();
    var rowIndex = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf("Date & Time") + 1; // Name of Column you want to timestamp
    var orderCol = headers[0].indexOf("Input Field") + 1; // Name of Column you want to drop data
    if (dateCol > 0 && rowIndex > 1 && editColumn == orderCol)
    {
      sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "PST","hh:mm:ss aaa"));
    }
  }
}

У меня есть образец листа здесь. https://docs.google.com/spreadsheets/d/1NcblMFTVPbKYPmfvh7YnfEHe3dl2QQp6HaC-dqtdiik/edit#gid=0

Существует два заголовка (столбец A) Дата и время и (столбец B) поле ввода. Когда столбец B редактируется, столбец A должен заполняться отметкой времени.

Ответы [ 2 ]

1 голос
/ 06 ноября 2019
function onEdit(e) {
  var sh=e.range.getSheet();
  if (sh.getName()=="Sheet1"){
    var headers = sh.getRange(1,1,1,sh.getLastColumn()).getValues();
    var dateCol=headers[0].indexOf("Date & Time") + 1;
    var orderCol=headers[0].indexOf("Input Field") + 1
    if (dateCol>0 && e.range.rowStart>1 && e.range.columnStart==orderCol) {
      sh.getRange(e.range.rowStart, dateCol).setValue(Utilities.formatDate(new Date(), "PST","hh:mm:ss aaa"));
    }
  }
}

Ничего плохого в этом нет. Это использует объект события немного больше. Помните, что вы не можете запустить эти функции из редактора скриптов. Им требуется объект события, и без него они потерпят неудачу, потому что «е» не определено. Но объект события предоставляет много полезных данных.

Попробуйте добавить Logger.log(JSON.stringify(e)); к функции, как я сделал в вашей электронной таблице, и вы сможете увидеть все данные, предоставленные объектом события.

0 голосов
/ 06 ноября 2019

Спасибо всем, кто указал на общую картину того, как работает этот скрипт. Как оказалось, проблема заключалась в наборе ячеек, вызывающих проблему. Я не знаю, как передать правильный ответ, кроме того, что я только что удалил ячейки в «столбце для добавления данных», который вызывал проблему, повторно ввел данные, и событие сработало совершенно нормально. Не уверен, что происходило с этими клетками, но похоже, что они были виновником. Я оставил образец листа без редактирования, чтобы убедиться в этом.

Если вы попытаетесь ввести в столбец B строки 19 и 23, ничего не произойдет. Если вы выберете 19 и 23 столбец B, удалите и введете данные, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...