Запуск функции из ее относительного номера строки - PullRequest
0 голосов
/ 17 июня 2019

У меня есть таблица Google, в которой я хочу использовать пользовательскую функцию, например spreadsheet

В конце концов в таблице будет произвольное количество этих примеров полей, и мне нужно подсчитать постоянно меняющиеся номера заказов для каждого поля клиента.

Я сделал триггер onEdit, но похоже, что эта функция запускает всю таблицу данных, вызывая ошибку:

«Начальный ряд диапазона слишком мал. At countOrders (Code: 25)».

Я думаю, что проблема в том, что функция не привязана к ячейке, в которую я ее поместил, и код выполняется относительно ячейки.

/*
This function counts the rows above the current row, up until the predefined header
*/

function countOrders() {

  //CHANGEABLE SETTINGS
  var HEADERTEXT = "Odrenummer"      //What kind of text to look for
  var COLUMN = 1                     // What column to search for the header
  var ACTIVEPOS = 5                  // Where to look for the active/passive field

  // Open current spreadsheet, and get the rownumber where the function is run
  var sheet = SpreadsheetApp.getActiveSheet()
  var cell = sheet.getActiveCell()
  var rowPointer = cell.getRow()

  // Initialize the count variabel,
  // and make the rowPointer point to the row above the function
  var count = 0
  rowPointer--


  // Count rows between 
  while (data != HEADERTEXT){
    var range = sheet.getRange(rowPointer,COLUMN)
    var data = range.getValue()

    rowPointer--

    // only count up if the ordernumber is not empty
    if (data != ""){
        count ++

    }

  }
  // Is the status active?
  var state = sheet.getRange(rowPointer,ACTIVEPOS);
  state = state.getValue()


  // Return the counted rows, minus the header
  if (state == "Aktiv"){
    return count-1
  }

  return 0

}


function onEdit(e) {
  countOrders();
}

function onChange(e) {
  countOrders();
}

Я ожидаю, что вывод обновится, если я добавлю больше заказов или если я изменю статус поля с «Актив» на «Пассив».

Я также ожидаю, что смогу скопировать и вставить область для создания второй области ниже, чтобы код работал по отношению к ее положению.

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я закончил последующим ответом на этот вопрос:

Обновление данных, полученных с помощью пользовательской функции в Google Sheet

Это дало мне то, что я хотел, мне не нравится, что мне нужно постоянно меняющееся случайное число в моем листе, но я просто поместил его далеко вправо.

0 голосов
/ 17 июня 2019

Попробуйте поместить результат в B3, и тогда ответ всегда будет sheet.getLastRow()-4. А в связи с вашей проблемой onEdit () сценарии привязаны к проектам, и проекты имеют доступ ко всем листам. Если вы хотите удалить листы, используйте что-то вроде if(e.range.getSheet().getName()!='SheetName')return; в вашей функции onEdit ().

объект события onEdit ()

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