Excel

Ξ 70 comentarios

Cómo leer un archivo Excel desde PHP

por Xabadu
Cómo leer un archivo Excel desde PHP

Hoy vamos a ver como lograr leer un archivo Excel, directamente desde PHP.

Cómo leer un archivo Excel desde PHP


Como siempre, lo primero: Implementos necesarios:

  1. Un editor Web. (en este caso utilizamos y recomendamos Adobe Dreamweaver, que pueden descargarlo desde su sitio oficial).
  2. Un hosting que soporte PHP o un servidor Web local.
  3. La clase PHP Excel Reader, que pueden descargarla desde este enlace.
  4. Un archivo Excel con datos.

Procedimiento:

1.- Lo primero que haremos será asegurarnos que tenemos un archivo Excel con datos. En nuestro caso, tenemos el siguiente:

Una estructura básica con 2 columnas y 6 filas incluyendo el encabezado. Este archivo ahora lo cargaremos mediante un formulario y lo mostraremos en una tabla HTML.

2.- En nuestro editor Web, partiremos por crear un archivo llamado excel.php, y en el añadiremos un formulario, el cual contendrá un campo de archivo, que llamaremos archivo. Si tienen dudas de como realizar esta operación, les recomiendo revisar este tutorial donde hemos cubierto el proceso por completo. Al terminar debiéramos tener algo como esto:

Adicionalmente, debemos fijarnos que nuestro formulario que llame a la misma excel.php

3.- Ahora, vamos a añadir un poco de código. Justo antes del comienzo de nuestro formulario (es decir, antes de la etiqueta form…), añadiremos:

Con lo que acabamos de hacer, le estamos diciendo a nuestra página: “Si no se ha enviado el formulario, muestrelo, de lo contrario muestre… (lo que está dentro del else)”

4.- Ahora, dentro del else, haremos todo el proceso de lectura del archivo cargado y la muestra de datos por pantalla. Para eso primero descomprimimos la clases PHP Excel Reader que ya bajamos y debiéramos tener algunos archivos de ejemplo, un excel y un directorio llamado Excel el que contiene la clase en su interior: un archivo reader.php y un archivo oleread.inc, este último debemos renombrarlo a OLERead.php (respetando mayúsculas y minúsculas) para que lo tome bien.

5.- Luego, abrimos el archivo reader.php en nuestro editor Web y vamos a la línea 31, donde reemplazamos:

require_once ("Spreadsheet/Excel/Reader/OLERead.php");

por esto:

require_once "OLERead.php";

6.- A continuación, dentro de nuestro else que dejamos, debemos incluir el siguiente código. La explicación, como siempre, en negrita, cursiva y entre /* y */:

/* Cuando cargamos un archivo mediante un formulario, se mueve a una ubicación temporal dada por el servidor y desde ahí debemos moverlo manualmente a donde queremos que quede. Si no lo movemos, el archivo se eliminará al terminar la ejecución del archivo php. El movimiento lo hacemos mediante la función move uploaded file la cual utiliza como parámetros: el array del archivo, el nombre del campo, la propiedad de nombre temporal dada y luego el nombre y la ruta con el que lo guardaremos. Si solo incluimos el nombre en la última, se guardará en el mismo directorio donde está el archivo php que estamos ejecutando */

/* Luego, mediante un include, llamamos a la clase PHP Excel Reader, mediante el archivo reader.php */

include("Excel/reader.php");

/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Reader que corresponde a la clase que incluimos recién */

$datos = new Spreadsheet_Excel_Reader();

/* Le decimos al objeto que "lea" el archivo cargado. Esto extraerá toda la información correspondiente al archivo y la almacenará en el objeto */

$datos->read($nombre);

/* Ahora, definimos una variable llamada celdas, en la cual guardaremos todos los datos de las celdas del archivo excel leído. Esto podemos hacerlo, llamando al método sheets sobre nuestro objeto datos, el cual contenía la información del archivo excel, e indicandole mediante los parámetros que nos pase los datos de la hoja 0 (primera hoja del archivo) y que queremos la información de sus celdas (cells) */

