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

432
Vistas
¿Hay alguna manera de actualizar varios rangos de hojas de Google no contiguos usando el script de aplicaciones al mismo tiempo? (usando SpreadsheetApp, no hojas api)

supongamos que tenemos una tabla de 4 x 4 a partir de A1, ahora normalmente, si quiero actualizar sus valores de una vez, lo haré

 sheet.getRange("A1:D4").setValues(values);

ahora, si los datos no son contiguos, entonces tengo 3 4 x 4 tablas separadas con otros datos entre ellas, pero las tengo nombradas como rangos, es decir (tabla1, tabla2, tabla3), ¿puedo hacer algo como:

 sheet.getNamedRanges([table1range, table2range, table3range]).setValues([table1data, table2data, table3data]);

en vez de:

 sheet.getRange(table1range).setValues(table1data); sheet.getRange(table2range).setValues(table2data); sheet.getRange(table3range).setValues(table3data);

¿Entonces ahora las 3 tablas se actualizarán en la misma operación en lugar de 3 operaciones diferentes para ahorrar tiempo de ejecución? gracias de antemano.

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

0

De acuerdo con la propuesta de Tanaike, sugiero una ligera modificación.

 const ss = SpreadsheetApp.getActiveSpreadsheet() const sheet = ss.getActiveSheet() const ranges = [table1range2D, table2range2D, table3range2D]; const values = [data1values2D, data2values2D, data3values2D]; const data = ranges.map((e, i) => ({ range: `'${sheet.getName()}'!${e}`, values : values[i] })); Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: "USER_ENTERED" }, ss.getId());

por ejemplo

 function updateGoogleSheet() { const ss = SpreadsheetApp.getActiveSpreadsheet() const sheet = ss.getActiveSheet() const otherSheet = ss.getSheetByName('other') const table1range2D = 'A1:B2', table2range2D = 'C4:D5', table3range2D = 'E7:F8' const data1values2D = otherSheet.getRange('A1:B2').getValues(), data2values2D = otherSheet.getRange('C4:D5').getValues(), data3values2D = otherSheet.getRange('E7:F8').getValues() const ranges = [table1range2D, table2range2D, table3range2D]; const values = [data1values2D, data2values2D, data3values2D]; const data = ranges.map((e, i) => ({ range: `'${sheet.getName()}'!${e}`, values : values[i] })); Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: "USER_ENTERED" }, ss.getId()); }

donde en la hoja llamada 'otro' podemos encontrar en A1 =sequence(10,10,0,1)

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que su objetivo es el siguiente.

  • Desea lograr el script como sheet.getNamedRanges([table1range, table2range, table3range]).setValues([table1data, table2data, table3data]); con el fin de reducir el costo del proceso.
  • Es decir, desea colocar los valores para cada rango en la hoja de cálculo de Google utilizando Google Apps Script. Y el rango es

En este caso, creo que Sheets API se puede usar para lograr su objetivo de la siguiente manera. En este caso, este hilo podría ser útil. Ref. Cuando se usa Sheets API para su situación, el costo del proceso se puede reducir en lugar del método para colocar los valores en cada rango en el bucle mediante el servicio de hoja de cálculo (SpreadsheetApp). Árbitro

 const spreadsheetId = "###"; // Please set the Spreadsheet ID. const ranges = [table1range, table2range, table3range]; // Please set table1range, table2range, table3range as A1Notation. const values = [table1data, table2data, table3data]; // Please set table1data, table2data, table3data. const data = ranges.map((e, i) => ({range: e, values: [[values[i]]]})); Sheets.Spreadsheets.Values.batchUpdate({data, valueInputOption: "USER_ENTERED"}, spreadsheetId);

Pero, en este caso, pensé que podría ser un poco difícil crear el cuerpo de la solicitud. Así que creé una biblioteca de Google Apps Script como contenedor para usar la API de hojas. Cuando se utiliza esta biblioteca, el script de ejemplo es el siguiente.

1. Instalar biblioteca.

Puede ver el método para instalar la biblioteca aquí . Y, este script usa Sheets API. Por lo tanto , habilite Sheets API en los servicios avanzados de Google .

2. Guión de muestra:

 const ranges = [table1range, table2range, table3range]; // Please set table1range, table2range, table3range as A1Notation. const values = [table1data, table2data, table3data]; // Please set table1data, table2data, table3data. const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); RangeListApp.getSpreadsheet(spreadsheet).getRangeList(ranges).setValues(values);
  • Cuando vi su secuencia de comandos, pensé que esta secuencia de comandos de muestra podría ir en la misma dirección que esperaba.
  • Cuando se ejecuta este script, cada valor de values se coloca en cada rango de ranges mediante Sheets API.

Referencias:

  • Benchmark: lectura y escritura de hojas de cálculo usando Google Apps Script
  • Método: hojas de cálculo.valores.batchUpdate
  • RangeListApp
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