Excel - Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

 
Vista:
sin imagen de perfil

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Inlinerider (4 intervenciones) el 02/08/2017 22:21:53
Hola, en mi ultimo proyecto me encontré con un problema algo peculiar o eso creo :P

Tengo una Excel con los siguientes datos

excel

como podemos observar en los registro existe en algunos campos múltiple registros

si lo pasamos a CSV, nos queda así

csv


y si lo importamos en la BD se generan mas que 3 registros

mysql


mi pregunta es, como lo resolveríais vosotros y es un caso particular ???


me gustaría debatir esta experiencia con vosotros y aprender de mis errores

gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Antoni Masana (2473 intervenciones) el 02/08/2017 23:26:07
He estado un rato para entender que estaba viendo. Entiendo que:

1º.- Tienes los datos en un Excel
2º.- Exportas los datos. ¿Utilizas alguna opción nativa del Excel? Supongo que si.
3º.- En la BBDD ¿Quieres rellenar los campos que faltan o solo 3 Registros?

Independientemente de la respuesta del tercer tema en la hoja Excel tienes:

1 ocupa tres celdas A1 – A2 – B3
Eric ocupa tres celdas B1 – B2 – B3
Jones ocupa tres celdas C1 – C2 – C3

Las celdas A1 – B1 – C1 tienen respectivamente 1Eric Jones.
Las celdas A2 – B2 – C2 están vacías.
Las celdas A3 – B3 – C3 están vacías.

Tomo los datos de Eric. Ahora el fichero CVS esta así:

1
2
3
4
ID|Nombre|Apellido|Entrenamiento|Peso|Edad|Contacto
1|Eric|Jones|Lunes|85|28|999 888 666
|||Martes|||666 258 145
|||Viernes|||

Para la primera opción de la BBDD el fichero CVS o TXT seria así rellenando los campos vacíos:

1
2
3
4
ID|Nombre|Apellido|Entrenamiento|Peso|Edad|Contacto
1|Eric|Jones|Lunes|85|28|999 888 666
1|Eric|Jones|Martes|85|28|666 258 145
1|Eric|Jones|Viernes|85|28|

Para la segunda opción, solo TRES registros en la BBDD el fichero CVS o TXT seria así

1
2
ID|Nombre|Apellido|Lu|Ma|Mi|Ju|Vi|Sa|Do|Peso|Edad|Contacto_1|Contacto_2|Contacto_3
1|Eric|Jones|SI|SI|||SI|||85|28|999 888 666|666 258 145|

El Entrenamiento lo convierto en 7 campos, cada uno un día de la semana, También podría ser un campo de 7 caracteres y marcar el que corresponda a cada día pero no te lo aconsejo, después es más difícil de tratar e interpretar

1
1|Eric|Jones|LM..V..|85|28|999 888 666|666 258 145|

En Contacto e añadido 2 más pero podrían ser 3 o 4 según sea el caso.

En cualquiera de los casos tendrás que hacerte una MACRO para exportar los datos.

Preguntas qué haría, pues preguntar al que tenga que explotar la BBDD como lo quiere o como lo necesita tratar para decidir el mejor formato.

Y no hay más opciones o a mí no se me ocurren.

Saludos.\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Inlinerider (4 intervenciones) el 03/08/2017 10:48:30
Hola Antoni, gracias por contestar y perdón por no explicarme mejor, en mi cabeza estaba todo claro jajajaj

1º Los datos del cliente viene en un exel,
2º Necesito pasar los datos a una base de datos MYSQL

En este caso los campos Entrenamientos y Contactos pueden tener infinitos valores

como yo lo haría/hice?

Campo ‘entrenamiento’ es una Lista: [Lunes;Martes;Miércoles;Jueves;Viernes;Sábado;Domingo]
- en este caso solo puede tener 7 valores pero podría ser otro tipo de lista mas larga
- la relación en la BD seria N:N

Campo ‘contactos’ no es una lista pero ya que puede ser infinito necesito que tenga una relación 1:N

en mi caso me monte un programita que me deja el CSV de la siguiente forma (junto los valores correspondientes, separado por punto y coma)

csv_mod

paso todo a una tabla auxiliar ‘excel_datos’, me crearía mi estructura de tablas para la APP.
Después a través de funciones/procedures paso los datos a las correspondientes tablas

db_struc


Mi pregunta es mas a nivel, si alguien ya a tenido este tipo de experiencia y como lo ha resuelto.

simplemente busca si hay una forma mas nativa o un programa para hacer este tipo de trasfer


gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 2
Ha aumentado su posición en 10 puestos en Excel (en relación al último mes)
Gráfica de Excel

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Diego (1 intervención) el 03/08/2017 11:29:16
Hola, como dice Antoni, estás atado a tener que utilizar una macro, yo he realizado varias veces esta tarea para actualizar una base de una web con los datos de un sistema local con tablas en dBase que leia con una planilla Excel. La estructura de tu DB (en la APP) me parece correcta, aunque desconozco el alcance que quieres darle.