$celdas = $datos->sheets[0]['cells'];

/* Luego, mediante un echo, empezamos a construir una tabla en HTML */

echo "";

/* Luego, mediante un ciclo, seguiremos armando nuestra tabla y concatenamos con el contenido de las celdas. Estos valores se almacenan en la variable en una forma de array de 2 dimensiones. La primera corresponde a la fila y la segunda a la columna, siempre empezando de 1 , poniendo como condición que cuando lea una celda vacía se detenga */

$i = 1;
while($celdas[$i][1]!='') {
    echo "";
    $i++;
}

/* Cerramos la tabla */

echo "
".$celdas[$i][1]."".$celdas[$i][2]."
";

7.- Veamos nuestro script en acción:

Como pueden ver, el procedimiento es bastante fácil y rápido. La clases PHP Excel Reader es muy simple de utilizar y bastante poderosa en su alcance, por lo que les recomendamos explorar a fondo y ver todos los beneficios que nos puede presentar.

Como siempre, recuerden que este tutorial ha sido:

Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.

Esperamos que este tutorial haya sido de utilidad para Uds.

Muchas gracias por leer y será hasta una próxima oportunidad.

Comparte este tutorial

El culpable de todo esto

Las tardes gloriosas de domingo y las grandes ovaciones a estadio lleno, no son algo extraño para Xabadu. Luego de ser descubierto a los 4 años en un partido de barrio por los ojeadores del gran Aviación F.C., sacudió el mercado nacional al ser traspasado en $500 pesos chilenos (1 USD) y 3 coca colas al renombrado Estrella Blanca de Lolol. Luego de una impresionante carrera por equipos como Lozapenco, Santa Cruz, Deportivo Lago Chungará y una incursión en la 3a división del futbol de Kazajstan, su record imbatible hasta la fecha de 1257 goles en 20 partidos lo llevo a ser elegido como uno de los arqueros más recordados en la historia pelotera nacional. Una lesión en el colmillo superior derecho lo llevó al retiro el año 2003, pero está de vuelta y sin duda que su jerarquía y experiencia internacional será un gran aporte.

En los barrios marginales se le conoce como: Xabadu

Comentarios en Facebook

