Me peta scalc al abrir un html grande

Discute sobre la aplicación de hojas de cálculo
Responder
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

Tengo un serio problema con scalc en windows xp utilizando las apis la función para subir un html mediante loadcomponentfromurl

Genero desde la aplicación un html con datos. Por ejemplo de 12 columnas. El html que genero es bastante simple, de este estilo:

<html><head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title>
</head>
<body>
<table WIDTH="100%" CELLSPACING="0" CELLPADDING="0" BORDER="0" STYLE="font-family: Tahoma">
<tr WIDTH="100%">
<th><center>column1</center></th>
<th><center>column2</center></th>
<th><center>column3</center></th>
<th><center>column4</center></th>
<th><center>column5</center></th>
<th><center>column6</center></th>
<th><center>column7</center></th>
<th><center>column8</center></th>
<th><center>column9</center></th>
<th><center>column10</center></th>
<th><center>column11</center></th>
<th><center>column12</center></th>
</tr>
<tr>
<td><center>22/06/2004</center></td>
<td></td>
<td><center> </center></td>
<td>Esquerra&nbsp;Powers1 </td>
<td>Esquerra&nbsp;Powers1 </td>
<td>&nbsp;</td>
<td></td>
<td>1 </td>
<td>Facturado</td>
<td></td>
<td>155</td>
<td>Esquerra&nbsp;Powers1 </td>
</tr>

...
...


</table>
</body>
</html>


..
Si el html tiene un peso de alrededor de 2Mb la función loadcomponentfromurl me peta
Prueba que hice. Realicé un pequeño html y me funciona correctamente.... ahora cojo y copy & paste una de las rows n veces hasta conseguir que el fichero pese alrededor de los 2 mb.. no se exactamente cuando tiene que petar... voy probando hasta que revienta.... la cuestión es que llega un momento en que se ve que el html es excesivo para scalc y revienta. No es por datos.. porque el mismo fichero pero con menos rows lo sube.

Curiosamente ...me he dado cuenta que faltando pocas rows para hacerlo petar, si que me abre scalc pero las últimas rows las "mete todas en una celda"..... Yo supongo que el bug es ese.. llega un punto en que mete los datos todos en una misma celda hasta que la capacidad de la celda se excede. Ver imagen !!
http://www.eloasisgame.es/LAUDRUP69/muestra.gif

A alguien le ha pasado lo mismo?
Hay limitación en las importaciones a scalc?

...Alguna sugerencia?

ya no se que hacer
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Avatar de Usuario
RGB-es
Mensajes: 4739
Registrado: Lun Nov 24, 2008 10:46 am
Contactar:

Re: Me peta scalc al abrir un html grande

Mensaje por RGB-es »

OOo 2.x tenía un límite de número de columnas/filas de 256/32768 respectivamente, el cual se ha extendido, en las versiones 3.x, a 1024/65536. En ambos casos el límite de número de hojas en un mismo archivo es 256. Asegúrate de no estar pasando esos límites... aunque de la imagen que muestras no parece ser el caso :?:
No respondo mensajes privados sobre AOO/LibO, por favor, utilice el foro para sus preguntas

LibreOffice en openSUSE con escritorio Plasma
---
Existen dos clases de personas: las que dicen que existen dos clases de personas y las que no.
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Re: Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

Que va !! no es el caso.

a scalc se le "va la pinza" cuando llega a una fila... me empieza a meter los datos en una misma celda y/o puede que siga después normal y sigue colocándome las filas bien ...o simplemente casca.

Por lo que veo el abrir un html no funciona correctamente en openoffice solo tengo esa explicación.

Puedes corroborarlo. Si abres un scalc y rellenas varias columnas en una sola fila !! ... y guardas como a html para scalc. Posteriormente abres el html que te ha generado EL PROPIO scalc... y haces copy & paste de la fila que te ha generado, es decir el <tr>....</tr> e inflas el fichero hasta que llegues a unas 4800 filas en scalc ... verás que te ocurre o debería ocurrirte lo mismo.

Lo he probado en la versión 2.2 y 3.1 y el resultado es el mismo, además tarda muchísimo en abrirlo.

La solución que estoy encontrando pero que no la acabo de perfilar es la de utilizar filtros xml.

Pero para ello los ejemplos que he visto ...todos dicen que primero lo generes desde open office... herramientas->configuración del filtro XML y añadirlo allí.

Me he generado un xslt de pruebas y el resultado a sido satisfactorio, pero no está en mi mano que el usuario final que va a utilizar esto abra su open office y añada el xslt que yo debo generar porque será dinámico. NO siempre es el mismo porque no siempre subo el mismo patrón de ...digamos <table>.

Así que estoy mirando como generar a partir de api's el filtro xml dinámicamente... pero por ahora no me aclaro. Se que tengo que utilizar el servicio "com.sun.star.document.ImportFilter" pero no consigo entender como !!.

Gracias por la contestación y si se os ocurre alguna sugerencia o encontrais un ejemplo de generación de filtro mediante el servicio ImportFilter os lo agradecería mucho :super:
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Me peta scalc al abrir un html grande

Mensaje por mauricio »

Hola...

He hecho algunas pruebas, genere un archivo en Calc de 10 columnas por 10,000 filas y lo guarde como HTML, lo genera bien.
Al tratar de abrirlo, tarda mucho pero logra hacerlo, alrededor de la fila 6,500, efectivamente empieza a meter todo en la cuarta columna, pero Calc no falla, es decir, logra abrirlo.
Reduje el número de filas a 6560 y repetir el experimento, en la fila 6553 exactamente siempre empieza a meter todo en una celda.
Al abrir el archivo en GEdit, el editor de texto de GNome, se ve bien la estructura de la tabla en HTML
Al abrir el archivo en Firefox, también muestra el archivo correctamente.

Todo parece indicar que efectivamente es un error de importación de Calc, abría que confirmarlo y tratar de reportar el problema.

Una posible solución, temporal, seria que programaras la importación "a mano", recuerda que los archivos HTML son archivos de texto simples, perfectamente manipulables desde OOo Basic, parece complejo pero no lo es tanto, si te decides a hacerlo, publica la propuesta en el foro correcto http://user.services.openoffice.org/es/ ... m.php?f=50 para ayudarte a implementarla...

Saludos

Mauricio

P.D. Por favor, procura no usar las negritas, más que para lo indispensable, gracias
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Re: Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

Gracias mauricio... por lo menos se que no me pasa a mi solo.

La programación a mano la haría pero resultaría inviable ya que estamos hablando de muchísimos registros. El echo de hacerlo en html es que en el lenguaje que programo puedo generar automáticamente un html desde los datos. El lenguaje del que hablo es PowerBuilder que siendo de mexico seguro que algo te suena, estuve en un proyecto para comercial mexicana (la del pelícano) hace unos 10 años y estuve un tiempo en Mexico DF. Se que en mexico aún se utiliza o utilizaba bastante este lenguaje, ahora parece que está un poco de capa caída.

Bueno lo dicho...desde powerbuilder modifico el template xml del datawindow (buffer de datos) y tengo un xsl para hacer la transformación a html.

Una vez obtenido el html lo que hacía era abrir el scalc con el html y todo funcionaba ok... ahora nos ha venido este error porque hasta ahora no habían sacado tantos registros.

Tengo que darle salida y la única que he visto es la implementación de filtro xml.Debo generarlo desde powerbuilder y estoy en ello ...aunque esto es mucho más lioso que abrir un simple html ... :crazy:

PD: Perdón por la negrita y gracias
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Me peta scalc al abrir un html grande

Mensaje por mauricio »

Hola...

Si, conozco, de nombre, el PowerBuilder, pero nunca he trabajado con el. La mayoría de los lenguajes exportan sin problemas a CVS o TXT, si puedes hacer esto desde tu programa, importar estos archivos a Calc es mucho más sencillo, aun, programando a mano, no es complejo, consideralo...

Saludos

Mauricio
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Re: Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

Hola de nuevo.

Si podría exportar mediante CVS o TXT pero hay varias condicionantes que me obligan a necesitar de una exportación "más rica".

Acentos, fechas, importes formateados de tal forma que puedan o no salir con decimales, es decir 8.00 no tiene sentido que salga ya que gasta "tinta" a la hora de impresiones.. así que no debe salir.. humm que más espacios entre textos.. hay referencias como no se me invento "569 UHYJ 9090" ...

