Se trata de una función VBA que toma como entradas el rango de datos donde está la tabla Excel, el nombre de la base de datos como opcional, el nombre de la tabla en SQL y el nombre del archivo de texto donde queremos guardar la consulta.
Se debe copiar el código VBA en algún módulo del proyecto y la función estará disponible para usarse en cualquier hoja del libro.
Ahora insertamos la función sql en cualquier celda del libro, pasándole los argumentos, separados por punto y coma. En este caso he seleccionado las celdas donde se encuentra la tabla que quiero grabar, y he tomado el resto de argumentos (base de datos, tabla y archivo donde grabar) de otras celdas.
Le damos al enter y se nos crea el archivo en la ruta que le hemos dado. Lo abrimos, seleccionamos todo el contenido y lo copiamos.
Abrimos la base de datos y pegamos la consulta seleccionando la base de datos donde queremos grabar los datos.
Ejecutamos la consulta y comprobamos el resultado. Ya tenemos la tabla de excel en nuestra base de datos.
Public Function sql(r As Range, dbase As String, tabla_sql As String, file As String)
'Funcion que crea un string con la consulta a la base de datos para pasar una excel a mysql
'La consulta sql la guarda en un archivo de texto .sql
'r = rango donde esta la tabla de excel
'dbase= nombre de la base de datos (si se deja en blanco, se crea la consulta llamando solo a la tabla)
'tabla= nombre de la tabla de mysql
'Nombre que queremos dar al archivo sql resultante (sin la extension)
Dim nfilas As Integer
Dim ncolumnas As Integer
Dim fila As Integer
Dim columna As Integer
Dim s As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(file & ".sql", True) 'Archivo sql donde se guardará la consulta sql
fila = r.Row
columna = r.Column
nfilas = r.Rows.Count
ncolumnas = r.Columns.Count
If dbase = "" Then
s = "INSERT INTO `" & tabla_sql & "` ("
Else
s = "INSERT INTO `" & dbase & "`.`" & tabla_sql & "` ("
End If
For i = 1 To ncolumnas
s = s & "`" & r(1, i).Text & "`"
If i = ncolumnas Then
s = s & ")VALUES "
Else
s = s & ", "
End If
Next
a.write (s) 'Escribe la declaracion de campos en sql
'Comienza la escritura de los valores
For Each valor In r
If valor.Row > fila Then
If valor.Column = columna Then
a.write ("(")
End If
If valor.Text = "NULL" Then
a.write ("NULL")
Else
a.write ("'" & valor.Text & "'")
End If
If valor.Column < columna + ncolumnas - 1 Then
a.write (", ")
Else
a.write (")")
End If
If ((valor.Row < fila + nfilas - 1) And (valor.Column = columna + ncolumnas - 1)) Then
a.write (", ")
End If
End If
Next
a.write (";")
a.Close
End Function
No hay comentarios:
Publicar un comentario