70 Comentarios

  • El error “The filename is not readable” es porque el archivo que se esta subiendo no esta copiado en la carpeta en la cual se aloja el script php, a mi me pasaba lo mismo y copie a mano el archivo a la carpeta y luego lo subi desde ahi y anda perfectamente. La cuestion es como hacer para evitar tener que mover a mano los archivos, hay una funcion php que copia el archivo en el directorio que se le indique y hace una copia igual en forma temporal y en teoria se soluciona el problema.

  • utilice este tuto para tratar de actualizar una bd a traves de una aplicacion web pero me arroja este error, creo que no tiene que ver con la lectura del archivo pero si me pueden ayudar les agradezco:

    0)
    {
    ?>alert(‘Error al Momento de Leer del Archivo.’);location.href=”../Nodo/nodo_cargar_info.php”;read($_FILES[“file_direccion”][“tmp_name”]);
    $cons = $db->consulta(“SELECT IP FROM NGN_NODO WHERE ID=$NodoID”);
    if($db->num_rows($cons)>0)
    {
    $result = $db->fetch_array($cons);
    $DirIP=$result[‘IP’];
    //echo $DirIP;
    }

    $a=$datos->sheets[0][‘cells’];
    $i=1;
    while($a[$i][1]!=””)
    {
    if($a[$i][7]==$DirIP)
    {
    if($bandera)
    {
    $ID=0;
    $consulta2=$db->consulta(“SELECT ID FROM NGN_TID WHERE NGN_NODO_ID=$NodoID AND TID=$a[$i][8]”);

    if($db->num_rows($consulta2)>0)
    {
    $resultados2 = $db->fetch_array($consulta2);
    $ID=$resultados2[‘ID’];
    if($a[$i][26]==”-“)
    $a[$i][26]=0;
    if($a[$i][2]==”-“)
    $a[$i][2]=0;

    $consulta3 = $db->consulta(“SELECT ID FROM NGN_CONDICION WHERE DESCRIPCION=’$a[$i][6]'”);
    $resultados3 = $db->fetch_array($consulta3);
    $a[$i][6]=$resultados3[‘ID’];

    $consulta4 = $db->consulta(“SELECT ID FROM NGN_CATEGORIA WHERE CODIGO=’$a[$i][39]'”);
    $resultados4 = $db->fetch_array($consulta4);
    $a[$i][39]=$resultados4[‘ID’];

    //$val = $db->insertar(“UPDATE NGN_TID SET NUMERO=$a[$i][2], PBX=$a[$i][26], NGN_CONDICION_ID=$a[$i][6], NGN_CATEGORIA_ID=$a[$i][39], NGN_DISPONIBILIDAD_ID=2,NGN_CALL=$a[$i][13] WHERE NUMERO=$a[$i][2]”);

    $val = $db->insertar(“UPDATE NGN_TID SET NUMERO=$a[$i][2], PBX=$a[$i][26], NGN_CONDICION_ID=$a[$i][6], NGN_DISPONIBILIDAD_ID=2, NGN_CATEGORIA_ID=$a[$i][39], NGN_CALL=$a[$i][13] WHERE ID=$ID”);
    if(!$val)
    {
    ?>alert(“Error al Momento de Cargar el Nodo en Linea: “++” Numero: “+);location.href=”nodo_cargar_info.php”;alert(‘La Dirección IP no Coincide.’);insertar(“UPDATE NGN_NODO SET FECHA=’$Fecha’ WHERE ID=$NodoID”);
    if(!$val)
    {
    ?>alert(‘Error al Momento de Modificar la Fecha.’);location.href=”../Nodo/nodo_cargar_info.php”;alert(‘Nodo Actualizado Correctamente.’);location.href=”../Nodo/nodo_cargar_info.php”;location.href=”../Nodo/nodo_cargar_info.php”;

  • Se me olvidaba el error que lanza es el siguiente: MySQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘[8]’ at line 1

  • Revise con calma las setencias SQL Y HABIA UN APOSTROFE DE MAS EN UNCA CADENA; PERO AHORA ME SALE ESTO:

    502 Bad Gateway
    The gateway received an invalid HTTP response or unexpected disconnect from the original server

  • que tal, buen tuto pero a mi me arroja un error

    Warning: require_once(OLERead.php) [function.require-once]: failed to open stream: No such file or directory in C:\Users\tony\Desktop\Wampee-2.1-beta-2\www\salones\Excel\reader.php on line 31

    y esta es mi linea 31 de reader.php
    31 require_once ‘OLERead.php’;

    si renombre el archivo a OLERead.php

    me podrian ayudar porfavor se los agrdeceria

  • resolvi el problema gracias me faltaba el .php jejeje ups

  • no sirve xD

  • no sirveeeeee xD ni los comentarios jaja

  • les recomiendo hacer esto

    $form=”

    “;
    if(!$_POST){
    echo $form;
    }else{
    if($HTTP_POST_FILES[‘nombre’][‘type’]!=’application/vnd.ms-excel’){die(“Usted solo puede subir archivos con extensiones .xls”.$form);}
    $subio = false;
    if (is_uploaded_file($HTTP_POST_FILES[‘nombre’][‘tmp_name’])) {
    copy($HTTP_POST_FILES[‘nombre’][‘tmp_name’], ‘archivos/’.$HTTP_POST_FILES[‘nombre’][‘name’]);
    $subio = true;
    if(!$subio){
    die(“Usted solo puede subir archivos con extensiones .xls”.$form);
    }
    }

    en donde antes de leer el archivo lo suben para que tengan una ruta mas legible, despues para que el ejemplo dado por el maestro anterior solo colocan esto

    $nombre=’archivos/’.$HTTP_POST_FILES[‘nombre’][‘name’];

    chau

  • en donde form es lo que puso en el tutorial

1 4 5 6 7

Responder a Xabadu Cancelar respuesta

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

Gente linda que nos quiere

Donde mas estamos