Todas estas particularidades las puedo conseguir con un xsl inteligente y la idea siempre ha sido transformar para conseguir algo que pueda subir excel de microsoft o scalc en caso de tener a alguien con scalc. Lo bueno que tenía el tema de transformar a html es que tanto uno como otro "subían" el fichero.La jodienda a venido con dos cosas:

1.- A scalc le cuesta horrores subir un fichero ... dobla en tiempos a MS office o incluso los triplica !!!
2.- Un html al final no es posible subirlo en scalc.

El tiempo es bastante importante o incluso diría crucial porque el problema está en que subimos muchos datos. Estamos hablando de 8 mil, 10 mil o incluso más registros. Si algo excede de lo exagerado es tan malo como el que no pueda levantarlo ya que el resultado es el mismo "no poder subirlo".

Subir a "mano" los datos es inviable !! hay que añadir la memoria utilizada por el propio programa que va a subir esos datos y que los tiene por lo tanto en memoria...los datos que va a ir acumulando scalc, el tiempo de subir celdas y formatearlas, que como ya te he comentado son celdas que van a tener su miga, tiempo de comunicación constante entre el programa de pb y scalc. De todas formas hice unas pruebas ya que no tengo más remedio que darle a esto erre que erre hasta conseguir algo factible... y bufff si ya es lento subirlo mediante un html o cualquier otra cosa...a mano ... me da a mi que no.

Estuve mirando el tema de hacer un filtro xml específico para poder abrir con loadComponentFromURL y especificarle con la propiedad FilterName el filtro que yo añadiría ...y que no es más que un xsl específico para construir un xslt en formato openoffice. No se si te sonará el tema ...

Código: Seleccionar todo

...
...
   <office:body>
    <office:spreadsheet>
     <table:table>

      <!-- Format the first 4 columns of the table -->
      <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
      <table:table-column table:style-name="co2" table:default-cell-style-name="ce2"/>
      <table:table-column table:style-name="co2" table:default-cell-style-name="ce2"/>
      <table:table-column table:style-name="co2" table:default-cell-style-name="ce2"/>

      <!-- Insert column labels, first label with default style, the remaining 3 labels right aligned -->
      <table:table-row>
       <table:table-cell><text:p>ID</text:p></table:table-cell>
       <table:table-cell table:style-name="ce1" office:value-type="string"><text:p>All average</text:p></table:table-cell>
...
...
El filtro lo consigo hacer ... no hay problema .. pero debe ser dinámico y lo único que he visto hacer para implementar estos filtros es metiéndolo por menú desde herramientas->Configuración del filtro XML. Desde esta opción del menú de scalc, podemos especificar filtros que despues nos aparecen a la hora de abrir un documento desde scalc en el dropdown de "tipos de archivo". Así que lo puedo utilizar en el método loadComponentFromURL para abrir mis datos xml previamente preparados para el xslt y voilà suben sin problemas y la respuesta es relativamente rápida y no se le va la pinza a scalc como con los html.

Problema !!. No puedo o no se generar estos filtros desde API ... no he logrado entender como se puede programar desde un lenguaje el añadir o quitar filtros a scalc. Creo que es mediante el servicio FilterFactory con la clase ImportXML pero me he dado :crazy: :crazy: y al final desistí al pensar en ooootra posible solución.

He visto que scalc puede abrir "MS Excel 2003 XML". Así que estoy ahora probando de que mis transformaciones en vez de hacerlas a html hacerlas a xml del formato "MS Excel 2003 XML". Parece ser que el comportamiento es similar al de los filtros xml's de scalc ...aunque mis tests me están rebelando que el tiempo de subir el xml a scalc es bastante bastante alto... tanto que no se si será también solución.

Lo suyo sería saber como desde programa (powerbuilder o el que sea... si veo como se hace en basic yo lo puedo trasladar a como se hace en powerbuilder ), generar el filtro xml ...utilizarlo en FilterName para abrir el documento ...grabar a .ods y después destruir el filtro generado...pero no he visto como.

La última locura que se me ocurre es construir el .ods...se que es un comprimido de varios archivos... pero llegado a este punto algo tendré que hacer para salir del paso.

