• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

141
Views
¿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 3 years ago · Juan Pablo Isaza
1 answers
Answer question

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 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error