[Php-avanzado] leer excel con php

Mario Gomez Cassou collectgc en gmail.com
Dom Feb 10 12:50:09 ART 2013


para precesar unos datos que me mandan en una planilla de excel uso una
clase que bajé de phpclasses.org. Para que funcione bien el código de mas
abajo los datos tienen que estar en la primera hoja empezando en A1, pero
se puede mejorar para que tome datos de cualquier lado. La primer fila son
los encabezados que determinan el nombre del campo de la tabla mysql a
generar. Si faltan encabezados se genera un nombre al campo. Los archivos
'oleread.inc' y 'reader.php' se pueden bajar de gomezcassou.com.ar/archivos
En el ejemplo se toma el archivo 'datos.xls' para generar la tabla 'xls'
utilizando la conexión a la base de datos '$mysqli'
Saludos
Mario

<?php

// archivo de entrada
$xlsFile =  'datos.xls';

require_once 'reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->setUTFEncoder('mb');
$data->read($xlsFile);

$sql = "DROP TABLE IF EXISTS `xls`;\n";
$res = $mysqli->query($sql);
$sql = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
$res = $mysqli->query($sql);

// (1) Si hay datos en el 'xls'
if (is_array( $data->sheets[0])) {
    $cols = $data->sheets[0]['numCols'];
    $sql = "CREATE TABLE xls\n(";

    // (2) define los campos de la tabla
    for ($j = 1; $j <= $cols; $j++) {
        $v = "`".trim($data->sheets[0]['cells'][1][$j])."`";
        if($v != "``"){             $sql .= $v." varchar(255) default NULL";
            if ($j < $cols) {
                $sql.=",\n";
            }
        }
    } // (2)for ($j = 1; $j <= $cols; $j++) {
    $sql .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1;\n\n";
$res=$mysqli->query($sql);

    // (2) hace los inserts de cada fila/registro
    for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
        // se fija si todavia hay datos
        $k = $data->sheets[0]['cells'][$i][1];
        //print("<br>k: $k");
//------------------------------------------------------------------------
*VER LINEA VACIA* ---
        if($k == ""){
            continue;
        }
//------------------------------------------------------------------------
*VER LINEA VACIA* ---
        $sql = "INSERT INTO `xls` (";         //columns
        for ($j = 1; $j < $cols+1; $j++) {
            $v = "`".trim($data->sheets[0]['cells'][1][$j])."`";
            $sql .= $v;
            if ($j < $cols) {
                $sql.=",";
            }
        } //end columns
        $sql .= ") values (";

        //values
        for ($j = 1; $j < $data->sheets[0]['numCols']+1; $j++) {
            $v = "'".trim($data->sheets[0]['cells'][$i][$j])."'";
            $sql .= $v;
            if ($j < $cols) {
                $sql .= ",";
            }
        } // end values
        $sql .= ");\n";
          $res=$mysqli->query($sql);
    }    // (2) end all records
} // (1) if (is_array( $data->sheets[0]))

?>


El 8 de febrero de 2013 11:57, Bruno Meschini
<brunomeschini en hotmail.com>escribió:

>  si ya estoy en eso, y acordandome de Leo haciendo me renegar en los
> parciales para abrir, leer y cerrar archivos!!!
> gracias totales!
>
> ------------------------------
> Date: Fri, 8 Feb 2013 11:55:38 -0300
>
> From: gerardovaliani en gmail.com
> To: php-avanzado en pato2.fi.mdp.edu.ar
> Subject: Re: [Php-avanzado] leer excel con php
>
> Si, elegi solo la delimitado por comas.
> Despues buscate en el manual de PHP que hay funciones que manejan
> directamente los csv.
>
> Saludos!
>
>
> El 8 de febrero de 2013 11:46, Bruno Meschini <brunomeschini en hotmail.com>escribió:
>
>  gracias gerardo, cuando pongo guardar me da 3 opciones de csv, macintosh,
> m-sdos, o la tercera q supongo que es la que hay que usar que solo dice
> (delimitado por comas).
> es correcto?
>
> ------------------------------
> Date: Fri, 8 Feb 2013 11:09:10 -0300
> From: gerardovaliani en gmail.com
> To: php-avanzado en pato2.fi.mdp.edu.ar
> Subject: Re: [Php-avanzado] leer excel con php
>
> Guardarlo o no en la DB dependerá de las necesidades del sistema.
> Sobre la lectura del excel, lo mejor es que el usuario guarde el excel en
> .csv y que suba ese archivo al sistema.
>
> Saludos!
>
>
> El 8 de febrero de 2013 10:31, Bruno Meschini <brunomeschini en hotmail.com>escribió:
>
>  hola lista, tengo un caso en que el cliente necesita subir un archivo
> .xls
> y yo tengo que utilizar los datos que contiene con php, necesito me
> recomiendo la forma correcta de hacer esto,
> y si lo guardo en la sql..
> gracias abrazoos
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
>
>
> _______________________________________________ Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
>
>
> _______________________________________________ Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20130210/bf861213/attachment.html>


Más información sobre la lista de distribución Php-avanzado