Получите первый пустой столбец строки, затем запишите строку + столбец этой ячейки

Я новичок в javascript и редакторе скриптов. Я продвинулся довольно далеко, объясняя себе логику и шаг за шагом разбирая вещи. Но есть еще одна последняя часть головоломки, которую я никак не могу решить. Я хочу, чтобы скрипт перешел к первому пустому столбцу строки 16 и дал мне строку + столбец этой конкретной ячейки. Весь код работает, однако, что происходит, когда он доходит до шага 5 скрипта, так это то, что он помещает "это сработало" в последний пустой столбец строки, а не в первый .

введите здесь описание изображения

​​function refreshCell(){
  var app = SpreadsheetApp.openById("14FgHQieAOCko3pwzLSUnO5Ky5EuLN88r5Y4LnuMKREI");
  var sheetName = app.getSheetByName("FinancialGoals");
  var cellContainingFormula = sheetName.getRange("J14");

  /* 1. Clear cell containing formula */
  cellContainingFormula.clear();

  /* 2. auto-run functon refreshCell on the first of the month: edit > project triggers > add new trigger */

  /* 3. Add new formula to cell */
  cellContainingFormula.setValue('=10248-A16');

  /* 4. Add formatting to cell: set background color, textcolor green, text bold, center text */ 
 cellContainingFormula.setBackground('#B7B7B7').setFontColor('#38761d').setHorizontalAlignment('center');

  /* 5. Navigate to the first empty column of row */
   var lastColumn = sheetName.getLastColumn();
   var activeCell = sheetName.getRange(16, lastColumn).activate(); 
   activeCell.setValue("it worked")
}

person natia    schedule 10.06.2020    source источник
comment
Вы говорите /* 5. Navigate to the first empty column of row */ и I would like for script to go to the first empty column of row 16, а также is that it is placing "it worked" in the last empty column of the row, instead of the first. не совсем понимаете, что имеете в виду. Как насчет картинки.   -  person Cooper    schedule 11.06.2020
comment
Спасибо, я думал, что прикрепил один, теперь есть скриншот ????   -  person natia    schedule 11.06.2020


Ответы (1)


Попробуй это:

function refreshCell(){
  var ss=SpreadsheetApp.openById("ssid");
  var sh=ss.getSheetByName("FinancialGoals");
  var cellContainingFormula=sh.getRange("J14");
  cellContainingFormula.clear();
  cellContainingFormula.setValue('=10248-A16');
  cellContainingFormula.setBackground('#B7B7B7').setFontColor('#38761d').setHorizontalAlignment('center');
  var col=sh.getRange(16,1,1,sh.getLastColumn()).getValues()[0].reduce(function(a,c,i){if(c=='' && !a.found) {a.col=i+1;a.found=true;}return a;},{col:0,found:false}).col;
  sh.getRange(16,col).setValue("it worked");
}
person Cooper    schedule 10.06.2020
comment
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА, сработало! Сработало! Большое спасибо, Купер! Теперь он помещает любые новые данные в следующую пустую ячейку этой строки. Хорошо, теперь я иду в Google, чтобы попытаться объяснить себе, почему этот код работал, лол, эта предпоследняя строка кода .... не знакома. Большое спасибо за вашу помощь в этом! - person natia; 11.06.2020
comment
Метод сокращения очень полезен. В качестве подсказки учтите, что в этом случае аккумулятор инициализируется объектом. - person Cooper; 11.06.2020