[RESUELTO]leer contenido de una tabla

Discute sobre la aplicación de presentaciones

[RESUELTO]leer contenido de una tabla

Notapor JATMORA » Dom Feb 17, 2013 12:06 am

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
       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
JATMORA
 
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: leer contenido de una tabla

Notapor Cascabel » Mar Feb 19, 2013 8:10 pm

Porque un documento de Impress no es un documento de Writer.
Código: Seleccionar todo   Expandir vistaContraer vista
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
Cascabel
 
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: leer contenido de una tabla

Notapor JATMORA » Mié Feb 20, 2013 7:16 pm

Cascabel escribió:Porque un documento de Impress no es un documento de Writer.
Código: Seleccionar todo   Expandir vistaContraer vista
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
JATMORA
 
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: leer contenido de una tabla

Notapor Cascabel » Mié Feb 20, 2013 7:41 pm

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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
Cascabel
 
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: leer contenido de una tabla

Notapor JATMORA » Mié Feb 20, 2013 9:04 pm

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
JATMORA
 
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm

Re: leer contenido de una tabla

Notapor mauricio » Mié Feb 20, 2013 11:26 pm

Tienes que usar el modelo del objeto:
Código: Seleccionar todo   Expandir vistaContraer vista
   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
Avatar de Usuario
mauricio
 
Mensajes: 5929
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO]leer contenido de una tabla

Notapor JATMORA » Mié Feb 20, 2013 11:52 pm

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
JATMORA
 
Mensajes: 23
Registrado: Mar Ene 08, 2013 10:47 pm


Volver a Impress

¿Quién está conectado?

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