De Excel a MySQL fácilmente y sin romperte la cabeza

32 Comentarios

Hoy me vi en la necesidad de exportar una “base de datos” creada en Excel (Las comillas son porque no estoy del todo de acuerdo en que se hagan en Excel, existiendo soluciones específicas para ello), a un servidor con MySQL. Y como fue algo nuevo para mi, les dejo el como lo realicé, por si a alguien más le llegase a servir.

Antes que todo crearemos una pequeña tabla en Excel a manera de ejemplo, con 4 campos como se observa en la imagen de arriba, o bien, si ya tienen su tabla hecha, se pueden ahorrar este paso.

Lo que sigue es guardar el archivo, pero no como documento de Excel. En las opciones de “Guardar como” seleccionaremos la que mencione “CSV (Delimitado por comas)(*.csv)“, o algo similar.

Con Excel ya terminamos. Pero tenemos que modificar algo en este archivo. Así que lo abrimos en nuestro editor de texto favorito, y vamos a eliminar la primera línea. Esta es la que tiene el título de los campos, y no nos interesa, ya que de dejarla, se rellenaría nuestra base de datos en MySQL con esos valores.

Ahora sí, manos a la obra con phpmyadmin. Primero tenemos que crear una nueva base de datos, acto seguido creamos una tabla, y añadiremos los 4 campos correspondientes: nombre, sexo, estado_civil y nacionalidad. Con sus respectivos atributos y toda la cosa.

El nombre de mi tabla es “fulanitos”, en una base de datos que llamé “xxx”. En este caso todos serán del tipo VARCHAR, con longitud más o menos calculada de rápido, a manera de ejemplo solamente. Y vemos que todo salió bien:

Sigue la última parte. Es aquí donde radica el “truco”. Que no es más que una simple sentencia SQL que lo que hará será tomar un archivo como referencia, leerlo, e interpretarlo según dos parámetros que le indicaremos:

  • Los datos que van en cada campo se separan mediante una coma (“,”)
  • Los diferentes registros se separan por un salto de línea (“\n”)

La sentencia es la siguiente, y la debemos realizar desde la sección de “SQL”, que está en el menú superior:

LOAD DATA INFILE ‘ubicación/del/archivo’ INTO TABLE ‘nombre_de_la_tabla’

FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n’;

Y listo, si todo salió bien (Si hubo errores, revisa bien la ubicación del archivo que indicaste), tendremos nuestra BDD de Excel exportada a MySQL:

Tip: En mi caso, en Ubuntu, coloqué el archivo .csv en el escritorio, y la ruta que seguí para llegar a él desde la sentencia SQL fue:  ../../../../home/jonateo/Desktop/bdd.csv

Para que lo tengan en cuenta, es una ruta un poco rara sí, pero los “../” son para retroceder y poder llegar a las carpetas padre.

 

