Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Exportar a XLSX + de 255 col (https://www.clubdelphi.com/foros/showthread.php?t=94904)

mRoman 15-10-2020 03:28:44

Exportar a XLSX + de 255 col
 
Buenas noches a todos.

Trabajo con: DELPHI 6 - FIREBIRD 2.0 - WIN 10 - IBX

De regreso con este tema que ya lo he tocado en el foro. Ahora tengo un nuevo problema con respecto a la exportación de datos a formato de Excel. Estoy usando un componente llamado XLSExport, el cual me funciona bien....SIEMPRE Y CUANDO EXPORTE MENOS DE 255 COLUMNAS!!...

El motivo por el cual uso este componente es que no necesita tener Excel instalado en el equipo del usuario. Si la solución que exista deba tener Excel instalado, pues ni modo....

Pues el problema es ese...como exportar a un formato XLSX??...con este componente o con otro, que dicho sea de paso, que también sea Free...(todo quiero jajajaja).

Por mas de 12 años sin problema estaba trabajando, pero ahora requieren incluir mas columnas en el archivo -que es una plantilla XLT-.

LO QUE HE INTENTADO:

Abrí el archivo XLT en Excel 2013 y lo grabe como plantilla de esta versión, el cual al abrirlo pues si, me da mas columnas -mas de las que necesito-...intente abrirlo con el componente dentro de mi aplicación y pues me dice que no son compatibles!!...que no tiene el formato adecuado....

Como han resuelto esto?...que componente usaron para exportar en formato XLSX??

ME BAJE VARIOS COMPONENTES:

mxNativeExcel
scExcelExport
ExportSuit
OExport Free (La version FREE solo exporta una hoja -y necesito 3- ademas de cierta cantidad de registros)
XlsReadWrite

Pero no se cual me pudiera resolver el problema...o talvez algun otro que no haya enlistado.

Uso plantilla porque se requiere de un diseño muy especifico, entonces deberá soportar esto...aunque no sea sobre una plantilla como tal, también puede ser que use un XLSX y ahi volcar los datos...con el formato especifico.

Espero me puedan ayudar.

Saludos y muchas gracias por su tiempo amigos.

engranaje 15-10-2020 08:43:26

No creo ser de mucha ayuda por desconocimiento del componente del que hablas pero te daré mi opinión por si mi experiencia te sirve. Como comentas que con este componente no necesitas tener excel instalado y que lo utilizas desde hace ya 12 años. Sospecho que trabaja directamente sobre el fichero xls en fomato sfbiff8 que es el antiguo formato utilizado por excel y limitado a 256 columnas:

https://office-watch.com/2020/excel-...s-and-columns/

Identificar el problema no te ayuda, lo entiendo. Igual mi propuesta es algo costosa en tiempo pero en lazarus existe un componente llamado fpsSpreadSheet que permite trabajar con distintos formatos de ficheros excel.:

https://wiki.freepascal.org/FPSpreadsheet

Igual te resulta interesante la posibilidad de crear una dll con lazarus que utilize este componente y llamarla desde tu aplicación delphi.

Casimiro Notevi 15-10-2020 09:33:15

No sé si te sirve, pero puedes exportar al formato de texto .csv (valores separados por comas, tabuladores, etc.)

mRoman 15-10-2020 13:39:02

Cita:

Empezado por engranaje (Mensaje 538729)
No creo ser de mucha ayuda por desconocimiento del componente del que hablas pero te daré mi opinión por si mi experiencia te sirve. Como comentas que con este componente no necesitas tener excel instalado y que lo utilizas desde hace ya 12 años. Sospecho que trabaja directamente sobre el fichero xls en fomato sfbiff8 que es el antiguo formato utilizado por excel y limitado a 256 columnas:

https://office-watch.com/2020/excel-...s-and-columns/

Identificar el problema no te ayuda, lo entiendo. Igual mi propuesta es algo costosa en tiempo pero en lazarus existe un componente llamado fpsSpreadSheet que permite trabajar con distintos formatos de ficheros excel.:

https://wiki.freepascal.org/FPSpreadsheet

Igual te resulta interesante la posibilidad de crear una dll con lazarus que utilize este componente y llamarla desde tu aplicación delphi.

Gracias por responder Engranaje. Sin duda si es costosa en tiempo, que desafortunadamente no tengo por el momento, ya que el sistema lo tengo en producción y la solución la requieren de inmediato. Aún así, agradezco tu aportación que valdría la pena investigar el desarrollo de una DLL que ayude al manejo de hojas de cálculo con mas de 255 columnas.

Nuevamente, Gracias.

Saludos.

mRoman 15-10-2020 13:49:43

Cita:

Empezado por Casimiro Notevi (Mensaje 538730)
No sé si te sirve, pero puedes exportar al formato de texto .csv (valores separados por comas, tabuladores, etc.)

Creo q no Casimiro, desafortunadamente el archivo que se exporta, es algo elaborado, he visto los componentes de Federico Firenze (ExportSuit), pero no maneja plantillas -o al menos eso creo, talvez si lo haga-, que es donde se vacían los datos con el formato que se requiere.

Aún así Casimiro, muchas gracias por tu aportación y tiempo.

Saludos.

mamcx 15-10-2020 17:17:59

Una tangente: Excel NO ES un formato confiable para intercabio de informacion:

(un ejemplo reciente, que seguro ha costado vidas)
https://news.ycombinator.com/item?id=24689247

----

Si el componente no da mas de esas columnas, no da mas y punto.
Si el formato excede un limite, excede y punto. Cuales limites?

https://www.askingbox.com/info/xls-a...lumns-and-rows

Que como vez, es peor: Excel es un formato que depende de versiones y años en que tal cosa se implemento, porque NO ES un formato para manipular datos.

Hay que dejarle claro eso a los clientes.

---
Una solucion mas limpia es que DESDE excel se conecte a tu DB/app. O usar sqlite. O usar csv y DESDE excel conectarse.

O usar otra app para manejar informacion.

Excel NO ES una app para maipular datos arbitrarios.

delphi.com.ar 15-10-2020 19:12:30

Cita:

Empezado por mRoman (Mensaje 538734)
Creo q no Casimiro, desafortunadamente el archivo que se exporta, es algo elaborado, he visto los componentes de Federico Firenze (ExportSuit), pero no maneja plantillas -o al menos eso creo, talvez si lo haga-, que es donde se vacían los datos con el formato que se requiere.

No, no lo hacen. La idea de esos componentes fue originalmente la misma, que no dependa de la versión de Excel instalado, y que permita exportar "grillas" completas. Por lo tanto no hay mucho mas que eso.


PD:
¿Los componentes que estás usando son de código abierto?


Saludos!

mRoman 15-10-2020 20:32:28

Cita:

Empezado por delphi.com.ar (Mensaje 538736)
No, no lo hacen. La idea de esos componentes fue originalmente la misma, que no dependa de la versión de Excel instalado, y que permita exportar "grillas" completas. Por lo tanto no hay mucho mas que eso.


PD:
¿Los componentes que estás usando son de código abierto?


Saludos!

Que tal Federico, un placer.

Creo q no son de código abierto, en realidad cuando llegué a este empresa el componente ya estaba instalado.

carnace 16-10-2020 00:00:50

Cita:

Empezado por mamcx (Mensaje 538735)
Una tangente: Excel NO ES un formato confiable para intercabio de informacion:

(un ejemplo reciente, que seguro ha costado vidas)
https://news.ycombinator.com/item?id=24689247

----

Si el componente no da mas de esas columnas, no da mas y punto.
Si el formato excede un limite, excede y punto. Cuales limites?

https://www.askingbox.com/info/xls-a...lumns-and-rows

Que como vez, es peor: Excel es un formato que depende de versiones y años en que tal cosa se implemento, porque NO ES un formato para manipular datos.

Hay que dejarle claro eso a los clientes.

---
Una solucion mas limpia es que DESDE excel se conecte a tu DB/app. O usar sqlite. O usar csv y DESDE excel conectarse.

O usar otra app para manejar informacion.

Excel NO ES una app para maipular datos arbitrarios.

No sólo eso. Los formatos que des a las celdas entre una versión y otra se descuadran. Si es que los abre sin pérdida de datos aún así no se visualizan bien. Hace poco tuve problemas con un archivo hecho en otra aplicación de hoja de cálculo de ofimática y supuestamente era "compatible con excel" , pero del dicho al hecho hay mucho trecho. Aunque Excel pueda parecer un reporteador versátil, en la práctica te puede dar problemas, sobre todo de compatibilidad. Si es en el lado de access, me encuentro con que la versión 2016 no me abre mis archivos de access 97 y sólo me permite de 2003 hacia acá. También tiene la misma limitación de máximo 255 campos por tabla / consulta SQL, sin embargo, access no me avisó de esto y una vez terminé haciendo mal unos reportes al vincular una tabla de más de 255 campos que estaba hecha en PostgreSQL.
Como moraleja de esta experiencia me quedó: usar reporteadores que sean adecuados y no depender de las aplicaciones Excel /access. Incluso con csv puede haber problemas, una vez tenía un número de cuenta bancaria que es de tipo texto y al abrirla en Excel la cambió a formato numérico científico, eliminando algunos dígitos.

Casimiro Notevi 16-10-2020 10:16:49

Cita:

Empezado por carnace (Mensaje 538738)
..Incluso con csv puede haber problemas, una vez tenía un número de cuenta bancaria que es de tipo texto y al abrirla en Excel la cambió a formato numérico científico, eliminando algunos dígitos.

En ese caso, también la culpa es de excel, no del .csv :)

