Sybrentjuhh
Sybrentjuhh

Reputation: 79

How do I use two variables in my function?

So I have multiple script. One script retrieves data from a Googlesheet and parses it as JSON. The other one uses this to output it to HTML.

My first:

function getStatistics() {
  var sheet =  SpreadsheetApp.openById("ID");
  var rowsData = sheet.getRange("A:A").getValues();
  var result = JSON.stringify(rowsData);
  var funcNumber = 1;
  return result;
}

This retrieves the data from a spreadsheet in column A.

The second script, here I want to use both 'Result' and 'Funcnumber' in my function.

function onSuccess(data, funcNumber) {
      var dataJson = JSON.parse(data);
      var newColumn = document.createElement("div");
      newColumn.className = "column";
      for(var i = 0; i < dataJson.length; i++) {
        if (dataJson[i] != "") {
          var div = document.getElementById('cont-' + funcNumber);
          var newDiv = document.createElement("div");
          newDiv.innerHTML = dataJson[i];
          newColumn.appendChild(newDiv);
        }
      }
      div.appendChild(newColumn); 
  }

Using the Json result to PARSE the HTML works. But retrieving 'funcNumber' from the function not. Then finally I call the first function with this line: google.script.run.withSuccessHandler(onSuccess).getStatistics();

Does anybody know how to use both result and funcNumber in my second function?

Upvotes: 0

Views: 62

Answers (2)

Faiz Mohammed
Faiz Mohammed

Reputation: 364

Following is the way to make the call in Google script to return the value for the 2nd parameter.

google.script.run .withSuccessHandler(onSuccess) .withUserObject(funcNumber) .getStatistics()

WithUserObject() needs to be called after the withSuccessHandler.

See the documentation below on Google script

withUserObject(object)

Sets an object to pass as a second parameter to the success and failure handlers. This "user object" — not to be confused with the User class — lets the callback functions respond to the context in which the client contacted the server. Because user objects are not sent to the server, they are not subject to the restrictions on parameters and return values for server calls. User objects cannot, however, be objects constructed with the new operator.

Upvotes: 0

Cooper
Cooper

Reputation: 64040

function getStatistics() {
  var ss =  SpreadsheetApp.openById("ID");
  const sheet = ss.getSheetByName('Sheet1');
  let result = {data:JSON.stringify(sheet.getRange(1,1,sheet.getLastRow(),1).getValues()),funcNumber:1}
  return result;
}

function onSuccess(obj) {
  var dataJson = JSON.parse(obj.data).flat();
  var newColumn = document.createElement("div");
  newColumn.className = "column";
  for (var i = 0; i < dataJson.length; i++) {
    if (dataJson[i] != "") {
      var div = document.getElementById('cont-' + obj.funcNumber);
      var newDiv = document.createElement("div");
      newDiv.innerHTML = dataJson[i];
      newColumn.appendChild(newDiv);
    }
  }
  div.appendChild(newColumn);
}

A single column or row is still a 2d array

Upvotes: 1

Related Questions