Yo lo plantearia así, tienes como dato principal al cliente(nombre, apellido, peso, edad) y no se porque razón necesitas que los contactos estén separados en registros diferentes, ya que es un texto separados por saltos de linea, podrían incuirlos tambien como campo de la tabla cliente.

En el caso de los entrenamientos, podrías utilizar un campo texto fijo de 7 caracteres de largo donde pones unos y ceros en las posiciones que correspondan segun el dia asi... "1100100" para Eric Jones representaría LUNES, MARTES, DOMINGO (Esto va a funcionar si tus entrenamientos son 7) Usar una tabla para 7 registros no me parece buena idea, por eso te comento lo de los unos y ceros.

La macro va a recorrer la columna A para identificar "clientes" y el columna D para identificar los "dias de entrenamiento"(aqui es donde armas la cadena de longitud 7). Y creo que eso sería todo una tabla con 7 [campos Id, nombre, apellido, edad, peso, entrenamiento] sobre la que harás un INSERT INTO por cada registro que agregues en el excel, o un UPDATE según si el ID ya está dentro de la tabla.

Espero haberme explicado bien.
Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Antoni Masana (2473 intervenciones) el 03/08/2017 11:31:02
Yo no he tenido que trabajar con este tipo de problemas. Es más no domino las Bases de Datos ni el SQL.

Soy más de antes de que existiesen las Base de Datos tal y como las conocemos ahora y trabajábamos con ficheros de texto plano y todo lo que hace el gestor de base de datos, leer, grabar, insertar, relacionar, indexar, etc. lo hacíamos a mano.

Lo que comentas en la primera línea es normal, lo tenemos tan claro en la cabeza que no nos damos cuenta que los demás no saben lo que estamos pensando. Las cosas que para nosotros son opvias no las ponemos y los demás no las saben.

Esto creo que es más un problema de ACCES o BASE DE DATOS que de EXCEL, prueba en esos Foros.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por JuanC (1237 intervenciones) el 03/08/2017 13:10:17
ya que es gratis voy a comentar!
primero que nada yo definiría las tablas y sus respectivos campos (respetando reglas pero por sobre
todo apuntando a los objetivos buscados con la BD)
una vez resuelto éste punto -fundamental- mediante una macro generaría la consulta SQL con un INSERT
para luego importar -desde donde sea que trabajes- así, no es necesario el .csv (cambiaría por un .sql)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Inlinerider (4 intervenciones) el 04/08/2017 14:56:20
Hola JuanC, no entendí muy bien lo que querías transmitir, por otra parta voy a cerrar este hilo con un mini tutorial.
Como tuve unas horitas me puse a investigar las diferentes maneras de exportar datos exel a mysql (access, mysql workbench, LibreOffice etc.), en esta ocasión solo voy a comentar una de las solución posible y la verdad esta mucho mejor de la que hice para el proyecto

no encontré indices ninguno que esta manera de guardar los datos en una hoja de excel sea algo habitual.(múltiples celdas por registro) .
asi que no hay nada que lo haga automáticamente.

yo use MS Excel, MySQL for Excel y procedures


gracias a todos por tomaros la molestia de comentar en los foros y ayudar

espero que os sirva a alguno, un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Cacho R
Val: 81
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Cacho R (66 intervenciones) el 07/08/2017 12:55:28
Hola!
De acuerdo a tu último libro, puedes intentar con:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub re_Agrupar()
Dim Mat, Q&, i&, R&, j%
 
Mat = [a1].CurrentRegion
Q = UBound(Mat)
 
R = 1
For i = 2 To Q
  Select Case Mat(i, 1) <> ""
    Case True
      R = 1 + R
      For j = 1 To 7: Mat(R, j) = Mat(i, j): Next
    Case False
      If Mat(i, 4) <> "" Then Mat(R, 4) = Mat(R, 4) & IIf(Mat(R, 4) = "", "", "|") & Mat(i, 4)
      If Mat(i, 7) <> "" Then Mat(R, 7) = Mat(R, 7) & IIf(Mat(R, 7) = "", "", "|") & Mat(i, 7)
  End Select
Next
 
With [k1].Resize(R, 7)
  .Value = Mat
  .Columns.AutoFit
End With
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Exportar datos de Hoja Excel a SQL via CSV (con multiple celdas por registro)

Publicado por Inlinerider (4 intervenciones) el 08/08/2017 14:45:50
Gracias Cacho,

una solución muy limpia,

tengo que confesar que tarde un rato en descifrar el código ya que nunca trabaje con VBA :P

única pega es que lo inserta en la misma hoja, y no es flexible en las columnas, pero eso imagino que se soluciona sin problemas pasando parámetros o algún lenght


muy interesante
gracias por compartir
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar