Как я могу заставить других пользователей общего листа Google иметь возможность выполнять этот скрипт метки времени? - PullRequest
0 голосов
/ 10 января 2019

Необразованный любитель, пытающийся составить список изменений для фэнтези-игры с ручкой и бумагой.

Я собрал воедино этот скрипт, который вставлял бы метки времени в столбец рядом со столбцом, в который вводятся данные. Прекрасно работает для меня, но не для кого-либо еще.

Список изменений

var COLUMNTOCHECK = 1;
var COLUMNTOCHECK3 = 3;
var COLUMNTOCHECK5 = 5;
var COLUMNTOCHECK7 = 7;
var COLUMNTOCHECK9 = 9;
var COLUMNTOCHECK11 = 11;
var COLUMNTOCHECK13 = 13;
var COLUMNTOCHECK15 = 15;
var DATETIMELOCATION = [0,1];
var SHEETNAME = 'Roster Changes'

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());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK3) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK5) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK7) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK9) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK11) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK13) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK15) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
}

Это мусорный код, так как я понятия не имею, что я делаю. Я просто пытаюсь заставить 7 других конкретных людей иметь возможность редактировать только свои соответствующие столбцы (эта часть работала в Sheets), но также добавить временную метку, когда они это сделали (так что я могу быть уверен, когда они запросили смена состава).

Любая помощь приветствуется. Я далеко от моей глубины.

1 Ответ

0 голосов
/ 10 января 2019

Это вполне возможно. Даже с защищенным ассортиментом! : D Вам нужно установить триггер onEdit .

Чтобы вручную создать устанавливаемый триггер через диалоговое окно в редакторе сценариев, выполните следующие действия:

  1. В редакторе сценариев выберите Редактировать> Триггеры текущего проекта .
  2. Нажмите кнопку с надписью: + Добавить триггер .
  3. В разделе Выполнить выберите имя функции, которую вы хотите вызвать ( onEdit ).
  4. В разделе События выберите приложение Google, к которому привязан скрипт: Из электронной таблицы .
  5. Выберите и настройте тип триггера, который вы хотите создать: При редактировании триггер.
  6. При желании нажмите Уведомления , чтобы указать, как и когда с вами связываются по электронной почте, если ваша вызванная функция не работает.
  7. Нажмите Сохранить .

Изменены инструкции, отражающие изменения в процессе, которые не были задокументированы, и отражающие потребности автора.


Вот как вы можете написать свой код DRY ( D on't R epeat Y себе).

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

function onEdit() {

    var sheet = SpreadsheetApp.getActive().getActiveSheet();
    var sheetName = 'Roster Changes'

    if (sheet.getName() === sheetName) {

        var columnsToCheck = [1, 3, 5, 7, 9, 11, 13, 15];
        var cell = sheet.getActiveCell();
        var col = cell.getColumn();

        if (columnsToCheck.indexOf(col) > -1) {

            var dateTimeCell = cell.offset(0, 1);
            // offset(row, column)

            dateTimeCell.setValue(new Date());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...