Comentarios

  • Victor

    Y no es más fácil usar la opción ‘importar desde excel’ con la que cuenta phpmyadmin???

  • elhui2

    deacuerdo con Victor, myphpadmin ya tiene esa opcion, pero si no tienes o no quieres usar myphpadmin seria esta la opcion mas facil!!!!1

  • Juan Carlos

    Lo que yo hice en su momento fue una aplicacincita que me leyera el CSV y me generara el SQL correspondiente, de hecho todavia lo uso, si alguien lo necesita pidalo

    • Carmen

      Hola Juan Carlos:

      ¿ Me puedes enviar la aplicación que te lee el fichero .csv y te genera el SQL correspondiente ?.

      Gracias.

    • Eduardo

      Aún tienes esa aplicación Juan Carlos?

      ¿Crees que me la puedas enviar? Por favor!

      GRacias.

    • Alehjandro

      Si, me uno alas peticiones, aun tendrás esa aplicaron para leer los .cvs

  • isabel

    muy buen tutorial, excelente me funciono

  • roldan

    Yo estoy desarrollando una aplicacion que implica el actualizar una base de datos que ya contiene registros a través de un archivo hecho en excel. alguna ideade como hacerlo?
    Este archivo tendria que estar en la pc del usuario.

  • roldan

    Especifico que la BD es en MySql y el lenguaje que utilizo es PHP.

  • decoatomic

    Hola amigos, yo lo que necesito es pasar todo el site map que he realizado en excel a un php. Se trata de varias hojas de excel que son las categorias padre, cada una de ellas tiene sus subcategorias a modo de menus de cabecera y cada menú tiene a su vez sus subcategorias que serán los desplegables de las anteriores. Cómo paso eso a una base de datos directamente? o tengo que hacer tantas tablas como subcategorías y luego hacer el llamamiento desde el juego de registros de un editor (dreamveaver)?
    Lo que no quiero usar es un CMS ya que no encuentro uno al que importar todo eso de la misma y no me dan la versatilidad en el diseño que necesito. Lo he intentado con joomla y prestashop, pero no puedo modificar a mi gusto las fichas de busqueda ya que son modulos y no veo la manera de modificarlos..
    un saludor..

  • Sergio

    Hola Jonateo: dices que “no estoy del todo de acuerdo en que se hagan en Excel, existiendo soluciones específicas para ello” . Cual solucion es la que recomiendas?

  • http://www.flickr.com/jonateo Jonateo

    Hola Sergio, con ello me refería a que en alguna empresa se podría implementar algún sistema donde los usuarios capturen o modifiquen los datos. Te mentiría si te nombro un ejemplo, porque no he usado alguno; solo desarrollado sistemas con tal fin.

    Pero como opción barata, lo de exportar el Excel transformándolo en un CSV queda bien.

    Saludos!

  • pipe

    Muchisimas Gracias me has salvado la vida !!!!!!!!!!! mis respertos

  • http://www.facebook.com/david.castellonrodriguez David Castellon Rodriguez

    Oh, gran solución. Pero yo tengo un problema.. porque al pasar los datos tengo datos números con decimales separados con comas…

    • Lahn

      En sql los decimales se separan por puntos no por comas. Lo que debes hacer el guardar el excel en formato CVS(MS-DOS) asi quedará delimitado por punto y como en vez de por coma, luego debes abrirlo en worpad y usar la herramienta de reemplazo para cambiar todas las comas por puntos. Luego haces todo lo que indica Jonateo solo que cambias la delimitación de comas por punto y coma (;).

    • Mon Rangel

      Verifica que en tu tabla del excel la columna donde tienes los valores numericos dando clic derecho en la columna/ Formato de celdas se encuentren en tipo numero y no tipo general…. por alguna razon esto provoca problemas, tambien a veces la columna de las fechas tampoco tiene el formato fecha de excel correcto, no por que sea de tipo fecha si no por la forma en la que este escrito ej. 29-01-2014 incorrecto 2014-01-29 correcto

  • TorukMakto

    Excelente, me sirvio mucho, aunque lo hice como tu dijiste me marco un error muy loco, me imagino por la ruta del archivo, en fin…

    lo que hice fue estando en la Tabla — ir a la pestaña IMPORTAR — Seleccionar Archivo (ya escogi el .csv)– (y en el cuadro “Formato del archivo importado” seleccione ) “CSV usando LOAD DATA”– y en Opciones cambie

    Campos terminados en “;” por “,”

    Líneas terminadas en “auto” por “n”

    y Continuar………..

    ………….y Listo

    • Rafael

      GRACIAS!!

    • miguel

      Muchas gracias

  • http://www.facebook.com/frankglz13 Francisco González

    Muchas gracias por el post, me ha servido.

    Tengo un problema al importar el archivo y presiento que es por la ruta del archivo. Tengo mi archivo en el Escritorio y la ruta que le eh puesto es la siguiente: “C:UsersFrankDesktopLibro2.cvs” me pregunto si me pueden ayudar con esa ruta.

    Otra cosa, si en vez de usar myphpadmin hago la Base de Datos y la Tabla directamente desde la consola de MySQL no me ocasiona problema eso? o es necesario utilizar myphpadmin.

    Muchas gracias por su ayuda de antemano ;)

    • Didier

      Francisco puedes crear directamente con la consola del MySQL y lo que esta mal o por lo menos en mi caso le cambie la barra invertira por la barra simple este / y me funciono sin problemas…
      y también en mi caso le tube que cambiar la , por ; porque al guardar en formato .csv me la mando con ; y no con ,
      ojala que te sirva amigo…

  • Joefay

    Hola gracias me ha servido, solo un punto por si a alguien mas batalla es en nombre_de_la_tabla quitarle las comillitas

  • Octavio

    Excelente, muchas gracias.

  • ăërv¡êʬ » 

    Alguien sabe por que no puedo modificar dichos datos despues de haberlos importado, o mejor aun como hacerlo, gracias buen aporte!

    • Bifang

      Por q no has definido una llave primaria

  • Juan Marcos

    Gracias, súper útil! ;D

  • karina

    disculpa tengo duda por que me marca error al insertar la direccion
    C:UsersusuarioDesktopLibro1.csv

    • Lahn

      Cuando ingresas la dirección debes tener en cuenta que la ruta parte donde se encuentra la carpeta de mysql, para hacertelo más sencillo guarda el cvs en esta misma carpeta así solo tenés que ingresar el nombre.

  • http://www.dessencemx.com/ Gabriel B.

    Gracias, me sirvió bastante. También tenía una “base de datos” en Excel, mismas columnas, pero con más de 3000 registros. Ahora bien, me podrías o podrían recomendar un tutorial para crear un buscador en PHP?, la búsqueda se realizaría en función al nombre y contrato/id. Gracias.

  • http://neueplusofficial.mx/ Gabriel

    Gracias, me sirvió bastante. También tenía una “base de datos” en Excel, mismas columnas, pero con más de 3000 registros. Ahora bien, me podrías o podrían recomendar un tutorial para crear un buscador en PHP?, la búsqueda se realizaría en función al nombre y contrato/id. Gracias.

    Otra cosa, en una quinta columna, cómo podría agregar un enlace en la base de datos?. Gracias.

  • Luigi

    Oigan, tengo datos tipo float y al importar me dice que hay un signo de puntuación desconocido y hace referencia a los puntos “.” y no me permite importar, help.

  • Mon Rangel

    yo tengo tablas con muchisimos datos y haciendo el recuento en excel del numero de registros que tengo por ejemplo 15 mil registros, realizo el procedimiento de convertirlo en csv y despues importarlo a mi tabla, y cuando aplico un SELECT COUNT(*) nombreDeTabla; me arroja mas registros… esto a que se debe?, apreciaría la ayuda.