Search code examples
javascriptfor-loopgoogle-apps-scriptgoogle-sheetsgoogle-sheets-macros

How to use variable inside for loop


I have 50 rows in google spreadsheet. User use these rows as input. But not all 50 rows are shown. When user input number in A2 cell then only that number of the rows are visible. I was able to do the task. But there is one problem inside for loop.

I think problem is in this line

for(var i = 2; i < fillingRows; i++){

    //This is my full code.

    function onEdit(e) {
    //Logger.log("Previous value was - " + e.oldValue);
    //Logger.log("New value is - " + e.value);

    var range = e.range;

    var rowNumber = range.getRow();
    var columnNumber = range.getColumn();

    //Logger.log("Row - " + rowNumber);
    //Logger.log("Column - " + columnNumber);

    if (rowNumber == 2 && columnNumber == 1){
       //Logger.log(e.value);
       var fillingRows = e.value + 2;
       //Hide rows from 3 to 51
       var spreadsheet = SpreadsheetApp.getActive();
       spreadsheet.getRange('3:51').activate();
       spreadsheet.getActiveSheet().hideRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
       Logger.log(fillingRows);

       for(var i = 2; i < fillingRows; i++){
           spreadsheet.getActiveSheet().showRows(i, 1);
       }
     }

   }

When I change that line to something like this

for(var i = 2; i < 10; i++){

Then it works correctly. But I can't use constant number here. Isn't it possible to use variable inside a for loop.


Solution

  • Try this:

    function onEdit(e) {  
      var sh=e.range.getSheet();
      if(sh.getName()!="Your sheet name")return;//Edit this.  Add your sheet name
      if(e.range.rowStart==2 && e.range.columnStart==1 && e.value>=1 && e.value<=50){
        //e.source.toast('Value: ' + e.value);
        sh.hideRows(3,50);
        sh.showRows(3,e.value);
        //sh.getRange(1,1).setValue(e.value);
      }
    }