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.
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.
<?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;
}
?>
<?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.
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
@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
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.
Delivered by FeedBurner
Categorías
Archivos
Blogroll
Enlázanos
Si te gusta MirarPorMirar, puedes poner un enlace en tu web o blog.