getValues vs getDisplayValues en Google Apps Script


 Generalmente cuando queremos leer un hoja de cálculo con Google Apps Script usamos la función getValues del range. Esto en casi todos lo casos funciona como esperamos , pero hay ciertos casos en los que nos puede dar problemas, sobretodo cuando hablamos de datos formateados ( por ejemplo fechas o monedas)

El caso de las fechas en Google Sheets es paradigmático. Podemos ver un ejemplo en la siguiente imagen, todas las celdas tienen el mismo valor pero su representación es claramente diferente en cada celda por que depende del formato:

Diferencias de formato con celdas con los mismo valores

Lo gracioso de estas celdas es que si obtienes los valores con getValues obtendremos siempre el mismo valor. Si queremos obtener el valor tal y como se ve en la celda tendremos que usar la función getDisplayValues.

Para hacer la prueba podemos usar este código:

function TestDisplayValues() 
{
    var sheet          = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var range          = sheet.getDataRange();
    var values         = range.getValues();
    var display_values = range.getDisplayValues();
    
    sheet.getRange(1, 2, values.length, values[0].length).setValues(values);
    sheet.getRange(1, 3, display_values.length, display_values[0].length).setValues(display_values);
}

Básicamente este código  obtiene un rango y copia en otras columnas lo que obtenemos con el getValues y con el getDisplayValues.

Este es el resultado:

Diferencias entre getValue y getDisplayValues

Como podéis ver en la columna B hemos puesto los valores que vienen del getValues,  mientras que lo que hay en la columna C hay los valores que vienen del getDisplayValues.

Es un tema bastante más complejo de lo que puede parecer en un inicio, no vaciléis en hacerme llegar vuestras dudas.

Nos vemos




4 comentarios:

  1. sabes cómo mantener el formato al hacer copia de los valores? si está destacado o con color, por ejemplo

    ResponderEliminar
    Respuestas
    1. Hola buenas, lo más fácil y confiable es que copies y pegues el formato uno a uno: https://www.tutorialesgoogleappscripts.com/2020/09/como-cambiar-color-celda-con-google-apps-script.html No es muy bonito, pero con eso estás seguro que funcionara, sino a veces te puedes llevar sorpresas. Espero que te sirva!

      Eliminar
  2. Una consulta, ¿cómo puedo mantener el tipo de letra cuando copio una celda? He probado con getDisplayValues, pero no me funciona.
    Gracias!

    ResponderEliminar

Tal vez te interese