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

259
Vistas
Cree una hoja separada para cada nombre en un rango y mueva los valores debajo de cada nombre a cada hoja

Tengo una lista maestra con docenas de nombres en la fila 2 repartidos en varias columnas (A2:Z2). Debajo de cada nombre hay una lista de valores y datos.

fila 2 John Salida Jaime
fila 3 Valor Valor Valor
fila 4 Valor Valor Valor
fila 5 Valor Valor
fila 6 Valor Valor

Cada nombre debe crearse en una hoja.

Aquí está la secuencia de comandos utilizada para crear una hoja para cada nombre en la fila 2:

 function generateSheetByName() { const ss = SpreadsheetApp.getActive(); var mainSheet = ss.getSheetByName('Master List'); const sheetNames = mainSheet.getRange(2, 1, mainSheet.getLastRow(), 1).getValues().flat(); sheetNames.forEach(n => ss.insertSheet(n)); }

Quiero que este script no solo cree una hoja para cada nombre, sino que también transfiera todos los valores debajo de cada nombre hasta la última fila de la columna respectiva.

por ejemplo, John está en A2 y A3:A son los valores que deben trasladarse a la hoja creada. Sally es B2 y B3:B son los valores que deben transferirse.

En la hoja de John: "John" es el encabezado en A1 y los valores de la columna se encuentran en A2:A

Para cada hoja que se crea, también quiero agregar otros valores manualmente. Como por ejemplo, si se crea la hoja "John" y se agregan 20 valores en A2:A22, quiero que el script agregue una casilla de verificación en B2:B22. O agregar siempre una fórmula en B1 como "=counta(a2:a)" o algo así.

¿Cómo puedo hacer esto con un bucle eficiente? Tenga en cuenta que esto probablemente creará 50 hojas y transferirá entre 10 y 50 valores por hoja

Imágenes de ejemplo:

Lista maestra:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Cada nombre tendrá una hoja creada que se verá así

hoja de juan

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

0

Creo que su objetivo es el siguiente.

  • Desea lograr desde la primera imagen hasta la segunda imagen utilizando Google Apps Script.
  • Cuando los valores se colocan en la hoja creada, desea insertar las casillas de verificación en la columna "B" y desea colocar una fórmula en la celda "B1".
  • Desea reducir el costo del proceso del script.

En este caso, ¿qué tal el siguiente script de muestra?

Guión de muestra:

En esta secuencia de comandos de muestra, para reducir el costo del proceso de la secuencia de comandos, utilicé Sheets API. Cuando se utiliza Sheets API, el costo del proceso podrá reducirse un poco. Entonces, antes de usar este script, habilite Sheets API en los servicios avanzados de Google .

 function generateSheetByName() { // 1. Retrieve values from "Master List" sheet. const ss = SpreadsheetApp.getActive(); const mainSheet = ss.getSheetByName('Master List'); const values = mainSheet.getRange(2, 1, mainSheet.getLastRow(), mainSheet.getLastColumn()).getValues(); // 2. Transpose the values without the empty cells. const t = values[0].map((_, c) => values.reduce((a, r) => { if (r[c]) a.push(r[c]); return a; }, [])); // 3. Create a request body for using Sheets API. const requests = t.flatMap((v, i) => { const sheetId = 123456 + i; const ar = [{ addSheet: { properties: { sheetId, title: v[0] } } }]; const temp = { updateCells: { range: { sheetId, startRowIndex: 0, startColumnIndex: 0 }, fields: "userEnteredValue,dataValidation" }, }; temp.updateCells.rows = v.map((e, j) => { if (j == 0) { return { values: [{ userEnteredValue: { stringValue: e } }, { userEnteredValue: { formulaValue: "=counta(a2:a)" } }] } } const obj = typeof (e) == "string" || e instanceof String ? { stringValue: e } : { numberValue: e } return { values: [{ userEnteredValue: obj }, { dataValidation: { condition: { type: "BOOLEAN" } } }] } }); return ar.concat(temp); }); // 4. Request to the Sheets API using the created request body. Sheets.Spreadsheets.batchUpdate({requests}, ss.getId()); }

Nota:

  • En este script de muestra, usé sus situaciones de entrada y salida de muestra. Entonces, cuando estas estructuras son diferentes de su situación real, es posible que no se pueda usar el script. Tenga cuidado con esto.

Referencia:

  • Método: hojas de cálculo.batchUpdate
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