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

151
Views
Lectura y actualización de varias pestañas en la misma hoja de cálculo

Tengo una hoja de cálculo de Google donde recupero datos usando el complemento de Google Analytics. En una pestaña, combino todos los datos y uso esta pestaña específica para mi informe de Google Datastudio. Aquí analizo los datos de mi campaña de Google Ads: los costos y las conversiones.

Esta hoja de cálculo tiene varias pestañas (cada pestaña contiene una conversión específica). Necesito poder leer y escribir en varias pestañas. Tiene que leer los datos de Google Analytics y escribir estos datos en otra hoja. Originalmente creé este script para leer desde 1 pestaña y para escribir en 1 pestaña y estaba funcionando. Entonces noté que tendré que hacer esto para casi todas las pestañas.

Este es mi guión actual:

 function readAndWrite() { var spreadsheetId = 'xxx'; var counter = 0; var rangeName = ['readingTab1!A16:C','readingTab2!A16:C','readingTab3!A16:C','readingTab4!A16:C','readingTab5!A16:C']; var rangePush = ['writingTab1','writingTab2','writingTab3','writingTab4','writingTab5','writingTab5']; var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName[counter]).values; var data = []; if (!values) { Logger.log('No data found.'); } else { Logger.log('Starting script.'); Logger.log('There are ' + values.length + ' unique rows.'); Logger.log(values[0][2]); while (counter < 5){ data.length = 0; for (var row = 0; row < values.length; row++) { var campaign = values[row][0]; var date = values[row][1]; var cost = values[row][2]; data.push({range: rangePush[counter], values: [[date, campaign, cost]]}); } counter++; Sheets.Spreadsheets.Values.batchUpdate({data: data, valueInputOption: "USER_ENTERED"},spreadsheetId); } } Logger.log('Finished.'); }

En rangeName, he creado una matriz con los nombres y rangos de mi pestaña desde donde debería leer. En rangePush, creé una matriz con los nombres a los que debería enviar los datos.

Cuando ejecuto el script recibo el siguiente error:

GoogleJsonResponseException: la llamada API a sheets.spreadsheets.values.batchUpdate falló con el error: datos no válidos [1886]: no se puede analizar el rango: writingTab2.

¿Hay alguien que pueda ver lo que va mal y pueda ayudarme aquí? Espero que mi explicación sea clara, si no, por favor hágamelo saber.

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Creo que su objetivo es el siguiente.

  • Desea copiar los valores de la readingTab#!A16:C a la hoja writingTab# usando Sheets API con Google Apps Script.
    • Esos nombres de hojas se colocan en las matrices y cada índice de ambos corresponde a las hojas de copiar y pegar.

Si mi comprensión es correcta, ¿qué tal la siguiente modificación?

Al principio, sobre su error, cuando vi su hoja de cálculo de muestra, hay 3 hojas de lectura y escritura de 'readingTab1!A16:C', 'readingTab2!A16:C', 'readingTab3!A16:C' y 'writingTab1', 'writingTab2', 'writingTab3' . Pero su script usa while (counter < 5){ . Por esto, el rango se vuelve undefined después de que el counter es más de 4. Pensé que esta podría ser la razón de su problema.

Para lograr su objetivo eliminando este problema, ¿qué tal el siguiente script modificado?

Guión modificado:

Cuando se utilizan los métodos spreadsheets.values.batchGet y spreadsheets.values.batchUpdate , la secuencia de comandos se convierte en la siguiente secuencia de comandos simple.

 function readAndWrite() { var spreadsheetId = 'xxx'; var rangeName = ['readingTab1!A16:C', 'readingTab2!A16:C', 'readingTab3!A16:C']; var rangePush = ['writingTab1', 'writingTab2', 'writingTab3']; var values = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: rangeName}).valueRanges; values.forEach((v, i) => v.range = rangePush[i]); Sheets.Spreadsheets.Values.batchUpdate({ data: values, valueInputOption: "USER_ENTERED" }, spreadsheetId); }
  • En este script modificado, se supone que hay 3 hojas de lectura y escritura de 'readingTab1!A16:C', 'readingTab2!A16:C', 'readingTab3!A16:C' y 'writingTab1', 'writingTab2', 'writingTab3' . Cuando agregue más hojas, agréguelas a las matrices de rangeName y rangePush .

Nota:

  • En este script, verifique nuevamente los valores de rangeName y rangePush y los nombres de las hojas de su hoja de cálculo.

  • Este script utiliza la API de hojas. Por lo tanto, habilite Sheets API en los servicios avanzados de Google.

  • Creo que en su situación, el servicio de hoja de cálculo en lugar de la API de hojas también puede lograr su objetivo. Pero creo que el costo del proceso será menor cuando se use Sheets API. Pero, cuando desee lograr su objetivo sin usar Sheets API, también puede usar el siguiente script.

     function readAndWrite2() { var spreadsheetId = 'xxx'; var rangeName = ['readingTab1!A16:C', 'readingTab2!A16:C', 'readingTab3!A16:C']; var rangePush = ['writingTab1', 'writingTab2', 'writingTab3']; var ss = SpreadsheetApp.openById(spreadsheetId); rangeName.forEach((r, i) => ss.getRange(r).copyTo(ss.getSheetByName(rangePush[i]).getRange("A1"))); }

Referencias:

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