Estou tentando fazer um loop em Sheets e getLastColumn(). Eu ativo a primeira planilha e obtenho a última coluna, então ativo a próxima planilha, mas dessa vez recebo um erro em getLastColumn(). Estou fazendo isso em um loop for, pode ser esse o problema?
//sort fab, milling, turning, engraving
sheet = SpreadsheetApp.getActive().getSheetByName("Fab Schedule");
sheet.activate;
var lastColumnFab = sheet.getLastColumn();
var lastColumn = lastColumnFab;
var lastColumnMilling;
var lastColumnTurning;
var lastColumnEngraving;
var currentSheet = SpreadsheetApp.getActiveSheet().getSheetName();
Logger.log(currentSheet);
for(a=0;a<3;a++){ // 'a' is for looping through the different sheets
Logger.log(a);
// counting non-empty rows
var BValues = sheet.getRange("B3:B").getValues();
var i=0;
var singleBValue = "";
//Logger.log(BValues[i]);
for(i = 0; BValues[i] != ""; i++){
singleBValue = BValues[i];
//console.log({i,singleBValue});
}
var lastRow = i;
i=i+3;
// arrays begin with 0 // all rows and columns begin with 1
sheet.getRange(3,2,lastRow,lastColumn).activate();
//sheet.getRange('B3:V').activate(); //number of columns is different on every
sheet
var statusColumn = getHeaderNumber("Status")+1; //get header uses array, so it
starts at 0
var dueDateColumn = getHeaderNumber("Due Date")+1;
var engineerColumn = getHeaderNumber("Engineer")+1;
//sort by incomplete->complete, then
sheet.getActiveRange().sort([{column: statusColumn, ascending: false}, {column: dueDateColumn, ascending: true},{column:engineerColumn, ascending: true}]);
//sheet.getActiveRange().sort([{column: 14, ascending: false}]);//, {column: 18, ascending: true},{column:2, ascending: true}]);
sheet.getRange(3,14,lastRow,lastColumn-14).setHorizontalAlignment("center"); //number of columns is different on every sheet
sheet.getRange(3,1,lastRow,lastColumn).setVerticalAlignment("middle");
sheet.getRange(3,1,lastRow,lastColumn).setFontFamily("Arial");
sheet.getRange(3,1,lastRow,lastColumn).setFontSize(10);
if (a==0){
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Milling Schedule");
sheet.activate();
var currentSheet = SpreadsheetApp.getActiveSheet().getSheetName();
Logger.log(currentSheet);
lastColumnMilling = sheet.getLastColumn(); //error?
lastColumn = lastColumnMilling;
}
Exception: The coordinates of the range are outside the dimensions of the sheet. Sortbyincompleteanddate @ sort.gs:62
O código não está funcionando corretamente porque o
for (a
loop itera três vezes, mas o código tenta manipular apenas duas planilhas. Use uma abordagem mais estruturada, talvez assim:Note que adicionei um
sheet
parâmetro àgetHeaderNumber()
chamada. Você precisará ajustar essa função para aceitar e usar osheet
parâmetro em vez de localizar a planilha comSpreadsheet.getActiveSheet()
ou meios semelhantes.Veja Array.forEach() .