Функции в Google Sheets нарушены при запуске скрипта - PullRequest
0 голосов
/ 20 марта 2019

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

Я столкнулся с проблемой, когда обновляю ячейку с текущей датой, когдадругая ячейка в этой строке обновляется, если она пуста с помощью скрипта.Эта проблема заключается в том, что я затем использую функцию в ячейке рядом с ней, чтобы указать разницу в днях для другой даты, отмеченной в ячейке (как в обычной электронной таблице, поскольку это проще для меня).Но каждый раз, когда скрипт запускает функцию перерывов и заменяется текстом «#NUM!»(На самом деле этот текст есть, так как функция исчезает изнутри).

Я пытался изменить его на = U2 , и это тоже ломается.Это то, что не может быть сделано?Великий всемогущий бог Google не дал мне ответа, поэтому я сделал здесь учетную запись в надежде на спасение.

tl; доктор Скрипс выглядит так, как будто они нарушают мои ссылки на ячейки для любой функции листа, которая смотрит наклетки, которые они редактируют.Как остановить?

В ячейке V2 у меня есть функция = DATEDIF (S2, U2, "D") Сценарий ниже (я не знаю, как форматировать)

function onEdit(event) {
var eventRange = event.range;
var sheetName = SpreadsheetApp.getActiveSheet().getSheetName();
if (sheetName == "Scores") {

  if (eventRange.getColumn() == 10) { //Check which is updated


    var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 21);//where to write

    var values = columnXRange.getValues();

  for (var i = 0; i < values.length; i++) {
    if (!values[i][0]) {  // If cell isn't empty
     values[i][0] = new Date();
    }
  }
  columnXRange.setValues(values);
}
}  
}

1 Ответ

0 голосов
/ 21 марта 2019

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

var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 21);

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

function onEdit(event) {
  var eventRange = event.range;//makes shit happen?
  var sheetName = SpreadsheetApp.getActiveSheet().getSheetName();//checks current shit
  if (sheetName == "Scores") {//name of sheet want shit to happen

    if (eventRange.getColumn() == 10) { // 1 is column A, 2 is B ect

      // getRange(row, column, numRows, numColumns) sheet name to make not everywhere
      var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, 1, 1);//num is where will write 1 is a ect

      var values = columnXRange.getValues();//takes all shit from above to use as range

      if (!values[0][0]) {  // If cell isn't empty
         values[0][0] = new Date();//set date to the vaules in the range
      }

      columnXRange.setValues(values); //use the values set above and write them in 
    }
  }  
}

.. и это должно решить вашу проблему.Проблема с вашим текущим сценарием состоит в том, что он копирует «значение» столбца v в ячейки и заменяет его просто текстовым значением.Это ограничивает диапазон, который вы захватываете, до нужной вам ячейки, устраняет цикл for() и полностью решает проблему.

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