Dennis
Dennis

Reputation: 3

Google apps script count variables (merging)

I'm trying to count some variables whit google apps script in google spreadsheet. This isn't working how I wanted to be. The code is:

for(var n in namen) {
      var naam = namen[n];
      var nr = n;
      if(w == 1) {
        var nr = 3+n;
      } if(w == 2) {
        var nr = 17+n;
      } if(w == 3) {
        var nr = 31+n;
      } if(w == 4) {
        var nr = "45"+n;
      } if(naam == title){
        ssRooster.getRange(nr, col, 1, 1).setValue(dateStr);
        var nr = n;
      }
    }

Or the code is:

  } if(naam == title){
            ssRooster.getRange(n+row, col, 1, 1).setValue(dateStr);
          }

It should be ok, but I get now The number from n lets say 2 and the number from row lets say 17. It results now as 217 instead of 19. How can I fix this?

Prefer the code with the row in it. (It's cleaner)

Thanks Dennis

[edit] The compleete code is:

function LoadWorkTime() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Period = Browser.inputBox("Periode","Welke periode wilt U zien. (kies tussen de 1 en de 12.)", Browser.Buttons.OK);
  var ErrorPeriod = "De periode die U invoert is onjuist!";
  if(Period>12){
    Browser.msgBox(ErrorPeriod);
    return;
  } if(Period<1){
    Browser.msgBox(ErrorPeriod);
    return;
  }
  var ssPeriode = ss.setActiveSheet(ss.getSheets()[1]);
  var ThisYear = ssPeriode.getRange(2, 1, 1, 1).getValue();
  var CheckYear = Browser.msgBox("Jaar","Is het jaar " + ThisYear + " het jaar dat U wilt opvragen.", Browser.Buttons.YES_NO);
  if(CheckYear=="yes") {
    var CheckYear = ThisYear;
  } else {
    var PastYear = ThisYear-1;
    var AfterYear = ThisYear-0+1;
    var CheckYear = Browser.inputBox("Jaar", "Vul in jaar tal in tussen " + PastYear + " en " + AfterYear, Browser.Buttons.OK);
    var ErrorYear = "Het jaar wat U heeft ingevuld is onjuist!";
    if(CheckYear>PastYear){
      Browser.msgBox(ErrorYear);
      return;
    } if(CheckYear<AfterYear){
      Browser.msgBox(ErrorYear);
      return;
    }
  }
  ssPeriode.getRange(1, 1, 1, 1).setValue(Period);
  ssPeriode.getRange(3, 1, 1, 1).setValue(CheckYear);
  var ssRooster = ss.setActiveSheet(ss.getSheets()[0]);
  var calRooster = CalendarApp.getCalendarById("[email protected]");
  var calVakantie = CalendarApp.getCalendarById("[email protected]");
  var dateRow = 2
  var row = 3;
  for(var w = 1; w <= 4; ++w) {
    var col = 2;
    var namen = ssRooster.getRange(3, 1, 10, 1).getValues();
    for(var d = 1; d <= 7; ++d) {
      var eventdate = ssPeriode.getRange(dateRow, 2, 1, 1).getValue();
      var eventsRooster = calRooster.getEventsForDay(new Date(eventdate));
      var dateRow = dateRow+1;
      for(var e in eventsRooster) {
        var event = eventsRooster[e];
        var title = event.getTitle();
        var dateStr = event.getStartTime();
        Browser.msgBox(title);
        for(var n in namen) {
          var naam = namen[n];
          Browser.msgBox(naam);
        } 
        if(naam == title){
          ssPeriode.getRange(5, 1, 1, 1).setFormula('=' + n + '+' + row);
          var nr = ssPeriode.getRange(5, 1, 1, 1).getValue();
          ssRooster.getRange(nr, col, 1, 1).setValue(dateStr);
        }
      }
      var col = col+2;
    }
    var row = row+14;
  }
}

