Abrir Archivo Excel Para Recorrer Contenido [Solucionado]


Ir a la página 1, 2  Siguiente

Objetivo: 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, 17:55; editado 1 vez
Perfil MP  
Objetivo: 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!


Test.tar.gz
Descripción:  
Descargar
Nombre del archivo: Test.tar.gz
Tamaño: 17.49 KB
Descargado: 71 veces
Test.tar.gz
Descripción:  
Descargar
Nombre del archivo: Test.tar.gz
Tamaño: 17.49 KB
Descargado: 71 veces
Test.tar.gz
Descripción:  
Descargar
Nombre del archivo: Test.tar.gz
Tamaño: 17.49 KB
Descargado: 71 veces

Perfil MP  
Objetivo: Re: Abrir Archivo Excel Para Recorrer Contenido
calcena escribió: [Ver mensaje]
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


Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: Re: Abrir Archivo Excel Para Recorrer Contenido
¿Puedes subir un archivo de muestra 'csv'?

Perfil MP  
Objetivo: 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, 21:38; editado 3 veces

test.xls
Descripción: Modificar la extensión por .xlsx no se puede subir con esa extensión. 
Descargar
Nombre del archivo: test.xls
Tamaño: 13.75 KB
Descargado: 63 veces
test.xls
Descripción: Modificar la extensión por .xlsx no se puede subir con esa extensión. 
Descargar
Nombre del archivo: test.xls
Tamaño: 13.75 KB
Descargado: 63 veces
test.xls
Descripción: Modificar la extensión por .xlsx no se puede subir con esa extensión. 
Descargar
Nombre del archivo: test.xls
Tamaño: 13.75 KB
Descargado: 63 veces
test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.77 KB
Descargado: 69 veces
test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.77 KB
Descargado: 69 veces
test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.77 KB
Descargado: 69 veces

Perfil MP  
Objetivo: 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, 19:26; editado 3 veces
Perfil MP  
Objetivo: Re: Abrir Archivo Excel Para Recorrer Contenido
gambafeliz escribió: [Ver mensaje]
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.

Perfil MP  
Objetivo: Re: Abrir Archivo Excel Para Recorrer Contenido
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.

última edición por gambafeliz el Martes, 01 Octobre 2019, 07:55; editado 1 vez

test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.31 KB
Descargado: 66 veces
test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.31 KB
Descargado: 66 veces
test.csv
Descripción:  
Descargar
Nombre del archivo: test.csv
Tamaño: 3.31 KB
Descargado: 66 veces

Perfil MP  
Objetivo: 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.

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.131s (PHP: -2% SQL: 102%)
Consultas SQL: 29 - Debug off - GZIP Activado