|
Página 1 de 2
|
Abrir Archivo Excel Para Recorrer Contenido [Solucionado]
Autor |
Mensaje |
calcena
Ingeniero Programador
Registrado: Julio 2016
Mensajes: 272
Edad: 47
|
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
|
#1 Domingo, 29 Septiembre 2019, 14:39 |
|
|
cogier
Charlie Ogier
Aprendiz
Registrado: Septiembre 2018
Mensajes: 99
Edad: 69 Ubicación: Guernsey, Channel Islands
|
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!
Descripción: |
|
Descargar |
Nombre del archivo: |
Test.tar.gz |
Tamaño: |
17.49 KB |
Descargado: |
67 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
Test.tar.gz |
Tamaño: |
17.49 KB |
Descargado: |
67 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
Test.tar.gz |
Tamaño: |
17.49 KB |
Descargado: |
67 veces |
|
#2 Domingo, 29 Septiembre 2019, 16:00 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Abrir Archivo Excel Para Recorrer Contenido
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
|
#3 Domingo, 29 Septiembre 2019, 17:22 |
|
|
calcena
Ingeniero Programador
Registrado: Julio 2016
Mensajes: 272
Edad: 47
|
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!
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.
|
#4 Domingo, 29 Septiembre 2019, 18:20 |
|
|
cogier
Charlie Ogier
Aprendiz
Registrado: Septiembre 2018
Mensajes: 99
Edad: 69 Ubicación: Guernsey, Channel Islands
|
Re: Abrir Archivo Excel Para Recorrer Contenido
¿Puedes subir un archivo de muestra 'csv'?
|
#5 Lunes, 30 Septiembre 2019, 17:31 |
|
|
calcena
Ingeniero Programador
Registrado: Julio 2016
Mensajes: 272
Edad: 47
|
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)
Muchas gracias por la ayuda.
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: |
60 veces |
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: |
60 veces |
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: |
60 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.77 KB |
Descargado: |
65 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.77 KB |
Descargado: |
65 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.77 KB |
Descargado: |
65 veces |
última edición por calcena el Lunes, 30 Septiembre 2019, 21:38; editado 3 veces
|
#6 Lunes, 30 Septiembre 2019, 18:56 |
|
|
gambafeliz
Analista Programador
Registrado: Julio 2019
Mensajes: 830
Edad: 54
|
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
|
#7 Lunes, 30 Septiembre 2019, 19:15 |
|
|
calcena
Ingeniero Programador
Registrado: Julio 2016
Mensajes: 272
Edad: 47
|
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
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.
|
#8 Lunes, 30 Septiembre 2019, 21:39 |
|
|
gambafeliz
Analista Programador
Registrado: Julio 2019
Mensajes: 830
Edad: 54
|
Re: Abrir Archivo Excel Para Recorrer Contenido
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.
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.31 KB |
Descargado: |
64 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.31 KB |
Descargado: |
64 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
test.csv |
Tamaño: |
3.31 KB |
Descargado: |
64 veces |
última edición por gambafeliz el Martes, 01 Octobre 2019, 07:55; editado 1 vez
|
#9 Martes, 01 Octobre 2019, 07:49 |
|
|
calcena
Ingeniero Programador
Registrado: Julio 2016
Mensajes: 272
Edad: 47
|
Re: Abrir Archivo Excel Para Recorrer Contenido
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.
|
#10 Martes, 01 Octobre 2019, 09:23 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|