Search code examples
javascriptgoogle-sheetsgoogle-apps-script

How to Add Headers or Categories When Selecting Specific Ranges in Results


how can I add headers to display categories like DATE, TOTAL, NAME, etc.? Right now, I can only see the results.

function showInputBox(){

 var ui = SpreadsheetApp.getUi();
 var input = ui.prompt("Please enter your rep name.",ui.ButtonSet.OK_CANCEL);

if(input.getSelectedButton() == ui.Button.OK){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ws = ss.getSheetByName("Monitoring (Database)");
  var data = ws.getRange("A2:X" + ws.getLastRow()).getValues();
  var userSelectedRep = input.getResponseText().toLowerCase();
  var newData = data.filter(function(r){ return r[23] .toLowerCase() == userSelectedRep});
  var selectedColumns = newData.map(function (r) {
    return [r[10], r[9], r[1], r[17], r[18], r[19], r[20], r[21], r[22]];
  });

  if (newData.length > 0){
  var newWs = ss.insertSheet(userSelectedRep);
  newWs.getRange(3, 3, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns);
  } else {
    ui.alert ("No Matching data found for the entered name.");
  } 
  
  } else {
    ui.alert("Operation Canceled.");
  }
}

I tried to change the getrange to A1:X but the result is the same. please see below the screenshot.

This is the result and i want to display also the header


Solution

  • Add headers to display categories

    You can try this, this is a modified version of your code. What I did was add a hard coded header values then set it as values of a predefined range according to your needs I changed the row number of where the data and headers are being posted according to what it is on your screenshot. I am referring to these lines:

    newWs.getRange(2, 3, 1, headers.length).setValues([headers]);
              
              newWs.getRange(3, 3, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns);
    

    Sample Code

    function showInputBox() {
      var ui = SpreadsheetApp.getUi();
      var input = ui.prompt("Please enter your rep name.", ui.ButtonSet.OK_CANCEL);
    
      if (input.getSelectedButton() == ui.Button.OK) {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var ws = ss.getSheetByName("Monitoring (Database)");
        var data = ws.getRange("A2:X" + ws.getLastRow()).getValues();
        var userSelectedRep = input.getResponseText().toLowerCase();
        var newData = data.filter(function (r) { return r[23].toLowerCase() == userSelectedRep });
        
        var selectedColumns = newData.map(function (r) {
          return [r[10], r[9], r[1], r[17], r[18], r[19], r[20], r[21], r[22]];
        });
    
        if (newData.length > 0) {
          var newWs = ss.insertSheet(userSelectedRep);
          
          // Define headers
          var headers = ["Header1", "Header2", "Header3", "Header4", "Header5", "Header6", "Header7", "Header8", "Header9"]; //change according to your specific needs
          
          newWs.getRange(2, 3, 1, headers.length).setValues([headers]);
          
          newWs.getRange(3, 3, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns);
        } else {
          ui.alert("No Matching data found for the entered name.");
        }
      } else {
        ui.alert("Operation Canceled.");
      }
    }
    

    Sample source sheets

    sample source

    Sample output

    sample output

    References: addValues()