Gracias por la atención que me estas prestando. Si a ti se te ocurre alguna otra cosa o sabrías como orientarme en la generación de filtros xml y/o construcción de un .ods directamente no dudes en decirme cualquier cosa.

Saludos,
Laudrup
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Me peta scalc al abrir un html grande

Mensaje por mauricio »

Hola...

El API de OOo tiene una interfaz especial para manejo de XML: http://api.openoffice.org/docs/common/r ... le-ix.html
No he experimentado mucho con XML, pero encontré algunas referencias:

http://wiki.services.openoffice.org/wiki/XML_and_Filter
http://user.services.openoffice.org/en/ ... 2c77d0a1f5
http://www.oooforum.org/forum/viewtopic.phtml?t=4907
http://www.oooforum.org/forum/viewtopic ... highlight=

Si quieres generar un ODS directo desde tu aplicación, tienes que ver:

http://odftoolkit.org
http://books.evc-cit.info
http://docs.oasis-open.org/office/v1.1/ ... -v1.1.html
http://www.osor.eu/projects/odfpy

Si el lenguaje que usas permite crear instancias de objetos, puedes crear el ODS directamente como en VB6

Código: Seleccionar todo

Private Sub cmdAbrir_Click()
Dim oSM As Object
Dim oEscritorio As Object
Dim oArchivo As Object, sRuta As String
Dim arg()

  'Creamos una instancia del administrador de servicios
  Set oSM = CreateObject("com.sun.star.ServiceManager")
  'Creamos una instancia del servicio Desktop
  Set oEscritorio = oSM.createInstance("com.sun.star.frame.Desktop")
  'Abrimos un documento de Calc existente, o una plantilla
  sRuta = App.Path & "/Formato01.ods"       'ots para una plantilla
  If Dir(sRuta) <> "" Then
    sRuta = "file:///" & sRuta
    Set oArchivo = oEscritorio.loadComponentFromURL(sRuta, "_blank", 0, arg())
  Else
    MsgBox "No existe el archivo"
  End If

  'Liberamos la memoria usada por las variables
  Set oArchivo = Nothing
  Set oEscritorio = Nothing
  Set oSM = Nothing

End Sub
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Re: Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

Hola,

Bueno mauricio al final más que otra cosa por falta de tiempo he tirado por el convertir mediante un xsl mi xml de datos a un fichero "temporal.xml" en formato de MS Excel 2003 que lo soportan todos los openoffice que yo sepa al menos desde versión 2.1

Código: Seleccionar todo

//
// Ejemplo basado en lenguaje: PowerBuilder 9.0.2 build 7610
// Todos los ioo_xxx son del tipo OLEObject

ioo_serviceManager = Create OLEObject

// Obtenemos Servicio 
ioo_serviceManager.ConnectToNewObject("com.sun.star.ServiceManager")

// Obtenemos un Desktop a través del servicio 
ioo_desktop = ioo_serviceManager.createInstance("com.sun.star.frame.Desktop")

// Objeto propiedades que necesitamos para abrir el documento xml en formato Excel 2003
ioo_property = ioo_serviceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

// 1ª propiedad que le indicaremos -> Le decimos que será oculto.
ioo_property[1].Name  = "Hidden"
ioo_property[1].Value = TRUE

// 2ª propiedad que le indicaremos -> El archivo que le vamos a pasar está en formato Excel 2003
ioo_property[2].Name  = "FilterName"
ioo_property[2].Value = "MS Excel 2003 XML"

// Abrimos archivo xml en formato Excel 2003
ioo_calc = ioo_desktop.loadComponentFromURL("file:///c:/carpeta/file.xml", "_blank", 0, ioo_property)


// ...
// hacemos los cambios que queramos ...
// ...

// por ejemplo nombre de la primera hoja
ioo_calc.getSheets().getByIndex(0).setName("Hoja 1")

// IMPORTANTE !!
// Grabo los cambios en el fichero xml ... de lo contrario el archivo .xml quedará bloqueado por office 
// y no se puede borrar 
ioo_calc.storeAsURL("file:///c:/carpeta/file.xml", ioo_property)

// Le damos un nombre a la hoja de cálculo resultado y exponemos en que queremos grabar (ods)
ioo_property = ioo_propertyNull
ioo_property[1].Name  = "DocumentTitle"
ioo_property[1].Value = "ods resultante"
ioo_property[2].Name  = "FilterName"
ioo_property[2].Value = "calc8"
ioo_calc.storeAsURL("file:///c:/carpeta/file.ods", ioo_property)

// ya podemos cerrar o visualizar
if ib_noshow then
	// Cerramos hoja
	ioo_calc.close(true)
	
	// terminamos con el desktop
	ioo_desktop.terminate()
	destroy (ioo_desktop)
	
	// cerramos conexión con el servicio
	ioo_serviceManager.DisconnectObject()	
	destroy (ioo_serviceManager)
else
	ioo_calc.getCurrentController().getFrame().getContainerWindow().setVisible(TRUE)
end if

Gracias por el soporte !!!
:super:
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Me peta scalc al abrir un html grande

Mensaje por mauricio »

Hola...

Que bueno que lo has resuelto, no estaría mal que lo documentaras bien pues me parece un fallo importante de OOo que hay que tratar de reportar y darle seguimiento para su corrección en futuras implementaciones.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
laudrup69
Mensajes: 8
Registrado: Lun Oct 19, 2009 9:21 am

Re: Me peta scalc al abrir un html grande

Mensaje por laudrup69 »

...buff bueno pues al final no fué solución. Me dió la sensación de que ya era suficiente porque subí 5000 registros y los subió bien ...bueno se pegaba su rato pero lo subió. Después dije voy a meterle más chicha e hice una prueba mayor y real con 12000 registros y volvió a pasar lo mismo :crazy: además del tiempo que pasó que fué enorme.

Desesperado ...volví a leer de nuevo tu post y me pregunté si era posible subirlo como txt... así que estrujé :knock: todo lo que pude el xsl para conseguir un fichero plano separado por pipes ( | ) y esa ha sido la solución definitiva...funciona bien y el tiempo es muy bueno ...

Vamos que no hay mejor forma de subir filas a scalc que el método de generar un fichero plano Txt

El cambio substancial en el código sería al abrir el fichero ...que ahora abro un txt con separadores de campo la pipe.

Código: Seleccionar todo

..
..
..
ioo_property[2].Name  = "FilterName"
loo_property[2].Value = "Text - txt - csv (StarCalc)"

ioo_property[3].Name  = "FilterOptions"
loo_property[3].Value = "124,34,76,1,1/1/2/1/3/1/4/1"

// Abrimos archivo txt en formato campos separado por pipes ( '|' )
ioo_calc = ioo_desktop.loadComponentFromURL("file:///c:/carpeta/file.txt", "_blank", 0, ioo_property)
..
..
..
NOTAS:
FilterOptions.
- Aquí hay que especificar las opciones en las que queremos abrir el txt.

-> El primer parámetro es el separador, que yo le he puesto la pipe que su código asccii es el 124.
-> El segundo es el delimitador de cadenas ...que yo he puesto las comillas dobles ( " ) que su código asccii es el 34.
-> El tercero es el formato en que se encuentran los datos...en mi caso es UTF8 y buscando encontré que hay que poner el valor 76
-> El cuarto es la fila donde se quiere empezar a importar
-> El último es el más complejo... se tratan de duplas "columna/formato". Yo he puesto un ejemplo ...mis datos son complejos y viene de todo ...números, fechas, textos ...etc

Encontré esta tabla en esta página MANUAL

posibilidades de formato:
1 - Standard
2 - Text
3 - MM/DD/YY
4 - DD/MM/YY
5 - YY/MM/DD
6 - no especificado
7 - no especificado
8 - no especificado
9 - ignorar el campo "no importarlo"
10- US-English

PD: Mi primera aparición en estos foros ha sido a raíz de tener que implementar este tema para open office. El software en el que trabajo trabaja para windows y nunca había salido la posibilidad de pelearme con temas de esta índole, así que desconozco como se debe documentar y aportar estos fallos y darle seguimiento para que en futuras implementaciones se corrija. Si me guias con un enlace donde se explique como, no tengo ningún impedimento en documentarlo y reportarlo. Lo que si que he visto es un foro exclusivo "Macros y API UNO" donde poder colgar código. ¿Crees conveniente que abriera un hilo con el código ?.
OpenOffice 2.2 en Windows XP / OpenOffice 3.2 en Windows XP
Responder