scripts - javascript google sheets
Secuencia de comandos para cambiar el nombre y reordenar las hojas segĂșn la tabla (1)
Pregunta 1.
Intento escribir un script para cambiar el nombre y reordenar las hojas en una hoja de cálculo de Google basada en una tabla en una de las hojas. He estado probando diferentes métodos durante horas para que funcione en vano. (Todavía estoy tratando de entender los loops)
Este script estará en una hoja que compartiré con otras personas que accidentalmente pueden reordenar o posiblemente cambiar el nombre de una hoja.
He incluido el código actual y un archivo de muestra.
NOTA: los nombres de las hojas serán completamente diferentes y no será posible ordenarlos alfabéticamente.
function OnOpen(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for( var i in sheets )
if(sheets[i].getSheetId() == ''978626951''){
var sheet = ss.getSheets()[i];
break;
}
var sheetData = sheet.getRange(2,1,11,3).getValues();
for (var a = 0; a < sheetData.length; a++) {
for (var b = 0; a < sheetData.length; b++){
var find = sheetData[a][0]; Logger.log(sheets[a].getSheetName());
if(find == sheets[a].getSheetId()) {
var temp = ss.getSheets()[a].activate();
ss.moveActiveSheet(sheetData[a][2]);
}
}
}
}
Enlace a la hoja de cálculo de muestra con script.
Pregunta n. ° 2
De acuerdo con W3schools, es posible incrementar un bucle desde dentro del bucle. (código de formulario W3)
var i = 0;
var len = cars.length;
for (; i < len; ) {
text += cars[i] + "<br>";
i++;
}
Sin embargo, cuando intento hacer esto en Google Script, el depurador se cuelga y tengo que actualizar. ¿No es esto posible en el script de Google?
Cualquier ayuda sería muy apreciada.
Modifiqué un poco tu código y parece funcionar ahora:
function onOpen(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for( var i in sheets )
if(sheets[i].getSheetId() == ''978626951''){
var sheet = sheets[i]; // reuse the var sheets
break;
}
//I USED COMMENTED CODE BELOW SINCE I NEEDED TO FIND THE SET OF SHEET IDS FOR MY TEST SPREADSHEET; SO ITS NOT REQUIRED TO RUN ONCE IDs ARE FOUND
//sheet.appendRow([''-''])
// for( var x in sheets)
// sheet.appendRow([sheets[x].getSheetId(), sheets[x].getSheetName() ] );
//
var sheetData = sheet.getRange(2,1,11,3).getValues();
for (var a = 0; a < sheetData.length; a++) {
var find = sheetData[a][0];
for(var b = 0 ; b < sheets.length; b++){
if(find == sheets[b].getSheetId() ) {
Logger.log(sheets[b].getName());
sheets[b].activate(); // not : ss.getSheets()[a]
ss.moveActiveSheet(sheetData[a][2]);
sheets[b].setName(sheetData[a][1]); // I added this rename bit
}
}
}
}
(pero tenga en cuenta que aún tengo que actualizar el ss (es decir, F5 en el navegador) después de haber abierto la hoja, parece que el script hace los cambios en la hoja de cálculo, pero no se muestran en la página hasta que actualice )
Probé el código en esta hoja de cálculo: https://docs.google.com/spreadsheets/d/1W7IiEQgsHlWFm7EThyN3lcY6duKh9EW2sQDYFqbwID8/edit?usp=sharing
Su Q2: esto funciona bien en Google Apps Script:
function myFunction() {
var cars = ''cars'', text = '''';
var i = 0;
var len = cars.length;
for (; i < len; ) {
text += cars[i] + "<br>";
i++;
}
Logger.log(text)
}