Javascript 有没有办法在set.formula中添加变量以用于for循环

Javascript 有没有办法在set.formula中添加变量以用于for循环,javascript,google-apps-script,Javascript,Google Apps Script,我有一张有高-中-低回答的纸。我需要把它们改成数字,这样我就可以创建一个图表,所以我正在使用开关函数。然而,数据是动态的,因此它取决于两个因素,即有多少数据。。我可以从第一个数据集获取要更新的set.formula,但只能通过使用单元格引用。我是否可以在公式中使用动态变量,以便如果有5个数据集,它将复制公式5x,但更改行引用 我尝试过将其更改为设置值,还尝试过添加一个变量+copyCell+ function weeklyReview() { var ss = SpreadsheetApp.

我有一张有高-中-低回答的纸。我需要把它们改成数字,这样我就可以创建一个图表,所以我正在使用开关函数。然而,数据是动态的,因此它取决于两个因素,即有多少数据。。我可以从第一个数据集获取要更新的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)');
    }
}
函数weeklyReview()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“工作区规划”);
var sessionSheet=ss.getSheetByName(“每日计划”);
var calcSheet=ss.getSheetByName(“计算表”);
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();
对于(var a=0;有两个点可帮助您解决问题:
  • 使用 它返回包含连续数据范围单元格的最后一个内容
  • 示例:

    var lastCell=sessionSheet.getRange("C14").getNextDataCell(SpreadsheetApp.Direction.DOWN);
    Logger.log(lastCell.getA1Notation());
    
    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)');
      }
    
    如果
    lastCell
    的值为例如
    C19
    您知道您的第一个 数据范围从第14行到第19行

  • 在公式语句中实现一个计数器变量
  • 示例:

    var lastCell=sessionSheet.getRange("C14").getNextDataCell(SpreadsheetApp.Direction.DOWN);
    Logger.log(lastCell.getA1Notation());
    
    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)');
      }
    
    var firstRow=14;
    var rowNumber=lastCell.getRow()-firstRow;
    
    对于(var i=0;iIt),如果您能提供一个电子表格示例,其中您在计划表中的不同数据范围是可见的,那么您的请求将更容易理解。链接到表添加到问题您需要给我权限。我已更新了链接。所以它不需要权限。对不起,我明白了,下面的代码适用于您(对于C列而不是A列)如果空内容不包含破折号。如果无法删除破折号,则必须手动迭代C列中的单元格,直到遇到破折号(数据范围结束)非常感谢……这实际上并没有按照我所需要的方式工作,但它确实给了我解决查询的方法……使用公式中的+行+变量……)