I can't make this work! In my eye's is this a good code. To try it your self run this install code and change the calendar addresses for one you own.

   function Install() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var ssPeriode = ss.setActiveSheet(ss.getSheets()[1]);
  var Wt = 1;
  ssPeriode
  ssPeriode.deleteColumns(2, ssPeriode.getMaxColumns()-1);
  ssPeriode.deleteRows(2, ssPeriode.getMaxRows()-1);
  ssPeriode.clear();
  ssPeriode.clearContents();
  ssPeriode.clearFormats();
  ssPeriode.insertColumnsAfter(1, 1);
  ssPeriode.insertRows(1, 35);
  ssPeriode.getRange(1, 1, 4, 1).setValues([["1"], [""], ["2012"], ["3-1-2000"]]);
  ssPeriode.getRange(2, 1, 1, 1).setFormula('=TEXT(NOW(); "yyyy")');
  ssPeriode.getRange(1, 2, 1, 1).setFormula('=A1');
  ssPeriode.getRange(2, 2, 1, 1).setFormula('=(A3-2000)*364+((B1-1)*28)+A4');
  for(var i = 3; i <= 29; ++i) {
    var c = i-1;
    ssPeriode.getRange(i, 2, 1, 1).setFormula('=B' + c + '+1');
  }
  var c = 2;
  for(var i = i+1; i <= 34; ++i) {
    ssPeriode.getRange(i, 1, 1, 1).setFormula('=SPLIT(TEXT(B' + c + ';"yyyy-ww");"-")');
    var c = c+7;
  }

  var ssRooster = ss.setActiveSheet(ss.getSheets()[0]);
  var Wt = 1;
  var week = 31;
  var dag = 2;
  var nm = 3;
  ssRooster.deleteColumns(2, ssRooster.getMaxColumns()-1);
  ssRooster.deleteRows(2, ssRooster.getMaxRows()-1);
  ssRooster.clear();
  ssRooster.clearContents();
  ssRooster.clearFormats();
  ssRooster.insertColumnsAfter(1, 14);
  ssRooster.insertRows(1, 56);
  for(var col = 1; col <= ssRooster.getMaxColumns(); ++col) {
    ssRooster.setColumnWidth(col, 60);
    if(col == 1) {
      ssRooster.setColumnWidth(col, 80);
    }
  }
  for(var i = 1; i <= 4; ++i) {
    ssRooster.getRange(Wt, 1, 13, 15).setBorder(true, true, true, true, false, false);
    ssRooster.getRange(Wt, 1, 2, 15).setBorder(true, true, true, true, false, false);
    ssRooster.getRange(Wt+2, 1, 11).setNumberFormat("H:mm")
    ssRooster.getRange(Wt, 1, 1, 1).setFormula('=JOIN(P1;"Week ";P1;Periode!B' + week + ')');
    var week = week+1;
    var col = 2;
    for(var j = 1; j <= 7; ++j) {
      ssRooster.getRange(Wt, col, 2, 2).setBorder(true, true, true, true, false, false);
      ssRooster.getRange(Wt+2, col, 11, 2).setBorder(true, true, true, true, false, false);
      ssRooster.getRange(Wt, col, 1, 2).merge();
      ssRooster.getRange(Wt, col, 1, 1).setFormula('=CHOOSE(WEEKDAY(Periode!B' + dag + ';2);"Maandag ";"Dinsdag ";"Woensdag ";"Donderdag ";"Vrijdag ";"Zaterdag ";"Zondag ")&DAY(Periode!B' + dag + ')&CHOOSE(MONTH(Periode!B' + dag + ');" jan";" feb";" mrt";" apr";" mei";" jun";" jul";" aug";" sep";" okt";" nov";" dec")');
      var dag = dag+1;
      var col = col+2;
    }
    var Wt = Wt+1;
    ssRooster.getRange(Wt, 1, 1, 15).setValues([["Naam", "van", "tot", "van", "tot", "van", "tot", "van", "tot", "van", "tot", "van", "tot", "van", "tot"]]);
    for(var k = 1; k <= 6; ++k) {
      var Wt = Wt+1;
      ssRooster.getRange(Wt, 1, 1, 15).setBackground('yellow');
      var Wt = Wt+1;
    }
    var Wt = Wt-12;
    if( i == 1) {
      var Wt = Wt+13;
    }
    if( i >= 2) {
      for(var k = 1; k <= 11; ++k) {
        var Wt = Wt+1;
        ssRooster.getRange(Wt, 1, 1, 1).setFormula('=A' + nm);
        var nm = nm+1;

      }
      var Wt = Wt+1;
      ssRooster.getRange(Wt, 1, 1, 15).setBorder(true, false, true, false, false, false);
      var Wt = Wt+1;
      var nm = nm+3;
    }
  }
  ssRooster.getRange(Wt, 1, 1, 15).clearFormat();
}

Upvotes: 0

Views: 1119

Answers (3)

Dennis
Dennis

Reputation: 3

I now write the numbers to a cell and let a third cell count it and call that one up. In the code is now up and running and in the old code need some modification to let it work.

Everything works now fine.

Upvotes: 0

mzimmerman
mzimmerman

Reputation: 940

You can also use var nr = new Number(n); to make sure that nr is an integer.

Upvotes: 1

ScampMichael
ScampMichael

Reputation: 3728

I am not sure if I understand but I think the solution is to insure nr is an integer:

var nr = parseInt(n);

and do not use quotes in var nr = "45"+n;

Upvotes: 0

Related Questions