Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

97
Visualizações
Google Apps Script getSheetByName devuelve nulo cuando se usa una variable como argumento

Tengo una secuencia de comandos que está configurada para ejecutarse cada vez que se envía un disparador, y necesita ordenar los datos que recibe para determinar en qué hoja escribir los datos.

Solía codificarlo con los nombres exactos y funcionó bien, pero ahora estoy tratando de hacerlo más fácil de escalar. El value de la variable en el interruptor debe ser un número.

A continuación se muestra un fragmento del código.

 var myIds = [111, 222, 333, 444]; var myUsers = ['aaa', 'bbb', 'ccc', 'ddd']; ... switch (param) { case 1: break; case 2: for (let i = 0; i < myIds.length; i++) { if (value == myIds[i]) { userName = myUsers[i]; break; } } userName = 'ETC'; break; } if (userName != 'ETC') { let inSheet = 'In ' + userName; let outSheet= 'Out ' + userName; if (checkIn == true) sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(inSheet)); else sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(outSheet)); } else sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('ETC'));

En lugar de ir a sus respectivas hojas de entrada/salida, todo va a la hoja ETC. Otras veces, no habría ningún cambio en las sábanas. Se agradecería mucho si alguien pudiera explicar por qué sucede esto, además de la pregunta.

Gracias por adelantado.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

el break; dentro de su bucle for solo sale del bucle for , no es el case . Entonces sales del for y terminas en userName = "ETC"; , que sobrescribe cualquier valor que haya establecido el bucle.

En su lugar, puede usar indexOf o findIndex :

 case 2: const index = myIds.indexOf(value); // Or `.findIndex(id => id == value)` if you need `==` not `===` userName = index === -1 ? "ETC" : myUsers[index]; break;

Si realmente quisiera el ciclo for , podría asignar el nombre de userName antes del ciclo, de modo que el ciclo sobrescriba "ETC" :

 case 2: userName = "ETC"; for (let i = 0; i < myIds.length; i++) { if (value == myIds[i]) { userName = myUsers[i]; break; } } break;

Nota al margen: recomiendo evitar matrices paralelas como myIds y myUsers . Es muy fácil terminar actualizando uno y no el otro. En su lugar, considere una matriz de objetos:

 const users = [ {id: 111, name: "aaa"}, {id: 222, name: "bbb"}, {id: 333, name: "ccc"}, {id: 444, name: "ddd"}, ];

Entonces el primer ejemplo anterior usaría find :

 case 2: const user = users.find(({id}) => id == value); userName = user ? user.name : "ETC"; break;

En un entorno realmente moderno con encadenamiento opcional y fusión nula, podría cambiar userName = user ? user.name : "ETC"; a nombre de userName = user?.name ?? "ETC"; pero no hay nada malo con la versión condicional.


Nota al margen 2: ha utilizado let dentro de su bucle for , por lo que parece estar utilizando el GAS más moderno que admite las funciones ES2015+. Sugiero no usar var en código nuevo, siempre use let o const .

about 4 years ago · Juan Pablo Isaza Relatório

0

Aparentemente, el problema estaba en otra parte del código que no incluí en la pregunta, donde reinicié la variable de nombre de usuario en cada ciclo. Esto provocó que la variable de nombre de usuario no estuviera definida en algunos bucles, lo que a su vez provocó que la función getSheetByName devolviera un error.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda