Cómo insertar datos de Excel hacia MySQL - CableNaranja

Cómo insertar datos de Excel hacia MySQL

¡Comparte nuestro contenido!

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Dado que en una ocasión anterior, nos enfocamos en la manera de conectar un archivo de Excel con MySQL, ahora toca el turno de comenzar con el primer elemento típico de un CRUD, es decir, la inserción de registros desde nuestra hoja de cálculo hacia la base de datos. Así que no perdamos más tiempo ¡Manos a la obra!

Paso previo: La conexión a la base de datos

Dado que eso lo explicamos en el artículo anterior, dejaré solo el enlace para su correspondiente lectura. Así que partimos de tener el procedimiento que hará eso. Por motivos prácticos, trabajaremos con el usuario default (recuerda cambiarlo) , el cual no tiene contraseña. El nombre de nuestra base de datos será excelmysql.

Global conexion As ADODB.Connection
Sub conectar()
    Dim cadena As String
    Set conexion = New ADODB.Connection
    cadena = "DRIVER={MySQL ODBC 8.0 ANSI DRIVER};"
    cadena = cadena + "SERVER=localhost;DATABASE=excelmysql;"
    cadena = cadena + "USER=root;PASSWORD=;"
    conexion.Open cadena
    If conexion.State < 1 Then
        End
    End If
End Sub

Notemos que el código para lograr la conexión, tiene una pequeña variación. En este caso State es un enum que contiene los diversos estados de la conexión, siendo que cualquier valor inferior a 1 implica que la conexión no se logró, es entonces cuando abortamos el intento de conexión. Así debe estar al momento.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Añadimos otra variable Global de tipo ADODB.Recordset. Un Recordset representa el conjunto de registros que obtenemos al hacer consultas o vistas.

Global registro As ADODB.Recordset

Dentro de nuestro procedimiento para conectar, necesitamos inicializar esta variable:

Set registro = New ADODB.Recordset

Vamos a crear dos procedimientos más. El primero será para hacer la desconexión a la base de datos, y el segundo será para ejecutar sentencias SQL tipo INSERT, DELETE o UPDATE. De esta manera tenemos todo nuestro código un poco más ordenado.

En el procedimiento para desconectar, necesitamos cerrar la conexión con el método Close de la clase ADODB.Connection, también usamos Set para hacer que nuestras dos variables globales regresen a sus valores default (Nothing)

Sub desconectar()
    conexion.Close
    Set registro = Nothing
    Set conexion = Nothing
End Sub

En cuanto al método para ejecutar cadenas SQL, le llamamos simplemente ejecutar, además de tener como único parámetro la cadena SQL. Dentro de ese procedimiento, utilizaremos el método Execute que recibe como valor una cadena SQL válida.

Sub ejecutar(sql As String)
    conexion.Execute sql
End Sub

Finalmente, así queda todo el código del módulo:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Por supuesto hay que crear la base de datos en nuestro servidor.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Definiendo la tabla para trabajar

Dentro de nuestra base de datos, vamos a crear una tabla de empleados con 7 campos básicos (id, nombre, apellidos, sexo, fecha de nacimiento, salario base y tipo de empleado)

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Por supuesto, esta es la definición de los datos:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Y su diccionario de datos debe quedar así:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Preparando nuestra hoja de Excel para la tabla

Ahora que ya tenemos la base de datos preparada. Es momento de crear lo necesario en nuestra hoja de Excel. Hagamos algo parecido a lo siguiente:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Necesitamos algunos datos adicionales para los campos Sexo y Tipo de empleado. En una hoja separada, escribimos lo necesario:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

De regreso a nuestra hoja con el “formulario”, tomamos la celda correspondiente al campo Sexo, luego vamos al menú Datos dentro de la Cinta de opciones, en el apartado Herramientas de datos encontramos el botón Validación de datos al que damos clic.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

En la ventana de diálogo llamada Validación de datos, cambiamos la opción Permitir de Cualquier valor a Lista. A continuación en la opción Origen, escribimos en formato absoluto el rango de datos con los elementos que buscamos para el campo sexo. O sea:

=Datos!$A$2:$A$3

Como se ve en la imagen:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Al terminar, presionamos el botón Aceptar. Con eso, ya podemos ver la lista dentro del campo correspondiente:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Para el campo Tipo de empleado de nuestro “formulario”, hacemos lo mismo:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Pero en la ventana de diálogo Validación de datos, el Origen de la Lista que definimos en la opción Permitir es:

=Datos!$B$2:$B$4

Tal como se ve en la imagen:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Por último, presionamos el botón Aceptar, y con eso ya podemos ver la lista correspondiente en la celda que seleccionamos:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Ahora bien, vamos al menú Programador (Si no está visible, hay que activarlo) Lo primero es presionar el botón Modo Diseño para poder insertar objetos. Lo segundo, es abrir la lista de opciones llamada Insertar y tomamos el Botón de comando dentro del grupo llamado Controles ActiveX.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Hecho esto, dibujamos un botón lo suficientemente grande al lado de nuestro formulario.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Luego, con el botón seleccionado, regresamos el menú Programador y presionamos el botón Propiedades.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

En la ventana flotante de Propiedades, cambiamos la propiedad (Name) por algo más apropiado, por ejemplo: btnAceptar. También cambiamos la propiedad Caption (texto o etiqueta del botón) por ejemplo: Guardar Empleado. Una hecho esto, podemos cerrar la ventana flotante.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Finalmente, damos un doble click a nuestro botón para entrar en el editor de código de Visual Basic.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Realizando las comprobaciones necesarias

Comenzamos creando algunas variables antes del código del botón, primero las cadenas de texto:

Dim nombre, apellidos, sexo, fecha, tipo, salario, mensaje, sql as String

Como podemos observar, la fecha la hemos declarado como String y no como Date, ya que en MySQL una fecha es básicamente un String con formato. También, usaremos la variable mensaje para guardar el texto de las notificaciones, la variable sql para las cadenas SQL requeridas y el salario que también será pasado como un String para evitar hacer demasiadas conversiones.

Y una bandera para saber cuando podemos guardar o no.

Dim bandera as Boolean

Dentro del método Click de nuestro botón, inicializamos la bandera a True y el mensaje lo dejamos vacío.

bandera = True
mensaje = ""

Ahora procedemos a asignar a cada variable el valor que se encuentra en nuestras celdas. En este caso necesitamos la referencia completa de la hoja. En este ejemplo, la hoja del formulario se llama Hoja1. Con la colección Range apuntamos a la celda que necesitamos y con la propiedad Value recuperamos lo que dicha celda tenga escrito.

nombre = Hoja1.Range("E4").Value
apellidos = Hoja1.Range("E6").Value
sexo = Hoja1.Range("E8").Value
tipo = Hoja1.Range("E14").Value

Para el salario, haremos una única conversión con la función Str. Este función permite convertir un valor numérico en texto. Sin embargo, a veces en Excel al hacer este tipo de conversión suele añadirse un espacio en blanco adicional, así que por seguridad, usamos la función Trim. Está función elimina espacios sobrantes a la derecha e izquierda de una variable.

salario = Trim(Str(Hoja1.Range("E12").Value))

Para la fecha, hacemos lo mismo que el salario, pues en Excel las fechas son formatos especiales basados en el tiempo Unix.

fecha = Trim(Str(Hoja1.Range("E10").Value))

Así es como va nuestro código al momento.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Lo siguiente es revisar los campos de nuestro formulario. Usaremos la función Len que nos permite obtener la cantidad de caracteres de una variable tipo String, si este valor es cero entonces cambiamos la bandera a False y concatenamos el mensaje correspondiente a cada variable. La constante vbCrLf es un simple salto de línea.

If Len(nombre) = 0 Then
   bandera = False
   mensaje = mensaje + "Escriba el nombre" + vbCrLf
End If
If Len(apellidos) = 0 Then
   bandera = False
   mensaje = mensaje + "Escriba los apellidos" + vbCrLf
End If
If Len(sexo) = 0 Then
   bandera = False
   mensaje = mensaje + "Seleccione el sexo de la persona" + vbCrLf
End If
If Len(tipo) = 0 Then
   bandera = False
   mensaje = mensaje + "Seleccione el tipo de empleado" + vbCrLf
End If

Para salario y fecha simplemente revisamos si hemos obtenido como carácter un cero, ya que aunque la celda se quede vacía, la conversión a String dará al menos un cero.

If salario = "0" Then
   bandera = False
   mensaje = mensaje + "Escriba el salario a percibir" + vbCrLf
End If
If fecha = "0" Then
   bandera = False
   mensaje = mensaje + "Escriba la fecha de nacimiento" + vbCrLf
End If

Así vamos al momento:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

una vez que tenemos todos los posibles mensajes, comprobamos si la bandera paso alguna vez de True a False con el conector lógico Not. De ser cierto, enviamos el mensaje a una ventana de diálogo informativa con vbInformation a la vez que le ponemos un título pertinente. De una vez colocamos el Else para trabajar más tarde el caso contrario.

If Not bandera Then
   MsgBox mensaje, vbInformation, "AVISO IMPORTANTE"
Else
   'Si la bandera se quedo en True    
End If

Para evitar despistes, este código va justo debajo de lo anterior.

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Es momento de probar lo que llevamos hasta ahora ¡Veámoslo en acción!

Insertando un registro desde Excel hacia MySQL

Ahora que ya tenemos todo el escenario preparado, trabajaremos dentro de ese último Else. Lo primero será verificar que no vayamos a repetir un registro por accidente.

