Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda