В ячейку, вместо результата, вставляется текст функции

Есть функция генерации уникального ID. Выводит уникальный 6-тизначный ID. (Logger.log (id) выводит 6 цифр без ошибок):

function generateId() {
  var id = getRandom(6);
  var allIds = getAllIds();
  var isExisting = allIds.indexOf(id) !== -1;
 
 Logger.log(id)

  if (isExisting) {
    return generateId();
  } else {
    return id;
  }
}
//генерим случайный набор цифр
function getRandom(digits) {
  digits = digits || 8;
  return Math.round(Math.random() * Math.pow(10, digits)).toString();
}
//проверяем сгенерированный ID на предмет наличия такого же уже в базе
function getAllIds(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var listdata = ss.getSheetByName("basedisp");
  var firstRow = listdata.getFrozenRows() + 1;
  return listdata
    .getRange(firstRow, 1, listdata.getLastRow() - listdata.getFrozenRows(), 1)
    .getValues()
    .map(function(each) {return each.toString();});
}

Нужно: то, что она сгенерировала вставить в заданную ячейку.

это я делаю такой функцией:

function insertId (){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var listdata = ss.getSheetByName("basedisp");
  var nowrange = listdata.getActiveRange(); 
  var nowrow = nowrange.getRow(); 
  listdata.getRange(nowrow,23).setValue(generateId);
}

Но вместо того чтобы вставить мне сгенерированные 6 цифр, у меня вставляется просто весь текст функции. результат

Подскажите, что не так делаю?


Ответы (1 шт):

Автор решения: Prianichkin Sergey

После generateId ставьте скобки. То есть listdata.getRange(nowrow,23).setValue(generateId()); Иначе вы не вызываете функцию, чтобы получить ее результат - а просто записываете все тело функции

→ Ссылка