engranaje 16-10-2020 11:30:47

Me ha picado la curiosidad y he buscado algo, encontrando esto:


http://avemey.com/zexmlss/index.php?lang=en


En principio la licencia es zlib y la prueba sencilla que he hecho con el proyecto de ejemplo que trae el propio componente "parece" funcionar (en Lazarus eso sí). Si aún no has encontrando una solución puedes intentar con zexmlss.

mRoman 18-10-2020 02:32:33

Cita:

Empezado por engranaje (Mensaje 538744)
Me ha picado la curiosidad y he buscado algo, encontrando esto:


http://avemey.com/zexmlss/index.php?lang=en


En principio la licencia es zlib y la prueba sencilla que he hecho con el proyecto de ejemplo que trae el propio componente "parece" funcionar (en Lazarus eso sí). Si aún no has encontrando una solución puedes intentar con zexmlss.

Ok...engranaje...gracias, la verdad ando buscando todavía. Existe solución con el componente TscExcelExport...pero necesita el excel instalado...también con los componentes que trae Delphi por default.

Intentare con el link q enviaste....

Gracias.

mRoman 21-10-2020 01:28:14

Cita:

Empezado por mRoman (Mensaje 538756)
Ok...engranaje...gracias, la verdad ando buscando todavía. Existe solución con el componente TscExcelExport...pero necesita el excel instalado...también con los componentes que trae Delphi por default.

