Формула / значение настройки скрипта приложения Google листов onEdit - PullRequest
0 голосов
/ 31 октября 2018

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

function onEdit(e)

{
  var ssA = SpreadsheetApp.getActive();
  var ss = ssA.getSheetByName("Completed Work Requests") 
  var lastRow = ss.getLastRow();
  var range = ss.getRange(5,6,lastRow,1);
  var data = range.getValues();


 for(var i=0;i<data.length;i++)
  {  
    if(data[i][0] == "")//If true then it's blank
    {
      data[i][0]="=IFERROR(INDEX('Client lookup sheet'!C[-1]:C[-1],MATCH(R[0]C[-4],'Client lookup sheet'!C[-5]:C[-5],false)),\"\")"
      range.setValue(data[i][0]);
    }
  }}

Проблема, с которой я сталкиваюсь, это range.setValue (data [i] [0]); часть, где я вижу, что он устанавливает весь диапазон на значение data [i] [0] в предыдущей строке. Проблема заключается в том, что даже если пользователь вводит значение вручную, функция onEdit просто сбрасывает значение в data [i] [0] = ...., хотя я хочу, чтобы они могли устанавливать ручное значение без перезаписи функции. значение.

Таким образом, мой вопрос сводится к тому, что мне нужно использовать вместо range.setValue (data [i] [0]), чтобы гарантировать, что только ячейка, оцененная data [i] [0] == "", установлена ​​на стать формулой, а не всего ассортимента?

Спасибо!

1 Ответ

0 голосов
/ 31 октября 2018

Я исправил свои проблемы, отредактировав код:

edit: предыдущая проблема заключалась в том, что я не мог найти способ установить значение, когда был найден экземпляр данных [i] [0] == "". Исходный код в приведенном выше вопросе применил setValue ко всему диапазону, поэтому, когда пользователь вручную вводит значение, setValue просто сбрасывает значение в формулу. Я обнаружил, что могу найти диапазон данных [i] [0], используя getRange (i + 5,6), поскольку строка начинается с 5, а номер столбца = 6. Затем этот новый диапазон можно использовать для установки значения SetValue на соответствующем ячейка, а не весь диапазон

function onEdit(e)

{
  var ssA = SpreadsheetApp.getActive();//changed from openById() for my convenience
  var ss = ssA.getSheetByName("Completed Work Requests") 
  var lastRow = ss.getLastRow();
  var range = ss.getRange(5,6,lastRow,1);
  var data = range.getValues();


 for(var i=0;i<data.length;i++)
  {  
    if(data[i][0] == "")//If true then it's blank
    {
      data[i][0]="=IFERROR(INDEX('Client lookup sheet'!C[-1]:C[-1],MATCH(R[0]C[-4],'Client lookup sheet'!C[-5]:C[-5],false)),\"\")"
      var rangedata = ss.getRange(i+5,6)
      rangedata.setValue(data[i][0]);
    }
  }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...