[RESUELTO]leer contenido de una tabla

Discute sobre la aplicación de presentaciones
Responder
JATMORA
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

[RESUELTO]leer contenido de una tabla

Mensaje por JATMORA »

Por qué una macro que funciona perfectamente en write no lo hace en Impress?
Concretaré, la siguiente macro funciona perfectamente en Write

Código: Seleccionar todo

Sub ObtieneRuta
rem obtiene la ruta de la tabla
Dim oTablas As Object
Dim oTabla As Object
Dim oCelda As Object
Dim oCursor As Object
Dim oVCursor As Object
Dim valor 

   'Todas las tablas del documento
   Set oTablas = ThisComponent.getTextTables()
   'La tabla que quieras
   Set oTabla = oTablas.getByName("Tabla1")
   'La celda que quieras
   oCelda = oTabla.getCellByName("A1")
   rem valor = oCelda.getText()
   Ruta = oCelda.getString()
	MsgBox oCelda.getString()
	Msgbox Ruta
End sub
Sin embargo, habiendo definido la misma tabla en Impress, da error en:

Código: Seleccionar todo

       Set oTablas = ThisComponent.getTextTables()
Me imagino que cambia la gestión de tablas que hace Impress que la que hace Write. ¿Alguien puede ayudarme a encontrar alguna solución? ¿Si la hay?
El error que muestra es:
Error en tiempo de ejecución de BASIC
Propiedad o método no econtrados: getTextTables()
Última edición por mauricio el Jue Feb 21, 2013 12:21 am, editado 2 veces en total.
Razón: Marcar icono de RESUELTO
OppenOffice 3.4.1 en Windows XP
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: leer contenido de una tabla

Mensaje por Cascabel »

Porque un documento de Impress no es un documento de Writer.

Código: Seleccionar todo

oDP=ThisComponent.DrawPages.GetByIndex(0)'Página 0
oShape=oDP.GetByIndex(2)'Forma 2 (mi tabla) podemos movernos desde 0 hasta oDP.Count-1
'Si es una tabla, entonces oShape.ShapeType="com.sun.star.drawing.TableShape"
oTabla=oShape.Model
'etcétera
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
JATMORA
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: leer contenido de una tabla

Mensaje por JATMORA »

Cascabel escribió:Porque un documento de Impress no es un documento de Writer.

Código: Seleccionar todo

oDP=ThisComponent.DrawPages.GetByIndex(0)'Página 0
oShape=oDP.GetByIndex(2)'Forma 2 (mi tabla) podemos movernos desde 0 hasta oDP.Count-1
'Si es una tabla, entonces oShape.ShapeType="com.sun.star.drawing.TableShape"
oTabla=oShape.Model
'etcétera
Gracias Cascabel por tu respuesta y solución.
Quizás has supuesto que yo tenía un cierto nivel en el manejo de las macros y del OoBasic, no es así, soy un recien llegado y con el apoyo de todos y tirando del libro de Mauricio voy consiguiendo lo que pretendo.
La verdad es que he intentado probar lo que me envías y , entiendo que (oShape.ShapeType="com.sun.star.drawing.TableShape") hay que ponerlo como una línea de la macro ya que sí es una tabla lo que pretendo manejar. Pues bien, me da un error en el que me indica error de lectura, esta propiedad es de solo lectura.
La tabla la tengo en la segunda diapositiva por lo que he cambiado en oDP=ThisComponent.DrawPages.GetByIndex(0) el 0 por un 1. Sigue el mismo error.
Si tienes tiempo y me puedes dar alguna indicación más...., si no no hay problema, como lo que quiero me funciona desde Writer, lo hará por ahí, aunque desde impress se puede conseguir mayor vistosidad. Pasados dos días lo pondré como resuelto para no incordiar a nadie más

Un saludo y me reitero, gracias
OppenOffice 3.4.1 en Windows XP
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: leer contenido de una tabla

Mensaje por Cascabel »

Esa línea era un comentario. Si sabes de antemano qué índice tiene la forma de tu tabla, pues usar GetByIndex(x) y ya está. Si no lo sabes, puedes recorrer las formas de la página de una en una en un bucle.
De nuevo, si sabes el nombre de la tabla, puedes buscarlo (no hay un GetByName en este caso):

Código: Seleccionar todo

For n=0 To oDP.Count-1
	oShape=oDP.GetByIndex(n)
	If oShape.Name="MiTabla" Then
		oTabla=oShape.Model
		'lo que sea que quieras hacer con la tabla llamada "MiTabla"
	End If
Next
El comentario era por si querías recorrer todas las formas que sean tablas, así:

Código: Seleccionar todo

For n=0 To oDP.Count-1
	oShape=oDP.GetByIndex(n)
	If oShape.ShapeType="com.sun.star.drawing.TableShape" Then
		oTabla=oShape.Model
		'lo que sea que quieras hacer con todas las tablas
	End If
Next
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
JATMORA
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: leer contenido de una tabla

Mensaje por JATMORA »

Hola de nuevo.
Cascabel eres un maestro, me descubro tanto por tu preparación como por tu disposición para ayudar a los que nos acercamos al foro tratando de atender y encontrar soluciones.

Una vez localizada la tabla lo que intento es leer una casilla en concreto, por ejemplo la A1.
Como lo único que sabía hacer era con las tablas de Writer y con ellas utilizaba:
oCelda = oTabla.getCellByName("A1")
Intento hacer lo mismo aquí, pero no funciona, indica "propiedad o método no encontrado"; he intentado también hacerlo por ByIndex y ocurre igual.
¿Hay alguna forma de acceder al contenido de una celda de la tabla?

Un saludo, y gracias
OppenOffice 3.4.1 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: leer contenido de una tabla

Mensaje por mauricio »

Tienes que usar el modelo del objeto:

Código: Seleccionar todo

	oDP = ThisComponent.DrawPages.GetByIndex(0)
	oTabla = oDP.GetByIndex(0).Model
	oCelda = oTabla.getCellByPosition(0, 0)
	MsgBox oCelda.getString()
No se por que no funciona getCellRangeByName para acceder con A1, pero te recomiendo mucho usar getCellByPosition es mucho más versatil...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
JATMORA
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: [RESUELTO]leer contenido de una tabla

Mensaje por JATMORA »

Una vez más gracias,
Resuelto el problema y sobre todo, una lección más para ir avanzando.
Poco a poco ya consigo "pegar trocitos" para ir apañando mis macros, sé que eso no es programar, ni mucho menos, eso queda muy lejos.

Mauricio, en este caso la clave estaba en:
oTabla = oDP.GetByIndex(0).Model me faltaba .Model

Un saludo
OppenOffice 3.4.1 en Windows XP
Responder