var userMail = e.user.getEmail (); на редактировать гугл листы не тянет почту - PullRequest
1 голос
/ 06 марта 2020

Я использовал следующий сценарий на листе Google, который работал месяцами, но теперь около 13:30 четверга, 3/5/2020, он перестал работать и извлекать электронные письма пользователей. Я попытался изменить его на вторую попытку, сохранил и отредактировал ячейку, но ничего не произошло. (Примечание: я не могу поделиться файлом из-за правил.)

Что работало раньше:

function onEdit(e) {
    var rg = e.range;
    if (rg.getSheet().getName() == "Call Log" && rg.columnStart == 13) {
        var nextCell = rg.offset(0, -3);
        if (nextCell.getValue() == '') {
            var userMail = e.user.getEmail();
            nextCell.setValue(userMail);
        }
    }
}

Моя вторая попытка:

function onEdit(e) {
    var rg = e.range;
    if (rg.getSheet().getName() == "Call Log" && rg.columnStart == 24) {
        var nextCell = rg.offset(0, 3);
        if (nextCell.getValue() == '') {
            var email = Session.getActiveUser().getEmail();
            Logger.log(email);
            nextCell.setValue(userMail);
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Объект события onEdit четко гласит следующее:

Если политики безопасности не разрешают доступ к личности пользователя, User.getEmail () возвращает пустую строку. Обстоятельства, при которых адрес электронной почты доступен, различаются: например, адрес электронной почты пользователя недоступен ни в каком контексте, который позволяет запускать сценарий без авторизации этого пользователя, например простой триггер onOpen (e) или onEdit (e), пользовательская функция в Google Sheets или веб-приложение, развернутое для «выполнения от имени» (то есть, авторизовано разработчиком, а не пользователем). Однако эти ограничения обычно не применяются, если разработчик запускает сценарий самостоятельно или принадлежит к тому же домену G Suite, что и пользователь.

0 голосов
/ 09 марта 2020

Лара, Честно говоря, я никогда не работал с функциями гугл листа. Но похоже, что их API довольно прост. На основании ошибки

TypeError: Невозможно прочитать свойство 'range' из неопределенного (строка 2, файл "Код")

Я могу предположить, что ваша функция не потреблять любые значения. Вы должны извлечь диапазон из другого объекта. Я нашел эту статью очень хорошей для начала. Похоже, что сначала вы должны получить свой лист, используя var sheet = SpreadsheetApp.getActiveSheet();, а затем внимательно прочитать документацию API .

Скорее всего, у вас получится что-то вроде:

function onEdit(e) {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getRange();
    if (sheet.getName() === "Call Log" && range.getColumn() === 24) {
        var nextCell = range.offset(0, 3);
        if (nextCell.getValue() === '') {
            var email = Session.getActiveUser().getEmail();
            Logger.log(email);
            nextCell.setValue(email);
        }
    }
}

Но я не могу проверить это решение. Пожалуйста, попробуйте или обновите его так, как вы хотите sh.

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