He hecho un parche que pudiera valer, aunque necesitaba parchearlo algo más:
He conseguido manipular la tabla primera del informe (la del membrete en ORB, pero la tabla con datos en el que no es ORB):
Esto sería una parte de una función que se llama una vez que se abre el informe (función que 'dibuja' el membrete):
1- He cambiado las características de la tabla (oTexttable.PageDescName="False")
2- Recorro todas las filas de la tabla, y dentro de cada fila, todas las columnas (es decir, recorro todas las celdas posibles)
3- En cada celda miro si hay texto
4- Si hay texto, me echa de la función, y si no, continúa hasta la última celda
5- Si no nos ha echado, pongo la altura de la fila de la tabla a 0.2, haciéndola tan pequeña, no estorba
6- Gracias al paso 1 le pongo un párrafo antes de la tabla, con lo que ya puedo insertar texto o elementos de texto (cuadros de texto, con imágenes, por ejemplo)
Los dos ciclos los hice definidos (con origen conocido y final conocido), y aunque en el ciclo de las filas no hay problema, en el de las columnas, enfrentándonos a ORB es un problema, ya que cada fila sería un número de columnas variable. Por lo tanto tendría que hacer un ciclo indefinido (While....), pero ahora mismo estoy atascado, aunque sé que es posible, no termino de ver cómo implementarlo.
Os pongo el código de la función, y ya me direis si os parece una burrada o no (seguro que hay formas más sencillas, rápidas y elegantes, pero qué le vamos a hacer!, no doy para más!)
Se admiten sugerencias, especialmente en el tema del ciclo indefinido, ya que si no los avisos de error están garantizados.
Código: Seleccionar todo
'--------------------------------------------------------------
' Manejamos la tabla del encabezamiento para poder poner el membrete
ExisteTexto=0 ' Iniciamos la variable a 0
oTexttable=oreportdoc.Texttables(0) ' Tabla con la que trabajamos (la primera)
oreportdoc.GetCurrentController().Select(oTexttable ) ' Seleccionamos la primera tabla del informe
oTexttable.PageDescName="False" ' Hace que podamos insertar el párrafo y texto
Columnas= oTexttable.Columns.Count-1 ' Número de columnas de la tabla
Filas=oTexttable.Rows.count-1 ' Número de filas de la tabla
for i=0 to Columnas ' Ciclo que recorre todas las columnas
for z=0 to Filas ' Ciclo que recorre todas las filas
oCell= oTexttable.getCellByPosition(i,z) ' Celda inspeccionada
oText = oCell.Text ' Texto en la celda
oCurs = oText.createTextCursor() ' Cursor
oCurs.gotoEND(True) ' Selecciona todo el texto
oCurs.string ' Texto
if oCurs.string<>"" Then ' Si hay texto
ExisteTexto=1 ' La variable la ponemos con valor 1
exit for ' Nos echa del segundo ciclo
exit for ' Nos echa del primer ciclo
End if ' Acaba la condición de texto
Next z ' Va a la siguiente fila
Next i ' Va a la siguiente columna
If ExisteTexto=1 Then Exit Function ' Si la variable está en 1, nos echa de la macro
oTexttable.getRows().getByIndex(0).Height = 0.2 ' Ponemos altura mínima, así no ocupa espacio
oViewCursor = oreportdoc.CurrentController.getViewCursor() ' Cursor
v = oViewCursor.getPosition() ' Posición del cursor
s = oViewCursor.PageStyleName ' Estilo de página allí donde está el cursor
oStyle = oreportdoc.StyleFamilies.getByName("PageStyles").getByName(s) ' Nos hacemos con el control del estilo de página'
oPar = oreportdoc.createInstance("com.sun.star.text.Paragraph") ' Estructura de párrafo
oStyle.HeaderText.insertTextContentBefore ( oPar, oTexttable ) ' Insertamos un párrafo antes de la tabla
Gracias y un saludo!
