March 26, 2019

Leer una hoja de cálculo con PHP

Leer una hoja de cálculo con PHP es tan fácil como una sola línea de código. ¡Si así es! 🙂

La complejidad realmente aumenta en los pasos previos y posteriores a esa línea de código en función de lo que necesites realizar.


Crear el CSV

En primer lugar tienes que convertir la hoja de cálculo «excel» en un CSV, que no es mas que un fichero de texto plano en el que todos los valores que visualmente ves como una tabla de filas y columnas pasan a estar separados por comas.

En el caso de que uses «drive» es tan facil como darle a descargar como CSV:

Descargar «excel de Google» como CSV
Descargar «excel de Google» como CSV

El fichero descargado como CSV ya puedes situarlo en el servidor para que desde PHP se pueda acceder a leerlo.


Leer el CSV con PHP

Para leer el CSV con PHP lo que se hace realmente es convertirlo en un array dentro de una variable. Esto se puede hacer gracias a las siguientes funciones de PHP:

  • En primer lugar la función «file» a la que se pasa como argumento la ubicación del fichero CSV y la cual transfiere el fichero completo a un array.
  • La función «array_map» que sirve para recorrer un array e ir aplicandole una función dada, devolviendo finalmente el array modificado por dicha función.
  • La función «str_getcsv» que usamos como función callback del «array_map» y que se encarga de convertir un string con formato CSV a un array.

Todo ello se condensa como se decía en una sola línea de código:

$data_csv = array_map( 'str_getcsv', file( 'demo.csv' ) );

Leer y mostrar por pantalla el CSV

Según el código mostrado lo primero que es necesario es conocer la ruta donde se encuentra el fichero CSV a leer. En el ejemplo unicamente se situa el nombre del fichero ya que este puede estar justo en la misma carpeta en la que se encuentra el código php que trata de sacar del mismo la información.

Por ejemplo, tras haberlo subido desde un formulario, o tal vez un campo personalizado, podrías tener guardada en la base de datos la ubicación del fichero CSV a leer :

<?php

$file_csv = get_post_meta( get_the_ID(), 'suma_page_csv', true );

$data_csv = array_map( 'str_getcsv', file( $file_csv ) );

echo '';
var_dump( $data_csv );
echo '';

Tras capturar la información puedes mostrarla por pantalla para ver como tratar con la misma con un simple var_dump( $data_csv ), aunque te recomiendo hacerlo de un modo más visual gracias al plugin Development Helper de este modo: d( $data_csv )

$file_csv = get_post_meta( get_the_ID(), 'suma_page_csv', true );

$data_csv = array_map( 'str_getcsv', file( $file_csv ) );

d( $data_csv );

Una vez tienes la información del CSV almacenada en un array, y que puedes ver facilmente por pantalla la estructura que tiene, ya es cuestión de que trates la información como necesites, probablemente usando un foreach, y saltándote los primeros elementos si se incluyen las cabeceras de la «hoja excel» y no los necesitas.

Todo dependerá del fichero origen CSV y del resultado final del array resultante, pero podrías llegar a plantear algo parecido a esto ( a modo orientativo básico ):

$file_csv = get_post_meta( get_the_ID(), 'suma_page_csv', true );

$data_csv = array_map( 'str_getcsv', file( $file_csv ) );

?>
<h2>Titular</h2>

<table>
  <tr>
    <th><?php echo $data_csv[0][0]; ?></th>
    <th><?php echo $data_csv[0][1]; ?></th>
    <th><?php echo $data_csv[0][2]; ?></th>
    <th><?php echo $data_csv[0][3]; ?></th>
  </tr>

<?php foreach ( $data_csv as $value ) : ?>
   <tr>
    <td><?php echo $value[0]; ?></td>
    <td><?php echo $value[1]; ?></td>
    <td><?php echo $value[2]; ?></td>
    <td><?php echo $value[3]; ?></td>
  </tr>
<?php endforeach; ?>
</table>

pd: Si la salida de datos empieza a tener bastante HTML, realmente No me gusta recomendar usar «echo» de este modo y es preferible usar una plantilla «view» aparte tal y como se plantea en el Boilerplate de SumaPress.

Ahora imaginación al poder para darle utilidad a esta potente posibilidad que te ofrece PHP para leer ficheros CSV, los cuales puedes crear fácilmente con los datos que necesites procesar y que puedes tener guardados en drive.

Si te ha gustado... ¡Compártelo!