Intentare con el link q enviaste....

Gracias.

Pues no lo puedo instalar para probar....no encuentra una DCU:

[Fatal Error] zexmlssutils.pas(33): File not found: 'ZColorStringGrid.dcu'

Son 2 archivos DPK:
zexmlsslib
zexmlsslibe

No trae instrucciones de instalación, pero lo hice asi: File/open/ ... y seleccioné el archivo (zexmlsslib), le di click sobre "install" y marca error, anteriormente le di click sobre "Compile" y luego en "Install" y marca el mismo error. Esto hice para el otro archivo.

Lo hice mal??...es correcto la forma en como lo ejecuté?

Hay otra carpeta que dice "SRC", supongo que son los "source" del componente, pero no viene el que marca el error.

Gracias por su tiempo.

Saludos.

engranaje 21-10-2020 10:08:26

Ahora mismo no puedo probarlo, y ya digo que la prueba en su momento la hice en lazarus sin problemas. Lo que yo veo no es que no tenga instrucciones si no que las tiene en ruso, pero copiando y pegando en google translator la traducción al español deja algo del tipo:
2. Delphi 5-7, BDS 2005, BDS 2006, Delphi 2007, CodeGear RAD Studio 2009/2010, Delphi XE y Delphi XE2.
Advertencia: Delphi 5 funcionará solo con codificado Windows-1251 y CP866, hay otras codificaciones disponibles en dispositivos portátiles
(mono ¡Intente extraer system.pas de Delphi 7)!

0. Si no está usando ZColorStringGrid, agregue la línea a src \ zexml.inc {$ DEFINE NOZCOLORSTRINGGRID}

