• Publicidad

Leer archivos ooxml

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Leer archivos ooxml

Notapor lnx_hg » 2010-06-30 18:42 @821

Hola de nuevo a todos.

Esta vez me gustaría saber si alguien ha entrado en la aventura de leer un documento ooxml de Excel. Yo lo estoy intentando con unas librerías que encontré en un post (Archive::Zip y XML::Twig).

Leyendo por ahí encontré que si se renombra un archivo .xlsx a .zip obtienes una estructura de archivos y es por eso lo de la librería para archivos zip.

Gracias de antemano.
El mensajero no es importante, lo que importa es el mensaje.
lnx_hg
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2007-08-13 12:52 @578

Publicidad

Re: Leer archivos ooxml

Notapor explorer » 2010-07-01 05:02 @251

En CPAN apenas hay unos módulos para leer la meta información de los ficheros.

Después de la polémica que se formó con su "extraña" aprobación por parte de la ISO, no me extraña... ese formato es la respuesta de Microsoft al formato OpenDocument, que también es formato ISO, pero aprobado sin "presiones".

En CPAN hay muchos más módulos para OpenDocument, naturalmente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer archivos ooxml

Notapor lnx_hg » 2010-07-01 12:20 @555

Gracias por responder, explorer.

Pues estaría bien que fuera en ODF ya que veo que hay mucha documentación con este formato, pero el cliente nos entrega un archivo xlsx para yo leerlo y después escribir en él.
El mensajero no es importante, lo que importa es el mensaje.
lnx_hg
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2007-08-13 12:52 @578

Re: Leer archivos ooxml

Notapor explorer » 2010-07-01 12:42 @571

Pues... ¡hombre!... si se trata de acceder a esos ficheros, sí que hay módulos en CPAN, pero no para escribir en ellos.

En github sí que hay algo: ooxml-utils, pero aún está en pañales...

Lo que sí hay son soluciones para .Net (obviamente), y para Pyhton.

Como has dicho antes, el formato es sencillo (un fichero XML comprimido con zip) y está documentado (un millar de páginas, creo recordar), así que, visto de esa manera, se podría intentar, siempre y cuando no vayas a meter cosas muy complicadas en el documento y tengas tiempo suficiente para entender el formato.

Otra opción, usando el protocolo OLE de Windows.

Otra opción, comprando una herramienta ya hecha.

Otra opción, olvidarte de Perl y probar con PowerShell. A fin de cuentas, también es de Micro$oft.

¿No puedes decirle a tu cliente que te mande las hojas en format xls del 2003? Yo supongo que el Excel actual es capaz de guardar en varios formatos, incluido los anteriores de Excel. Si fuera posible así, no tendrías muchos problemas para leer/cambiar los ficheros. Es más... según veo en la página de Micro$oft, en el Excel 2007 (después de instalar el Service Pack 2 de Office) sí que es posible guardar los documentos en OpenDocument...

Vamos, que posibilidades hay unas cuantas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer archivos ooxml

Notapor lnx_hg » 2010-07-01 13:10 @590

De hecho, al inicio era con formato de Office 2003 y estaba usando Spreadsheet::ParseExcel::SaveParser y funcionaba bien, excepto que no mezclaba las celdas correctamente (esto se solucionó con un hack que se encuentra en http://www.perlmonks.org/?node_id=666704) y las imágenes no eran incluidas, entonces se decidió por el formato del 2007 y ahí es donde los problemas comienzan de nuevo :S
El mensajero no es importante, lo que importa es el mensaje.
lnx_hg
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2007-08-13 12:52 @578

Re: Leer archivos ooxml

Notapor explorer » 2010-07-01 13:19 @596

Hummm... si lo ves muy complicado, quizás sea mejor cambiar de lenguaje.

Lo digo desde la valentía del desconocimiento ;)

A ver si alguien más participa y puede darte alguna pista más.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer archivos ooxml

Notapor lnx_hg » 2010-07-01 13:33 @606

Ok, pues muchas gracias, explorer, por tu ayuda.
El mensajero no es importante, lo que importa es el mensaje.
lnx_hg
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2007-08-13 12:52 @578

Re: Leer archivos ooxml

Notapor lnx_hg » 2010-07-13 13:09 @590

Yo de nuevo. Después de un buen de tiempo logré entender cómo funcionaba el ooxml de Excel y resultó ser más simple. Me gustaría publicar el código completo aquí a manera de guía, pero me estoy enfrentando a un problema.

Resulta que uso la librería Archive::Zip para descomprimir el xlsx y quiero volver a a comprimirlo en un xlsx pero al agregar un archivo con el método addFile() me marca un error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
IO error: Unsupported date before 1980 encountered, moving to 1980 : Bad file descriptor
 at C:/Perl/lib/Archive/Zip/Member.pm line 501
        Archive::Zip::Member::_unixToDosTime(315558000) called at C:/Perl/lib/Archive/Zip/Member.pm line 181
        Archive::Zip::Member::setLastModFileDateTimeFromUnix('Archive::Zip::NewFileMember=HASH(0x23c2184)', 315558000) called at C:/Perl/lib/Archive/Zip/NewFileMember.pm line 36
        Archive::Zip::NewFileMember::_newFromFileNamed('Archive::Zip::NewFileMember', '[Content_Types].xml', undef) called at C:/Perl/lib/Archive/Zip/Member.pm line 54
        Archive::Zip::Member::newFromFile('Archive::Zip::Member', '[Content_Types].xml', undef) called at C:/Perl/lib/Archive/Zip/Archive.pm line 202
        Archive::Zip::Archive::addFile('Archive::Zip::Archive=HASH(0x236d58c)','[Content_Types].xml') called at xlsxRW.pl line 95
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Analizando los archivos que son descomprimidos no marcan fecha de modificación. El método que uso para descomprimir es extractToFileNamed(). Estuve leyendo sobre los atributos pero no le entiendo muy bien.

Creo que necesito un zarpazo de tigre, por favor.
El mensajero no es importante, lo que importa es el mensaje.
lnx_hg
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2007-08-13 12:52 @578

Re: Leer archivos ooxml

Notapor explorer » 2010-07-13 14:16 @636

Pues no me hago idea de lo que puede pasar... Sin código, es difícil de ver lo que puede ser...

Actualización: la cifra de 315558000 corresponde a la fecha de Tue Jan 1 08:00:00 1980, lo cual es muy raro...

Como es obvio, no tengo ni puedo tener a mano ningún fichero xlsx, así que no puede decir si son grabados o no con esa fecha.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados