entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Alguien sabe como importar un archivo de excel mediante php a una base en mysql?

Pues eso, necesito importar archivos .xls que generan en una oficina mediante php a la base en mysql, el excel ya tiene el layout de la tabla, pero para no pasarlo a txt y luego hacer los querys, quieroi ver si hay una opción directa para jalar el archivo xls o xlsx

-1voto

juan_carlos_carreno comentado

Encontre esto en la red, lo voy a probar y les comento como me fue

http://programarenphp.wordpress.com/2011/06/06/importar-de-excel-a-mysql-con-php/

0voto

pttmix comentado

la mejor opción es http://sourceforge.net/projects/phpexcelreader/ yo lo he implementado en varios proyectos, el proceso es simple, lo único es que el excel debe tener una estructura definida y de ahí pasarlo a la la base de datos es sencillo, de hecho hasta se pueden procesar distintas hojas en una misma planilla.

Ejemplo:
se carga el archivo al servidor y luego se procesa con .

    require_once 'Excel/reader.php';
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('CP1251');
    $data->read("excel cargado al servidor");
    $conn = mysql_connect($servidor_bd,$usuario_bd,$password_bd);
    mysql_select_db($base_datos,$conn);
    $hoja=0; 
    $existen=0;
    $insertados=0;
while (!empty($data->sheets[$hoja]["cells"][1][1])){
    for ($x = 2; $x <= count($data->sheets[0]["cells"]); $x++) 
    {
        $CT_NUMERO_CONTRATO      = $data->sheets[$hoja]["cells"][$x][1];
        $NOMBRE_BENEFICIARIO  = $data->sheets[$hoja]["cells"][$x][2];
        $ATRIBUTO5  = $data->sheets[$hoja]["cells"][$x][3];
        $ORDEN   = $data->sheets[$hoja]["cells"][$x][4]; 
        $hoja2=$data->boundsheets[$hoja]['name'];  
        $cont=1;
        $sql_revisar="select * from $tabla_bd where CT_NUMERO_CONTRATO=".$CT_NUMERO_CONTRATO." and ORDEN=".$ORDEN; 
        if (!empty($CT_NUMERO_CONTRATO)){
        $res_revisar=mysql_query($sql_revisar) or die ('error//'.mysql_error());
        $cont=mysql_num_rows($res_revisar);
        if ($cont==0){
        $sql = "INSERT INTO $tabla_bd (CT_NUMERO_CONTRATO,NOMBRE_BENEFICIARIO,ATRIBUTO5,ORDEN,empresa) 
             VALUES (".$CT_NUMERO_CONTRATO.",'".$NOMBRE_BENEFICIARIO."','".$ATRIBUTO5."',".$ORDEN.",'".$hoja2."')";
        if (!empty($CT_NUMERO_CONTRATO)){
        mysql_query($sql) or die ('error//'.mysql_error());
        $insertados++;
        }
        }else{
            $existen++;
        }
        }
        }
    $hoja++;
}

3 Respuestas

1voto

carlossevi Puntos63580

Tienes dos opciones:

  1. Procesar los datos con PHP y hacer los inserts correspondientes
  2. Componer un fichero que sea capaz de reconocer MySQL

En la segunda opción, que es la que pides, tienes la opción de guardar el archivos de Excel en formato CSV, formato que es capaz de reconocer la sentencia LOAD DATA INFILE (ver manual).

Para la primera opción te podrías buscar una clase ya hecha en PHP que lea archivos Excel, aunque entiendo que es lo que quieres evitar.

1voto

didac_rios Puntos690

Lo mejor, es guardar el archivo en CSV y la funcion fgetcsv de PHP te salvará la vida :)
No hace falta ni que se quede copia en el servidor del archivo

     <?php
        $handle = fopen($_FILES['input_file_name']['tmp_name'], "r");
        // Nota que indicamos como estan los campos separados
        while (($linea= fgetcsv($handle, 1024, ";")) !== FALSE) {
            // Ahora en $linea tienes un array con cada campo de cada fila
        }

1voto

k999 Puntos290

Si usas phpMyAdmin utiliza la opción de importar, así únicamente se hace el upload de tu archivo en Excel, configuras algunas opciones, como omitir la primera columna con los nombres, etc. y listo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta