My Google Apps Script code finds a particular sheet, or creates it if it doesn't exist; it then adds a new row of data underneath the header. When it has to create a new sheet, I want to set up the header line, but it won't work where it's supposed to, and I don't understand why. This code works as is, but you can see where I want to move my line of code. Any help is appreciated.
// for each work order
for (var i = headerCount; i < data.length; i++) {
var workOrder = data[i][workOrderColumn];
var inspector = data[i][inspectorColumn];
// find or create sheet in logSpreadsheet
var logSheet = logSpreadsheet.getSheetByName(workOrder);
if(logSheet == null) {
try {
logSheet = logSpreadsheet.insertSheet(workOrder);
} catch(e) {
Logger.log(e);
continue;
}
//This is where I want this line to be, but it doesn't work here:
//logSheet.getRange("A1:B1").setValues([["Date", "Inspector"]]);
}
// log data
logSheet.insertRows(1);
logSheet.setFrozenRows(1);
//Here, the code works, but it shouldn't be here (it only needs to happen when the sheet is created)
logSheet.getRange("A1:B1").setValues([["Date", "Inspector"]]);
logSheet.getRange("A2:B2").setValues([[date, inspector]]);
}
The reason for your code not working is because of this set of circumstances.
logSheet.getRange("A1:B1").setValues([["Date", "Inspector"]]);
//The above line adds the header to row one
logSheet.insertRows(1);
//The above code inserts a new line at row 1
//That so header line is effectively in row 2 ("A2:B2")
So later in the code when you set the value of ("A2:B2") like so
logSheet.getRange("A2:B2").setValues([[date, inspector]]);
in overwrites the header values.
I would make the following modification
logSheet.insertRows(2); // or remove this code
Your final code:
for (var i = headerCount; i < data.length; i++) {
var workOrder = data[i][workOrderColumn];
var inspector = data[i][inspectorColumn];
// find or create sheet in logSpreadsheet
var logSheet = logSpreadsheet.getSheetByName(workOrder);
if(logSheet == null) {
try {
logSheet = logSpreadsheet.insertSheet(workOrder);
} catch(e) {
Logger.log(e);
continue;
}
logSheet.getRange("A1:B1").setValues([["Date", "Inspector"]]);
logSheet.setFrozenRows(1);
}
logSheet.insertRows(2);
//Here, the code works, but it shouldn't be here (it only needs to happen when the sheet is created)
//logSheet.getRange("A1:B1").setValues([["Date", "Inspector"]]);
logSheet.getRange("A2:B2").setValues([[date, inspector]]);
}