Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

258
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!