Есть ли способ добавить переменную внутри set.formula для использования в цикле for - PullRequest
0 голосов
/ 19 сентября 2019

Вот ссылка на образец листа

У меня есть лист с высоким средним и низким в качестве ответов.Мне нужно изменить их на числа, чтобы я мог создать диаграмму, поэтому я использую функцию переключения.Однако данные являются динамическими, поэтому это зависит от нескольких факторов относительно количества данных. Я могу получить set.formula для обновления из первого набора данных, но только с использованием ссылок на ячейки.Могу ли я использовать динамические переменные внутри формулы, чтобы, если было 5 наборов данных, она копировала формулу 5x, но меняла ссылку на строку

в переменной + copyCell +

function weeklyReview()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Workzone Planning');
  var sessionSheet = ss.getSheetByName('Daily Plan');
  var calcSheet = ss.getSheetByName('Calc Sheet');
  var chartSheet = ss.getSheetByName('WeeklyReviewCalcs');
  var lastCol = sessionSheet.getLastColumn();
  var numDays = sheet.getRange('f11').getValue();
  var numSessions = sheet.getRange('c29').getValue();
  var startFormula = chartSheet.getRange('c4').activate();


for (var a=0; a<numDays; a++)
{  
  var day = calcSheet.getRange(a+3, 1).getValue()


  chartSheet.getRange('a1').setValue(day)
  chartSheet.getActiveCell().setFormula ('=SWITCH(\'Daily 
Plan\'!C15,"High", 2, "Medium", 1, "Low", 0, 0)');
  chartSheet.getActiveCell().offset(1, 0).setFormula('=SWITCH(\'Daily Plan\'!C14, "High", 2, "Medium", 1, "Low", 0, 0)');
  chartSheet.getActiveCell().offset(2, 0).setFormula('=SWITCH(\'Daily Plan\'!C19, "Yes", 1, "Half", -1, "No", -1, 0)');
  chartSheet.getActiveCell().offset(3, 0).setFormula('=SWITCH(\'Daily Plan\'!C16, "High", 2, "Medium", 1, "Low", 0, 0)');
  chartSheet.getActiveCell().offset(4, 0).setFormula('=SWITCH(\'Daily Plan\'!C17, "None", 2, "Some", 1, "Lots", 0, 0)');
  chartSheet.getActiveCell().offset(5, 0).setFormula('=SWITCH(\'Daily Plan\'!C18, 100%, 2, 66%, 1, 33%, 0, 0)');
    }
}

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

1 Ответ

0 голосов
/ 19 сентября 2019

Две точки, которые помогут вам решить проблему:

  1. Использование getNextDataCell (direction) Возвращает последнее содержимое, содержащее ячейку непрерывного диапазона данных.

Пример:

var lastCell=sessionSheet.getRange("C14").getNextDataCell(SpreadsheetApp.Direction.DOWN);
Logger.log(lastCell.getA1Notation());

Если значение lastCell, например, C19, вы знаете, что ваш первый диапазон данных выходитиз строки 14 в строку 19.

Внедрите переменную-счетчик в свой оператор формулы.

Пример:

var firstRow=14;
var rowNumber=lastCell.getRow()-firstRow;
for(var i=0; i<rowNumber.length;i++){
  var row=i+14;
  chartSheet.getActiveCell().offset(i, 0).setFormula('=SWITCH(\'Daily Plan\'!C'+row+', "High", 2, "Medium", 1, "Low", 0, 0)');
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...