Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Cargar un excel convertirlo a CSV y importar eso en Postgres

Estas en el tema de Cargar un excel convertirlo a CSV y importar eso en Postgres en el foro de PostgreSQL en Foros del Web. Hola necesito importar datos de un excel a Postgres, he buscando en la red pero todos parten del punto de que ya tengo el excel ...
  #1 (permalink)  
Antiguo 12/11/2009, 09:54
Kil
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 14 años, 5 meses
Puntos: 0
Busqueda Cargar un excel convertirlo a CSV y importar eso en Postgres

Hola necesito importar datos de un excel a Postgres, he buscando en la red pero todos parten del punto de que ya tengo el excel convertido en formato CSV y yo necesito hacer una funcion que me cargue el excel, lo convierta y me pase los datos a mi BD postgres. Ayuda con eso por favor
  #2 (permalink)  
Antiguo 12/11/2009, 10:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cargar un excel convertirlo a CSV y importar eso en Postgres

No es posible kil.
Necesariamente debes convertir el archivo a .txt o .csv.
Desde el archivo de excel le das guardar como.... y en las opciones de formato seleccionas la extensión csv (comma delimiter value).

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 12/11/2009, 12:46
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Cargar un excel convertirlo a CSV y importar eso en Postgres

Cita:
Iniciado por Kil Ver Mensaje
yo necesito hacer una funcion que me cargue el excel, lo convierta y me pase los datos a mi BD postgres
Y en que lenguaje piensas hacer esa funcion, por que dependiendo del lenguaje que uses sera la forma de hacerlo. Por ejemplo en PHP es posible hacerlo de manera automatica, por supuesto haciendo el script correctamente
  #4 (permalink)  
Antiguo 12/11/2009, 18:19
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Cargar un excel convertirlo a CSV y importar eso en Postgres

Hola Kil, lo que interpreto de tu spregunta es que quieres pasar los datos de tu hoja de excel directamente a postgreQL, si es eso lo que quieres, sigue estos pasos:
  1. Instalar el driver ODBC de postgre para windows, (PostgreSQL ODBC Driver(ANSI),PostgreSQL ODBC Driver(UNICODE)).
  2. Si ya lo tienes instalado, lo siguiente es crear un DNS de usuario con el driver correspondiente, para este ejemplo que te coloco más abajo voy a usar PostgreSQL ODBC Driver(UNICODE). Para esto, te vas a "Herramientas administrativas" y haces click en Administrador de orígenes de datos ODBC, pestaña DNS de ususario.
  3. Cuando ya tengas creado tu driver con los parametros de tu servidor de base de datos vete al siguiente paso.
  4. Abrir tu hoja de excel habilitado para macros.
  5. Busca el botón o opción de menú que se llama macros o crear macro. Te pedirá un nombre de macro, para este caso le puse el nombre conexion. Cuando aceptes te aparecerá el entorno de programación de VBA, (Visual Basic de Aplicaciones), con el "sub conexion()" creado.
  6. Vete al menu Herramientas-->Referencias y selecciona la siguiente referencia Microsoft ActiveX Data Objects 6.0 Library, esta es la librería ODBC para conectarse a bases de datos por medio de ADO (ActiveX Data Objects). Aceptas y pasamos al código.
Código:
Sub conexion()
    Dim connString As String              'Es la cadena de conexión...
    Dim cnn As ADODB.Connection     'El objeto conexión al cual le vamos a asignar la cadena de conexión "connString"
    Dim rs As ADODB.Recordset         'El recordset, para ejecutar comandos SQL y asignar los resultados a controles o celdas de la hoja de excel...
    
    connString = "Driver={PostgreSQL35W};Server=localhost;Port=5432;Database=aikido;Uid=tuusuario;Pwd=tucontraseña;" 'Driver={PostgreSQL35W} Este es el nombre que le dí yo cuando creé mi DNS de postgreSQL. Esta cadena de conexión es solo para PostgreSQL ODBC Driver(UNICODE), con ANSI o teniendo activo SSL cambia un poco la cadena de conexión.
    
    Set cnn = New ADODB.Connection 'Creamos el objeto conexión
    Set rs = New ADODB.Recordset     'Creamos el objeto recordset
    
    With cnn
        .ConnectionString = connString 'Establecemos la conexión
        .Open                                         'Abrimos la conexión
    End With
    
    With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockOptimistic
        .Open "INSERT INTO ""Album"" (""alb_ID"", ""alb_Titulo"", ""alb_Fecha"", ""alb_Descripcion"") VALUES (" + CStr(Worksheets("hoja1").Cells(1, 1)) + "::bigint, '" + Worksheets("hoja1").Cells(1, 2) + "', '" + CStr(Worksheets("hoja1").Cells(1, 3)) + "'::date, '" + Worksheets("hoja1").Cells(1, 4) + "')", cnn, , , adCmdText
    End With

    cnn.Close
End Sub
Unos comentarios:

En mi base de datos usé mayúsculas, por eso es que mi nombre de tabla y de campos están entre comilla doble ""nombreTabla"", ""NombreCampo"", cosas del visual basic. El caracter "+" es para concatenar cadenas de caracteres. Para que lo entiendas mejor te coloco el insert antes y después de interpretarse:
  1. "INSERT INTO ""Album"" (""alb_ID"", ""alb_Titulo"", ""alb_Fecha"", ""alb_Descripcion"") VALUES (" + CStr(Worksheets("hoja1").Cells(1, 1)) + "::bigint, '" + Worksheets("hoja1").Cells(1, 2) + "', '" + CStr(Worksheets("hoja1").Cells(1, 3)) + "'::date, '" + Worksheets("hoja1").Cells(1, 4) + "')", cnn, , , adCmdText
  2. INSERT INTO "Album" ("alb_ID", "alb_Titulo", "alb_Fecha", "alb_Descripcion") VALUES (15::bigint, 'Uno', '07/11/2009'::date, 'otro desde excel')
  3. CStr(Worksheets("hoja1").Cells(1, 1)): Para tomar el valor de la Fila 1, columna 1, en ese orden. "hoja1" es el nombre de la hoja donde estoy obteniendo los datos.
  4. CStr Función para convertir en cadena de caracteres los números y las fechas. Como la consulta es una cadena de texto, todos los campos que sean numéricos o de tipo fecha los tienes que convertir a cadena.
  5. La tabla se llama "Album" y tiene 4 campos, los valores los tomo de la "hoja" de excel, ejecuto el recordset con el INSERT mostrado más arriba y listo, los datos de las celdas 1 hasta la 4 quedan guardados.
  6. Cuando se trate de varias filas o varias columnas entonces puedes usar bucles. For i = 0 to X .. NEXT i
  7. Una cosa más, si quieres ejecutar un select tienes haces lo mismo que con el insert, ejemplo: .Open "Select * from ""Album""", cnn, , , adCmdText :: pero en este caso al final antes del cnn.Close tienes que añadir el siguiente comando rs.Close porque en el caso del select tienes que cerrar el recordset.

Siento tanto texto, pero he intentado explicarlo paso a paso, este ejemplo lo hice con Office 2007 y postgre 8.4 y funciona pasar los datos desde excel por medio de macros a postgreSQL sin problemas. Saludos y espero que te sirva.
  #5 (permalink)  
Antiguo 13/11/2012, 10:00
 
Fecha de Ingreso: noviembre-2012
Ubicación: MEXICO
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Cargar un excel convertirlo a CSV y importar eso en Postgres

yo necesito lo mismo pero a mi me lo piden con un programa opensource pueden ayudarme algunas opciones ???
me piden lo mismo yo solo necesito importar ese .scv a la base de datos en posgrest
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:40.