有没有一种方法可以在set.formula中添加变量以用于for循环

时间:2019-09-19 11:57:15

标签: javascript google-apps-script

Here is a link to a sample sheet

我有一张纸的回答中等偏低。我需要将它们更改为数字,以便创建图表,因此我使用了switch功能。但是数据是动态的,因此它取决于有多少数据。.我可以从第一个数据集中获取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 :(得分:0)

有两点可以帮助您解决问题:

  1. 使用getNextDataCell(direction) 它返回包含连续数据范围单元格的最后一个内容。

示例:

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

如果lastCell的值例如是C19您知道您的第一个   数据范围从第14行到第19行。

  1. 在您的公式语句中添加一个计数器变量。

示例:

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)');
  }