1. Agregue la versión anterior (según bpl, dcp y dcu).

2.Agregue (si no es necesario) el código fuente en Herramientas-> Opciones de entorno-> Biblioteca-> Ruta de biblioteca (para BDS 2005 o BDS 2006 â Herramientas-> Opciones-> Opciones de entorno-> Opciones de Delphi-> Biblioteca - Win32-> Ruta de la biblioteca)

3. Para utilizar las funciones ReadXLSX, SaveXmlssToXLSX, SaveXmlssToODFS y ReadODFS: lea /delphizip/readme.txt, reemplace el archivo inc en la carpeta src con / delphizip / new_package (Compatible con TurboPower Abbrevia (http://sourceforge.net/projects/tpabbrevia/), Synzip (http://synopse.info) и Biblioteca de códigos JEDI (http://sourceforge.net/projects/jcl/)). Reemplace el almacenamiento interno.

4. Abra el nuevo zexmlsslibe.dpk (o zexmlsslib.dpk si no usa ZColorStringGrid). Haga clic en "Compilar" y luego en "Instalar".

Esta tarde probaré a montarlo en un delphi y te cuento si he tenido algún problema.

engranaje 21-10-2020 23:27:15

En delphi 7 pude montarlo de forma relativamente facil, solo abrí el dpk zexmlsslib.dpk , edité zexmlssutils.pas añadiendo en la interface de la unit la línea:

{$DEFINE NOZCOLORSTRINGGRID}


Compilé el dpk, y después lo instalé. Sé que usas delphi 6, no sé si siguiedo estos pasos podrás instalar el componente, espero que sí.

mRoman 22-10-2020 18:47:44

Cita:

Empezado por engranaje (Mensaje 538793)
En delphi 7 pude montarlo de forma relativamente facil, solo abrí el dpk zexmlsslib.dpk , edité zexmlssutils.pas añadiendo en la interface de la unit la línea:

{$DEFINE NOZCOLORSTRINGGRID}


Compilé el dpk, y después lo instalé. Sé que usas delphi 6, no sé si siguiedo estos pasos podrás instalar el componente, espero que sí.

Ok. lo intento ahora mismo, y les cuento.

mRoman 27-10-2020 00:19:28

Solucionado
 
Cita:

Empezado por mRoman (Mensaje 538810)
Ok. lo intento ahora mismo, y les cuento.

Bueno pues les platico. Con la opción que me pasó "engranaje", no lo pude resolver, ya que me marcaba varios errores y con la prisa que tenia de resolverlo, la verdad ya no quise investigar mas...

Lo resolví con el componente tscExcelExport...que desafortunadamente REQUIERE TENER INSTALADO EL EXCEL, pero con este me solucionó el problema para generar archivos mayores a 255 columnas. En link que les anexo, vienen ejemplos de su uso y hasta código fuente de esos ejemplos.

Pues bien, muy a mi pesar, de no haberlo solucionado como yo quería, al final, me permitió resolver el problema, el cual se agravaría mas -y tendría mas presión- para el cierre de mes -q ya casi se acerca, 31 de Oct.-

Bueno, espero que lo aquí expuesto sirva para alguien mas que tenga este problema.

Saludos.

p.d. talvez le dedique mas tiempo de calidad a la propuesta de "engranaje" y tener otra alternativa...

Casimiro Notevi 27-10-2020 09:30:47

Una pregunta, ¿exportas fórmulas, notas, más de una hoja... o son solamente valores en una hoja?

mRoman 27-10-2020 20:35:41

Cita:

Empezado por Casimiro Notevi (Mensaje 538857)
Una pregunta, ¿exportas fórmulas, notas, más de una hoja... o son solamente valores en una hoja?

Que tal casimiro.

Exporto formulas, texto y datos numéricos en mas de una hoja (de 3 a 4 hojas)....estos datos los vuelco en un archivo que tiene cierto formato/diseño como una plantilla, el cual es grabado en tiempo de ejecución con otro nombre que el usuario selecciona.

"Notas" no exporto, pero el componente, permite insertar notas en las hojas de cálculo.

Casimiro Notevi 27-10-2020 21:14:28

Gracias por la información ^\||/


La franja horaria es GMT +2. Ahora son las 01:53:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi