Hace unos días tenía que pasar el contenido de un documento Excel a Sql, pero pasar todo eso a mano es un suicidio...

Encontré algunas librerías en SourceForge, pero el código era demasiado largo y no solucionaba mi problema fácilmente, finalmente encontré información sobre las librerías COM de Excel y elaboré un pequeño script en PHP.

Pasar Excel Sql

Se me ocurrió subirlo al blog por si alguien tenia el mismo problema, así que si necesitas pasar un archivo Excel con formato .xls, .xlsx o similar a Sql, este Script PHP podría serte útil.



Función "convertirSql"


<?php
function convertirSql ($hoja$maxFil$maxCol$tabla) {
  
$hoja->activate;

  
$consulta "INSERT INTO `$tabla` (";

  
$col 1;
  while (
$col <= $maxCol) {
    
$consulta .= '`'.utf8_encode ($hoja->Cells(1$col)).'`, ';
    
$col++;
  }
  
$consulta .= '[FIN]';
  
$consulta str_replace (', [FIN]'') VALUES'$consulta);
  
  
$fil 2;
  while (
$fil <= $maxFil) {
    
$consulta .= ' (';
           
    
$col 1;
    while (
$col <= $maxCol) {
      
$consulta .= "'".utf8_encode ($hoja->Cells($fil$col))."', ";
      
$col++;
    }
    
$consulta .= '[FIN]';
    
$consulta str_replace (', [FIN]''), '$consulta);
    
$fil++;
  }
  
$consulta .= '[FIN]';
  
$consulta str_replace (', [FIN]'';'$consulta);

  echo 
$consulta;
}
?>


Apertura de la hoja del Excel y llamada a la función


<?php
$excel 
= new COM ("Excel.sheet");
$excel->Application->DisplayAlerts false;
$abrir $excel->application->Workbooks->Open("C:/.../Libro1.xlsx");
$excel->Application->Visible 1;
$hoja $abrir->Worksheets("Hoja1");

$numFil $excel->application->ActiveSheet->UsedRange->Rows->Count;
$numCol $excel->application->ActiveSheet->UsedRange->Columns->Count;

convertirSql ($hoja$numFil$numCol'nombreTabla');
?>


El Script está hecho de tal forma, que el primer elemento de cada columna en el Excel compone el conjunto de nombres de los campos de una tabla en Sql, y el resto las filas. No obstante, si sabes PHP puedes adaptarlo a tu hoja del Excel en concreto.



Ejemplo hoja excel

Dado que el script genera una consulta en sql para insertar los datos en una tabla, habrá que crear antes la tabla en la base de datos. Para el ejemplo de la imagen anterior, la tabla sería algo como:


CREATE TABLE `alumnos` (
  `id` bigint(7) NOT NULL auto_increment,
  `nombre` char(50) NOT NULL,
  `apellidos` char(100) NOT NULL,
  `DNI` char(10) NOT NULL,
  `calificacion` char(4) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


Para descargar el script pulsa en: Descargar

Si te gustó el artículo...

Puedes seguir el blog a través de Twitter, Facebook o tu lector de feeds RSS.

Artículos Relacionados

3 Comentarios



Erik

#1 Erik


Gracias me fue muy útil la info y el script, de ante mano muchas gracias.

Abril 14, 2010



Duda

#2 Duda


De donde puedo descargar las librerías COM de Excel ?

Mayo 11, 2010



Sergio GR

@Duda: En la propia página de PHP, hay un manual donde explican cada una de las funciones: Libreria COM, pero ten en cuenta que solo funcionan en la versión PHP de Windows.

Mayo 11, 2010



Deja tu Comentario

Asigna una imagen a tu email con Gravatar, si no sabes accede al siguiente Tutorial.



Asigna una imagen a tu email
Nombre
Email [Requerido]
Web/Blog

Información

  • Aplicamos el tag nofollow, y los enlaces con keywords en los comentarios podrían ser eliminados, intentamos mantener limpio el blog de spam.

  • Puedes usar las etiquetas <i>, <b>, <em>, <strong>, <a>, href, procura cerrarlas adecuadamente o tu comentario podria no mostrarse del modo que deseas.

  • Si necesitas que se vean en el comentario caracteres especiales como los usados en lenguajes de programacion como php, xhtml, etc., debes escribirlo dentro de las etiquetas [code] [/code], de lo contrario no se mostrará.

  • Procura no escribir enlaces que no tengan ninguna relación con el tema.

  • Si realizas una crítica procura argumentarla, pero sobretodo evita los insultos.