Exportador e importador excel

Disponer de un exportador e importador excel para nuestra aplicaciones puede llegar a ser muy útil si no estamos muy familiarizados con herramientas como el phpmyadmin o similar que interactúan con la base de datos.

Lo dicho anteriormente se puede explicar mejor con un ejemplo; podemos imaginar que tenemos un cliente que quiere disponer de su tienda física en internet. Podríamos montar una tienda fácilmente utilizando algún framework o gestor de contenido como Oscommerce o Prestashop por ejemplo.

Una de las tareas que viene después sería el introducir los productos o artículos que se van a vender. Esta tarea suele estar destinada al dueño de la tienda ya que el programador en la mayoría de los casos no sabe o no está familiarizado con los productos que se quieren vender.

Como un vendedor común es posible que esté familiarizado con Microsoft Excel, se le podría preparar un excel para importar los productos con los campos necesarios.

En el ejemplo que ilustra este artículo realizamos un ejemplo simple de importación y exportación de artículos a una tabla de productos sencilla de una base de datos SQL.

Como vemos en la tabla anterior, solo vamos a contemplar la id del producto, nombre, descripción, cantidad y precio.

Tanto la cantidad de campos como el nombre de ellos se puede personalizar a través de código según las necesidades.

Lo primero que vamos a aprender es como vamos a importar los datos que haya en el excel a la base de datos. Siempre se debe tener en cuenta que las columnas del excel deben leerse de izquierda a derecha y cada columna debe representar una tupla de la tabla que se vaya a rellenar.

//Por cada pestaña
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    $it_array = 0;
    //Por cada fila
    foreach ($worksheet->getRowIterator() as $row) {
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false);
        //Por cada celda
        foreach ($cellIterator as $cell) {
            if (!is_null($cell)) {
                switch($cell->getColumn()){
                    case 'A':
                        $array_campos[$it_array]['products_id'] = $cell->getCalculatedValue();
                        break;
                    case 'B':
                        $array_campos[$it_array]['name'] = $cell->getCalculatedValue();
                        break;
                    case 'C':
                        $array_campos[$it_array]['description'] = $cell->getCalculatedValue();
                        break;
                    case 'D':
                        $array_campos[$it_array]['quantity'] = $cell->getCalculatedValue();
                        break;
                    case 'E':
                        $array_campos[$it_array]['price'] = $cell->getCalculatedValue();
                        break;
                    default:
                        ;
                }
            }
        }
        $it_array++;
    }
}

La secuencia de recorrido es analizar cada fila e ir celda a celda para capturar los datos que iremos guardando en un array. Según en la columna que estemos, guardaremos en el array el dato que corresponda.

El script utiliza clases que ya están prediseñadas en la librería de PHP que nos vienen fenomenal para hacernos la vida más fácil.

Una vez se tiene este array completado con todos los datos introducidos en el excel, procedemos a conectar con la base de datos que toque y en el caso de que el producto existiese, tocaría actualizar y en el caso de que el producto no existiese, tocaría añadirlo como nuevo. Es decir, si dejamos el campo id del producto vacío, se interpretará como nuevo producto y si lo rellenamos significará que queremos editar alguno existente.

El exportador funciona al revés, lo que hace es recoger los datos de la base de datos para escribirlos en un archivo excel.

Exportando tenemos la posiblidad de poder dar algo de estilo al texto de las celdas como por ejemplo:

$objPHPExcel->getActiveSheet()->getStyle("$celda")->getFont()->setSize(12);
$objPHPExcel->getActiveSheet()->getStyle("$celda")->getFont()->setBold(true);

Para escribir el resto en el archivo excel podemos hacer lo siguiente:

$query_products = mysql_query("SELECT * FROM products ORDER BY products_id asc", $conexion);

    if (mysql_num_rows($query_products) > 0) {
        $fila = 2;
        while($row = mysql_fetch_array($query_products)){
            for($it = 0; $it < count($array_field); $it++) {
                $celda = $array_cells[$it] . "$fila";
                $objPHPExcel->getActiveSheet()->SetCellValue("$celda", $row[$array_field[$it]]);
            }

            $fila++;
        } // while
    }

Como vemos estamos seleccionando los registros que hay en la base de datos y si hay datos procedemos a iterar para escribir en las celdas de cada fila el dato que toque.

Todo esto quedará más claro viendo el ejemplo en funcionamiento.

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(4 votos, promedio: 4 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

9 respuestas a “Exportador e importador excel”

  1. Alejandro Garzon dice:

    Buen dia, amigo por favor me colaboras con el codigo fuente completo de este ejemplo Exportador e importador excel, tengo duda si solamente con las lineas que se muestran se llega a tan excelente ejemplo.

    Gracias

  2. refluks dice:

    Thanks for the guidelines you have discussed here. One more thing I would like to talk about is that personal computer memory needs generally go up along with other developments in the know-how. For instance, whenever new generations of cpus are brought to the market, there is usually a corresponding increase in the scale demands of both the computer system memory and hard drive space. This is because the software program operated by these cpus will inevitably rise in power to use the new technologies.

  3. Lorita Wilkinson dice:

    You can definitely see your skills in the work you write. The sector hopes for more passionate writers such as you who aren’t afraid to say how they believe. At all times go after your heart.

  4. climatiseurmobile.org dice:

    Regards for helping out, good information.

  5. site dice:

    I like what you guys are up too. Such clever work and reporting! Keep up the excellent works guys I’ve incorporated you guys to my blogroll. I think it’ll improve the value of my web site :).

  6. Where to Invest Money dice:

    Thanks for the sensible critique. Me & my neighbor were just preparing to do a little research about this. We got a grab a book from our area library but I think I learned more from this post Jose Aguilar » Exportador e importador excel I am very glad to see such fantastic information being shared freely out there.

  7. piala eropa 2012 dice:

    As I website possessor I believe the articles here is very excellent , regards for your efforts.

  8. Abraham Skillan dice:

    I consider something truly interesting about your website so I saved to fav.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre