Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Abrir Archivo Excel Para Recorrer Contenido [Solucionado]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Abrir Archivo Excel Para Recorrer Contenido [Solucionado] 
 
Buenas tardes,
necesitaría para un desarrollo que estoy montando descargar un listado de movimientos bancarios en formato .xlsx para abrirlo recorrerlo y poder guardarlo en base de datos sqlite.

He buscado por el foro pero no he visto ningún al respecto, he visto una consulta hecha por mi a la inversa, de base de datos a Excel.

Gracias.
 



 
última edición por calcena el Viernes, 04 Octobre 2019, 18:55; editado 1 vez 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
Asegúrese de que LibreOffice esté cerrado antes de ejecutar este código.

The code uses LibreOffice to convert the '.xlsx' into a 'csv' file.

Entonces es fácil!
 



 
cogier - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
calcena escribió:  
Buenas tardes,
necesitaría para un desarrollo que estoy montando descargar un listado de movimientos bancarios en formato .xlsx para abrirlo recorrerlo y poder guardarlo en base de datos sqlite.
He buscado por el foro pero no he visto ningún al respecto, he visto una consulta hecha por mi a la inversa, de base de datos a Excel.
Gracias.

Si comprendi bien, queres pasar los datos de un archivo xlsx a sqlite.
Suponiendo que el archivo xlsx es de una sola hoja y la base esta creada y abierta en gambas el procedimiento es el siguiente.

1) Convertir el xlsx a csv (usar la herramienta de terminal ssconvert)
Manual de ssconvert: https://linux.die.net/man/1/ssconvert
2) Abrir el csv
3) Recorrer el csv e importar en la base.

Ejemplo de código.


Public Sub ToolButton1_Click()

  Dim f As String

  f = Dialog.OpenFile()

  Module1.Convert(f)

End

Public Function Convert(x As String) As String ''Función que crea la consulta SQL para importar los datos

  Dim f As String
  Dim i, j As Integer
  Dim stx As New String[]
  Dim hdx As New String[]
  Dim lnx As New String[]
  Dim tab As String
  Dim tbx As New String[]   '' Lista de campos de la base de datos en lka tabla "table"
  Dim hdi As New String[]   '' Campos a importar
  Dim lni As New String[]   '' Datos a importar
  Dim opt As String
  Dim cmd As String

  ' Aca defino la tabla y los nombres de los campos, luego es posible comporbar en la conexion a la base de datos si dicha tabla existe y luego obtenr la lista d ecampos.
  tab = "table"
  tbx = ["id", "name", "telephone", "address", "email", "notes"]
  opt = "--export-type=Gnumeric_stf:stf_csv "
  cmd = "ssconvert " & opt & "'" & x & "' '/tmp/file.csv'"
  Shell cmd Wait
  Print cmd
  f = File.Load("/tmp/file.csv")

  stx = Split(f, "\n") ' Separar los renglones

  'Obteniendo los headers del la lina 0
  hdx = Split(stx[0], ",") ' Suponiendo que la primera linea tiene los nombres de los campos

  For i = 1 To stx.Max '  a partie de la linea 1
    lnx.Clear
    lnx = Split(stx[i], ",")
    lni.Clear
    hdi.Clear
    For j = 0 To lnx.Max
      If tbx.Exist(hdx[j]) Then
        If hdi.Exist(hdx[j]) = False Then
          hdi.Add(hdx[j])
          lni.Add(Replace(lnx[j], "\"", ""))
        Endif
      Endif
    Next
    ' Acá pongo un print pero lo podes reemplazar con el código necesario para importarlo a tu base.
    Print "INSERT INTO " & tab & "(" & hdi.Join(", ") & ") VALUES(" & lni.Join(", ") & ");"
  Next
End

 

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
cogier escribió: [Ver mensaje]
Asegúrese de que LibreOffice esté cerrado antes de ejecutar este código.

The code uses LibreOffice to convert the '.xlsx' into a 'csv' file.

Entonces es fácil!


Muchas gracias, fantásitca tu solución!!.
Ahora me está sucediendo una cosa curiosa.

Buscando he visto los siguiente:   soffice.exe --convert-to "csv:Text - txt - csv (StarCalc):59,,76,1" input.xlsx

para convertir con un separador de ";"

El problema que estoy teniendo es que me está separando mal el objeto que lee, ya que los numerales del tipo 8,30 me lo está separando mediante ",".

Saludos y gracias.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
¿Puedes subir un archivo de muestra 'csv'?
 



 
cogier - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
Buenas os adjunto tanto el archivo .xlsx así como el .csv que se genera.
y una captura del resultado de la variable recogida con el split.

Como véis me aparecen las columnas descuadradas, he probado varias cositas del código pero nada.
Estas son las variantes que he probado sin éxito(mi intención es que el separador sea el ";"    ):

Shell "cd " & Application.path & " && " & "libreoffice --headless --convert-to csv test.xlsx" Wait

Shell "cd " & Application.path & " && " & "libreoffice --headless --convert-to csv --infilter=CSV:59,,76,1 test.xlsx" Wait

Shell "cd " & Application.path & " && " & "libreoffice --headless --convert-to 'csv: Text - txt - csv(StarCalc):59,,76,1' test.xlsx" Wait

sData = Split(File.Load(Application.Path &/ "test.csv"), gb.NewLine, ";", True)

 test

Muchas gracias por la ayuda.
 



 
última edición por calcena el Lunes, 30 Septiembre 2019, 22:38; editado 3 veces 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
calcena:

Aquí explica tu duda

Esto es la clave, cambiar el código Ascii:

59,,76,1 – these are four arguments:

    the first parameter is the delimiter in the output file – 59 is the ASCII code for ';'
    the second parameter is the text delimiter – it's missing because I don't want to wrap text in quotes
    the third parameter is the file encoding – 76 is the internal OpenOffice code for UTF-8 (from the table on the documentation page)
    the fourth parameter defines the line number with which to start the export – here, we start with line 1


Decirte que el ascii de "," es 44 y de " " (1 espacio) es 32

Nota: Yo pienso que con la instrucción de conversión no es necesario que hagas modificaciones posteriores a esta instrucción. Estudia bien esta línea y te saldrá correctamente tu CSV

Ayudaría muchísimo más que aportaras el xlsx en vez de tu csv de salida que has tenido. Ya que así veríamos los delimitadores, en que línea empieza tu excel etc etc
 



 
última edición por gambafeliz el Lunes, 30 Septiembre 2019, 20:26; editado 3 veces 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
gambafeliz escribió:  
calcena:

Aquí explica tu duda

Esto es la clave, cambiar el código Ascii:

59,,76,1 – these are four arguments:

    the first parameter is the delimiter in the output file – 59 is the ASCII code for ';'
    the second parameter is the text delimiter – it's missing because I don't want to wrap text in quotes
    the third parameter is the file encoding – 76 is the internal OpenOffice code for UTF-8 (from the table on the documentation page)
    the fourth parameter defines the line number with which to start the export – here, we start with line 1


Decirte que el ascii de "," es 44 y de " " (1 espacio) es 32

Nota: Yo pienso que con la instrucción de conversión no es necesario que hagas modificaciones posteriores a esta instrucción. Estudia bien esta línea y te saldrá correctamente tu CSV

Ayudaría muchísimo más que aportaras el xlsx en vez de tu csv de salida que has tenido. Ya que así veríamos los delimitadores, en que línea empieza tu excel etc etc


Buenas compañero, he subido el archivo original, xsl como extensión, la tendréis que modificar por .xlsx, no me dejaba subirla con esa extensión.

Gracias.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
calcena escribió:  


Buenas compañero, he subido el archivo original, xsl como extensión, la tendréis que modificar por .xlsx, no me dejaba subirla con esa extensión.

Gracias.


Hola, calcena

He usado directamente tu xsl ya que para libreoffice es igual xsl que xlsx. Dicho esto, te adjunto el CSV hecho directamente en libreoffice. Para hacerlo más estándar a la línea de conversión de este hilo, he puesto como separador de campos el ";" y sin ningún otro delimitador, ni en números, ni en cadenas. Lo hace perfecto.

Yo haría esto, según la conversión desde libreoffice que he hecho:

soffice.exe --convert-to "csv:Text - txt - csv (StarCalc):59,,76,5" input.xlsx

El último número es la línea de inicio. Lo normal es 1 pero en tu caso es 5 y si quieres recoger la fecha de generación del report pues entonces 4. Pero como he leído que lo querías para introducirlo en una base de datos SQLite pues pienso que debes empezar desde la línea 5

Creo que con esto te sale bien.
 



 
última edición por gambafeliz el Martes, 01 Octobre 2019, 08:55; editado 1 vez 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Abrir Archivo Excel Para Recorrer Contenido 
 
gambafeliz escribió: [Ver mensaje]
calcena escribió: [Ver mensaje]


Buenas compañero, he subido el archivo original, xsl como extensión, la tendréis que modificar por .xlsx, no me dejaba subirla con esa extensión.

Gracias.


Hola, calcena

He usado directamente tu xsl ya que para libreoffice es igual xsl que xlsx. Dicho esto, te adjunto el CSV hecho directamente en libreoffice. Para hacerlo más estándar a la línea de conversión de este hilo, he puesto como separador de campos el ";" y sin ningún otro delimitador, ni en números, ni en cadenas. Lo hace perfecto.

Yo haría esto, según la conversión desde libreoffice que he hecho:

soffice.exe --convert-to "csv:Text - txt - csv (StarCalc):59,,76,5" input.xlsx

El último número es la línea de inicio. Lo normal es 1 pero en tu caso es 5 y si quieres recoger la fecha de generación del report pues entonces 4. Pero como he leído que lo querías para introducirlo en una base de datos SQLite pues pienso que debes empezar desde la línea 5

Creo que con esto te sale bien.


Buenas, gracias pero hay algo que no entiendo.

he modificado lo que me has indicado en mi código y se siguen generando las líneas de arriba, cosa que tampoco es muy crítico porque por la lógica del algoritmo lo puedo evitar.
Ahora bien, el problema no lo tengo en la generación del CSV que se crea perfectamente, el problema lo tengo en el split o generación del Grid que se representa mal, he adjuntado captura para que veas que se me crea con "" y se mueve la columna.


sData = Split(File.Load(Application.Path &/ "test.csv"), gb.NewLine, ";", True)


Saludos.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Control Para Abrir Archivo? [SOLUCIONADO] CanihoJR General 2 Miercoles, 16 Septiembre 2009, 16:23 Ver último mensaje
CanihoJR
No hay nuevos mensajes Problemas Para Recorrer Un Columnview [Sol... chaskux Controles/Librerías/Componentes 5 Miercoles, 18 Noviembre 2009, 15:52 Ver último mensaje
soplo
No hay nuevos mensajes Cómo Restaurar Tus Ventanas Y Su Contenid... shordi Aplicaciones/Fragmentos de Código 1 Jueves, 21 Agosto 2014, 14:55 Ver último mensaje
Shell
No hay nuevos mensajes Se Puede Leer Una Linea Especifica De Un A... v3ctor General 23 Sabado, 06 Diciembre 2014, 21:25 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario