Триггер на основе времени:
Нет объектов событий, связанных с триггерами на основе времени, поэтому переменные типа eventRange
не могут работать. Кажется, вы хотите использовать переменные в addcol
, которые определены в trig
(например, builder
). Это невозможно. Кроме того, если вы хотите, чтобы ваша функция запускалась один раз в день, вам не нужны такие строки: builder.atDate(day, month, year)
). Триггер будет создан при запуске этой функции один раз:
function createTrigger(){
var builder = ScriptApp.newTrigger("addcol").timeBased().everyDays(1).create();
}
Добавление столбца с 0:
Есть много проблем с функцией addcol
:
- Используются несколько неинициализированных переменных (
s
, builder
, eventRange
). - Используются несуществующие методы: например: setNumberFormat - это метод класса Range, не объекта
Date
. Вам следует использовать Utilities.formatDate (date, timeZone, format) для форматирования дат. Кроме того, вы используете setName
при вставке нового столбца, но это меняет имя листа. Это то, что вы хотите сделать? Кроме того, cname
назначается триггером в качестве значения, которое, я серьезно сомневаюсь, является вашей целью. Точно так же массив col
не имеет метода getLastColumn()
.
Вы можете использовать эту функцию addcol
вместо этого (измените имя листа, в настоящее время установленное на Your sheet name
, и timeZone
в formatDate
, в настоящее время установлен на GMT
:
function addcol() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Your sheet name"); // Change accordingly
var lastCol = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
if (sheet.getMaxColumns() === lastCol) sheet.insertColumnAfter(lastCol);
var newCol = sheet.getRange(1, lastCol + 1, lastRow, 1);
var values = [];
values.push([Utilities.formatDate(new Date(), "GMT", "d/M/yyyy")]); // Change accordingly
for (var i = 1; i < sheet.getLastRow(); i++) {
values.push([0]);
}
newCol.setValues(values);
}
Замена 0 на 1:
Предполагается, что вы получаете функцию scanner
для правильного запуска и что параметр e.parameter.sr
заполняется правильно, вы можете сделать следующее:
function scanner(e){
var srn = e.parameter.sr;
var C = sheet.getLastColumn();
var R = sheet.getLastRow();
for (i=1; i<=R; i++) {
if (srn == sheet.getRange(i, 2).getValue()) {
sheet.getRange(i, C).setValue(1);
}
}
}
Здесь вы также использовали несуществующие методы или указали неверные параметры:
- Метод
getDataRange
не допускает никаких аргументов, вы должны использовать getRange (row, column) и указывать индексы строк и столбцов, разделенные запятыми, а не пытаясь получить доступ к 2D-массиву. break
завершает текущий l oop, поэтому используйте его, только если вы хотите обновить только 1 ячейку. То же самое касается return
, который завершает текущее выполнение функции.
Ссылка :