Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
¿Cómo incrementar un conjunto de 2 letras según las ocurrencias de palabras en el rango usando GAS?

Tengo este que me parece peludo, pero estoy seguro de que ustedes pueden descifrarlo mientras se divierten.

El problema:

  1. Comprobación de empresa existe en el rango
  2. Si no, obtenga el último prefijo de ID, que parece AA , AB , etc.
  3. Generar un nuevo prefijo, que sería el siguiente, según el ítem anterior: AC
  4. Si esa empresa aparece más de una vez, aumente el sufijo del número de identificación XX001 , XX002 , etc.

Esto es lo que he encontrado hasta ahora:

 function generateID() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const clientSheet = ss.getSheetByName('Clients'); const dataRng = clientSheet.getRange(8, 1, clientSheet.getLastRow(), clientSheet.getLastColumn()); const values = dataRng.getValues(); const companies = values.map(e => e[0]);//Gets the company for counting for (let a = 0; a < values.length; a++) { let company = values[a][0]; //Counts the number of occurrences of that company in the range var companyOccurrences = companies.reduce(function (a, b) { return a + (b == company ? 1 : 0); }, 0); if (companyOccurrences > 1) { let clientIdPrefix = values[a][2].substring(0, 2);//Gets the first 2 letters of the existing company's ID } else { //Generate ID prefix, incrementing on the existing ID Prefixes ('AA', 'AB', 'AC'...); let clientIdPrefix = incrementChar(values[a][2].substring(0,1)); Logger.log('Incremented Prefixes: ' + clientIdPrefix) } } } //Increment passed letter var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('') function incrementChar(c) { var index = alphabet.indexOf(c) if (index == -1) return -1 // or whatever error value you want return alphabet[index + 1 % alphabet.length] }

... y esto está tomado de la respuesta de tckmn , que trata solo con una letra.

Este es el resultado esperado: ingrese la descripción de la imagen aquí

Este es el enlace al archivo , si alguien quiere darle una oportunidad.

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En su situación, ¿qué tal la siguiente modificación?

Guión modificado:

 // Please run this function. function generateID() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('Clients'); const dataRng = sheet.getRange(8, 1, sheet.getLastRow() - 7, 1); const values = dataRng.getValues(); let temp = ""; let init = ""; let count = 0; const res = values.map(([a], i) => { count++; if (temp != a) { count = 1; temp = a; init = i == 0 ? "AA" : wrapper(init); } return [`${init}${count.toString().padStart(3, "0")}`]; }); console.log(res) sheet.getRange(8, 4, res.length, 1).setValues(res); } //Increment var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('') function incrementChar(c) { var index = alphabet.indexOf(c) if (index == -1) return -1 // or whatever error value you want return alphabet[index + 1 % alphabet.length] } // I added this function. function wrapper(str) { const [a, b] = [...str]; const r1 = incrementChar(a); const r2 = incrementChar(b); return (r2 ? [a, r2] : (r1 ? [r1, "A"] : ["over"])).join(""); }
  • En esta modificación, agregué una función contenedora. Esta función contenedora utiliza su secuencia de comandos de muestra de incrementChar .
  • Cuando este script se ejecuta en su hoja de cálculo de muestra, console.log(res) muestra [["AA001"],["AA002"],["AA003"],["AA004"],["AA005"],["AB001"],["AB002"],["AB003"],["AC001"]] . Y este valor se pone en la columna "D".

Nota:

  • Esta muestra modificada es para su hoja de cálculo proporcionada. Así que ten cuidado con esto.

Referencia:

  • mapa()
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda