Cómo escribir en una celda de una hoja de cálculo con Google Apps Script

Artículo perteneciente a la introducción de Google Apps Script

Hace poco explicamos como leer información de una hoja de cálculo con GAS pero de poco nos servirá saber leer si no sabemos escribir.

La forma de escribir en una celda con GAS  es obtener esa celda y cambiar el valor que contiene. Esta técnica sencilla permite no solo cambiar el contenido de una celda, sino cambiarle el color de fono, de la fuente , el borde, etc...

El código es muy sencillo:

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    { name : "Escribir",  functionName : "Escribir"}
   ];
  spreadsheet.addMenu("Lord Pakus Scripts", entries);
};

function Escribir()
{
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
 
  sheet.getRange(1,1).setValue('Hola').setBackground('red');
  sheet.getRange(1,2).setValue('Mundo').setBackground('green');
}


Con estas pocas lineas ya tenéis la base para empezar a escribir vuestros documentos. 

Si no sabes muy bien como va esto de los Google Apps Scripts te recomiendo que empieces por el principio con un sencillo Hola Mundo y luego te pongas con este artículo.

Solo tenéis que tener en cuenta un pequeño detalle, la escritura es lenta y tarda un poco en refrescarse el contenido. Si veis que ejecutáis el script, que finaliza, pero que no ha hecho nada, refrescad la hoja de cálculo.

Ya para finalizar, recordad que no abusar de las escrituras en hojas de cálculo, no están pensadas para ser escritas masivamente y pueden ralentizar muchísimo la ejecución de los scripts. Si necesitais escribir gran cantidad de información tal vez deberíais mirar este post.

Espero que os sirva

Nos vemos

12 comentarios:

  1. Hola gran aporte, te comento un poco por encima lo que quiero realizar ya que veo que entiendes bastante, yo tengo unas landing page con google adwords, hay un formulario lo que quiero es que en la pagina .php que procesa el formulario quiero escribir el nombre,telefono,correo y mensaje que ha introducido el usuario, esto lo he de mandar a google spreadsheet y no se como hacerlo si con php o js, ya que no quiero instalar ninguna libreria a no se que fuera necesario

    ResponderEliminar
  2. Yo lo haría con js, creo que no te haría falta instalar nada. Igualmente no soy experto en php asi que es posible que hubiera otras soluciones mejores.

    ResponderEliminar
  3. muy bueno, una pregunta descolgada, ando buscando como hacer en una macro de scripts GAS la funcion de autocompletar datos al arrastrar una celda , en el viejo excel era:
    Range("D1").Select
    Selection.AutoFill Destination:=Range("D1:D14"), Type:=xlFillDefault

    pero no encuentro la contrapartida para las hojas de calculo de drive
    ¿alguien tiene alguna idea?

    ResponderEliminar
    Respuestas
    1. Hola, Igual no te estoy entendiendo pero el autocompletar manualmente existe.... para que lo necesitas en forma de GAS? Dependiendo de para que lo necesites pueden existir diferentes soluciones... podrias concretar un poco mas?

      Eliminar
    2. si claro, se que existe, la uso manualmente, te explico el problema

      arme una hoja de calculo en drive con muchas paginas, y tengo un montón de funciones lógicas que van de una pagina a otra para automatiza mucho trabajo que se hacia a mano, tengo unos 15 usuarios que le tienen que meter los datos

      son planillas con datos para que se calcule la estadística sola

      pero mis usuarios son "especiales" y les cuesta pasar simples datos numéricos, como son muchos numeros se equivocan todo el tiempo, y copian, pegan celdas y columnas enteras , de lo que seria mi area de datos, que es lo unico que pueden modificar

      estos contratiempos que ellos tienen, hacen que las formulas que estan cruzadas de una pagina a otra cambien siguiendo las celdas que son copiadas y pegadas

      estos errores en las formulas que siguen celdas equivocadas hacen que la estadística sea incoherente, y que planillas enteras estén mal

      yo tengo que corregir las formulas, no es difícil simplemente hay que buscar una celda que tenga las formulas bien y estirar para que la función de autocompletar corrija el error en toda la planilla , ... pero tengo que hacerlo manualmente unas 200 veces mas o menos, cada vez que mis usuarios hacen de las suyas, por lo que una macro seria una solución

      si en secuencia de comandos existe la función de autocompletar para reajustar todas las paginas de mi hoja de calculo, no tendría que crear una función que especifique cada una de las formulas en cada una las planillas

      Eliminar
    3. Ahora he entendido el problema. Según que usuarios deberian hacer un examen para tener permiso para introducir datos :D. Todos nos hemos encontrado con esto. Si el problema es ese.... tal vez podrias montar un script que se ejecute cada cierto tiempo y que se asegure que todas las celdas tienen las formulas que toca. Sinceramente no lo he probado nunca pero estoy casi seguro que haciedo un setvalue de una celda con "=FORMULA(PARAMETROS)" debería funcionar, así que no sería demasiado complicado implementarlo. No se si me explicado o aún te he liado más. :D Si lo pruebas y te funciona publicalo para que podamos verlo, es un tema muy interesante.

      Eliminar
    4. si, algunos usuarios deberían volver al jardín de infantes a que les enseñen los números otra vez.
      como sea, tan vez no te entienda, se me ocurrió algo, pero me parece demasiado complicado y sigo pensando que debería existir una forma mas facil de hacerlo
      function myFunction() {

      var i=0

      do {
      i += 1

      a = "Hoja 1!A"
      b = i
      c= a.concat(b)

      d = "=SUM(A"
      e = i
      f =":B"
      k =")"
      g = d.concat(e, f, e, k)

      m = "Hoja 1!C"
      n = i
      o = m.concat(n)

      p = "Hoja 1!b"
      q = i
      r= p.concat(q)

      SpreadsheetApp.getActive().getRange(c).setValue(i)
      SpreadsheetApp.getActive().getRange(o).setValue(g)
      SpreadsheetApp.getActive().getRange(r).setValue(i)
      } while (i < 20)
      }

      pero esto no me es practico, tengo celdas con media carilla de formulas lógicas anilladas, la estructura seria gigante solo para tratar de nombrar todas las celdas involucradas

      armar esto con una función de concatenar pedazo por pedazo es de locos

      Eliminar
    5. caramba ... es exactamente lo que buscaba, sabia que tenia que ser algo bien sencillo, solo que no podía verlo,

      use

      var t = SpreadsheetApp.getActiveSheet();
      t.getRange('E1').copyTo(t.getRange('E2:E20'));

      y va como piña

      muchas gracias, en serio gracias, cuando uno se traba con una pavada puede estar semanas golpeándose la cabeza contra el teclado sin ver que lo que le falta es ...una coma

      Eliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Buenas tardes, una consulta, es posible un script capaz de obtener los comentarios hechos en una celda y detallarlos en una en otra pestaña de la hoja de cálculo.

    Gracias

    ResponderEliminar
    Respuestas
    1. Si, se puede hacer, recuerdo haberlo hecho para un proyecto hace ya un tiempo. Tendrias que mirarte la documentación de GAS que ahora mismo no recuerdo como iba, pero creo que era una función de Range o Cell. A la que me dejen escribo algo sobre los comentarios que es un tema que he dejado siempre abandonado

      Eliminar

Related Posts Plugin for WordPress, Blogger...