341 anunciantes en línea
341 anunciantes en línea
¿Eres nuevo o estas pensando en comenzar a utilizar AdWords? Aprende a configurar una campaña, evalúa la inversión que realizas y descubre la mejor forma de llevar el manejo de tu cuenta.
Guiame
favorite_border
Responder

Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Estudiante ✭
# 1
Estudiante ✭

Hola a todos.

 

He montado un Script que me saca con un report de la API los resultados de mis campañas para un determinado período de tiempo.

 

He revisado esta documentación para escribir en una hoja de cálculo que tengo en el drive:

 

https://developers.google.com/adwords/scripts/docs/examples/spreadsheetapp#open-a-spreadsheet

 

Utilizo esta función que me va añadiendo línea por línea y creo que no  es lo mejor en rendimiento:

 

 sheet.appendRow(['a man', 'a plan', 'panama']);

La pregunta es, ¿es posible escribir todos los datos de golpe en la hoja de cálculo?

 

Es decir, yo almacenaría los datos en un array y busco una instrucción me los grabe todos de golpe sin tener que añadir línea a línea con el appendRow dentro de un bucle while como estoy haciendo ahora mismo.

 

A ver si alguien puede echarme una mano.

 

Saludos

 

Expertos respondieronverified_user

Soluciones aceptadas
Marcado como solución aceptada.
Solución
Aceptado por AleixI (Community Manager)
abril 2016

Re: Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Colaborador Principal
# 2
Colaborador Principal

Buenas @Fernando R,

 

yo meto todos los datos en un array:

 

var vectorDatos = []; 

extraigo los datos

vectorDatos.push([adGroup.getName(),adGroup.isEnabled(),stats.getCost(),stats.getConversions()]); 

 

Una vez que tengo los datos en el Array, los introduzco en el Spreadsheet así:

 

var SPREADSHEET_URL = 'URL de la hoja';

  var libro = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var hoja = libro.getSheetByName('NombrePagina');

  var rango = hoja.getRange(2, 1, vectorDatos.length, 4); 
  rango.setValues(vectorDatos);

Así escribiría a partir de la columna 1, celda 2.

 

 

 

Espero que te sirva de ayuda para lo que quieres realizar Guiño

 

¡Un saludo!

 

Carlos David López

Responsable de Marketing Online en Idento

Ver la solución en mensaje original publicado


Todas las respuestas
Marcado como solución aceptada.
Solución
Aceptado por AleixI (Community Manager)
abril 2016

Re: Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Colaborador Principal
# 2
Colaborador Principal

Buenas @Fernando R,

 

yo meto todos los datos en un array:

 

var vectorDatos = []; 

extraigo los datos

vectorDatos.push([adGroup.getName(),adGroup.isEnabled(),stats.getCost(),stats.getConversions()]); 

 

Una vez que tengo los datos en el Array, los introduzco en el Spreadsheet así:

 

var SPREADSHEET_URL = 'URL de la hoja';

  var libro = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var hoja = libro.getSheetByName('NombrePagina');

  var rango = hoja.getRange(2, 1, vectorDatos.length, 4); 
  rango.setValues(vectorDatos);

Así escribiría a partir de la columna 1, celda 2.

 

 

 

Espero que te sirva de ayuda para lo que quieres realizar Guiño

 

¡Un saludo!

 

Carlos David López

Responsable de Marketing Online en Idento

Re: Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Estudiante ✭
# 3
Estudiante ✭
Hola Carlos David.

Te estoy infinitamente agradecido. El rendimiento del script se ha multiplicado por 100 con la solución que me has aportado.

Ya que estamos, ¿puedes detallarme qué son los parámetros que le paso al getRange?

hoja.getRange(
2, --> ¿Número de fila desde la que comenzamos a escribir?
1, --> ¿Número de columna desde la que comenzamos a escribir?
vectorDatos.length, --> ¿Número de elementos del array?
4 --> ¿Número de dimensiones del array?
);

Una última cuestión, creo que no me va a ocurrir, pero, ¿sabes el número máximo de elementos que puede tener el array?

Muchas gracias y saludos

Re: Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Colaborador Principal
# 4
Colaborador Principal

Gracias a ti Fernando, me alegro mucho de que te haya servido, para eso estamos Guiño

 

Los parámetros son justo como los has descrito.

 

En cuanto al máximo de elementos no sé decirte un número exacto, pero yo he metido al menos 5.000 elementos en algunos informes, así que no debes tener problema.

 

¡Un saludo!

 

 

 

 

Carlos David López

Responsable de Marketing Online en Idento

Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Novato ✭
# 5
Novato ✭

Hola, ese código funciona de una hoja a otra diferente?

El getRange me da error cuando lo intento.

Gracias

Scripts: SpreadsheetApp Grabar datos en bloque en Hoja de Cálculo situada en el drive

Estudiante ✭
# 6
Estudiante ✭

¿Puedes detallar más lo que intentas hacer? ¿Quieres copiar datos de una hoja a otra?