Pero antes, regresamos a la zona de declaración de variables para añadir una variable tipo Integer que nos permitirá obtener la cantidad de registros encontrados.

Dim encontrado As Integer

Por si acaso, va justo aquí:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

De regreso a nuestro Else inicial, escribimos una cadena SQL que buscará contar los IDs repetidos utilizando como criterios de búsqueda el nombre y apellidos de la persona. usaremos la función Count de SQL y un alias para obtener el datos necesitamos.

sql = "select count(empId) as cuantos from empleados where empNombre ='"
sql = sql + nombre + "' and empApellidos = '" + apellidos + "'"

Nos conectamos a la base de datos, usando nuestro procedimiento para conectar.

conectar

Abrimos nuestro objeto Recordset en modo dinámico (adOpenDynamic) ya que podríamos tener más de un registro coincidente. También habilitamos el bloqueo optimista para evitarle problemas a cualquier otro usuario que este trabajando con la misma tabla (adLockOptimistic)

registro.Open sql, conexion, adOpenDynamic, adLockOptimistic

El dato que hayamos encontrado, lo pasamos a nuestra variable encontrado, esto lo hacemos a través de la colección Fields que en este caso sólo tiene el contenido del alias que escribimos dentro de nuestra cadena SQL.

encontrado = registro.Fields("cuantos")

Nos desconectamos para evitar saturar de conexiones a la base de datos.

desconectar

Si la variable encontrado vale cero, quiere decir que no existe el registro, por lo que podemos insertarlo de manera segura. En caso contrario creamos el mensaje notificando que el registro este repetido. Adicionalmente, enviamos el mensaje afuera del IF – Else para que envié la notificación de acuerdo a lo que suceda.

If encontrado = 0 Then
   'Aquí va la parte para insertar
Else
   mensaje = "El empleado que intenta insertar ya existe"
End If
MsgBox mensaje, vbInformation, "AVISO IMPORTANTE"

Así vamos al momento:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Trabajemos ahora justo donde dejamos ese comentario, ya que es ahí donde podemos insertar el registro de manera segura. Pero antes, necesitamos modificar el contenido de algunas variables para que se ajusten a las exigencias de nuestra tabla.

En primer lugar, el campo sexo solo ocupa la primera letra de cada valor (F,M) Para lograr esto, usamos la función Left que permite extraer una determinada cantidad de caracteres a la izquierda de una variable.

sexo = Left(sexo, 1)

En segundo lugar, el campo tipo lo establecimos con un campo tipo Set que solo acepta 3 valores posibles (A,B,C), en este caso A será un empleado por honorarios, B será de confianza y C será de tipo eventual. Esto lo logramos simplemente con una sentencia Select Case.

Select Case tipo
   Case "Honorarios"
      tipo = "A"
   Case "De confianza"
      tipo = "B"
   Case "Eventual"
      tipo = "C"
End Select

En tercer lugar, la fecha tiene el formato default de MySQL que es Año-Mes-Día (yyyy-mm-dd) así que con la función Format modificamos nuestra variable al formato de fecha necesario.

fecha = Format(fecha, "yyyy-mm-dd")

Ahora que ya tenemos todo, creamos nuestra sentencia INSERT utilizando la versión corta de la misma (es decir, sin la lista de campos). Recordemos que al hacer eso, el ID debe recibir por default un valor NULL para que se actualice solo; los demás datos los concatenamos respetando el orden original en la tabla.

sql = "INSERT INTO empleados VALUES(NULL,'" + nombre + "','"
sql = sql + apellidos + "','" + sexo + "','" + fecha + "',"
sql = sql + salario + ",'" + tipo + "')"

Después de eso, abrimos otra conexión a la base de datos, ejecutamos la cadena SQL y cerramos la conexión.

conectar
ejecutar (sql)
desconectar

Limpiamos las celdas para dejarlas listas para un nuevo registro.

Hoja1.Range("E4").Value = ""
Hoja1.Range("E6").Value = ""
Hoja1.Range("E8").Value = ""
Hoja1.Range("E10").Value = ""
Hoja1.Range("E12").Value = ""
Hoja1.Range("E14").Value = ""

Y creamos el mensaje, notificando que hemos insertado el registro.

mensaje = "El empleado se ha insertado correctamente"

Así queda nuestro código:

Cómo insertar datos de Excel hacia MySQL - CableNaranja

Probando el resultado final

Es momento de probarlo todo. Observe el video de muestra.

DESCARGA EL CODIGO FUENTE PARA PROBAR

¿Te ha resultado? Déjanos saber en los comentarios aquí abajo, en nuestra cuenta de twitter @cablenaranja7 o en nuestra página de facebook.

¡Comparte nuestro contenido!

Entradas relacionadas

Un comentario en "Cómo insertar datos de Excel hacia MySQL"

Deja un comentario

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