[Resuelto] Modulo selección de texto para python

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Satsuki
Mensajes: 32
Registrado: Mar Sep 15, 2009 5:07 pm

[Resuelto] Modulo selección de texto para python

Mensaje por Satsuki »

Para las macros de openoffice hay diversas maneras de que a la hora de seleccionar el texto, el programa detecte este texto y lo almacene para luego realizar ciertas tareas con el conjunto de texto seleccionado. ¿Se podría hacer lo mismo con python?

Gracias
Última edición por Satsuki el Mié Nov 11, 2009 4:07 pm, editado 1 vez en total.
OpenOffice 3.1.0 en Ubuntu 8.04
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Modulo selección de texto para python

Mensaje por FJCC-ES »

Este código (en Python) escoge el primer texto seleccionado y cambia su propiedad CharWeight.

Código: Seleccionar todo

import uno
def SelectText():
  oDoc = XSCRIPTCONTEXT.getDocument()
  Selection = oDoc.getCurrentSelection()
  item0 = Selection.getByIndex(0)
  item0.setPropertyValue('CharWeight', 150)
 

g_exportedScripts = SelectText, 
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Modulo selección de texto para python

Mensaje por mauricio »

Hola...

El código del compañero FJCC-ES, es correcto, solo te complemento que puedes poner el archivo NOMBRE.py en tu carpeta de usuario para que tengas la macro en el archivo Mis Macros

/home/USER/.openoffice.org/3/user/Scripts/python

también, debes de llamar la macro desde un documento de texto, si lo haces desde otro tipo de documento, te dará un error.

También puede probar esta segunda forma:

Código: Seleccionar todo

# Retornamos la selección actual
import uno

def SeleccionActual( ):
  model = XSCRIPTCONTEXT.getDocument()
  oCC = model.getCurrentController()	
  oSels = oCC.getSelection()            
  oSel = oSels.getByIndex(0)
  strTmp = oSel.getString()
# Desde aquí puedes omitir, pues ya tienes la selección 
# en strTmp la cual retornamos en la función
  ctx = uno.getComponentContext()
  smgr = ctx.ServiceManager
  desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
  doc = desktop.loadComponentFromURL( "private:factory/swriter","_blank", 0, () ) 
  text = doc.Text
  cursor = text.createTextCursor()
  text.insertString( cursor, strTmp, 0 )
  return strTmp
Estimado FJCC-ES, ¿sabrás por que nuestros códigos funcionan cuando hay solo una selección y no cuando hay varias selecciones?, supondría que con oSel = oSels.getByIndex(0) o item0 = Selection.getByIndex(0), debería tomar la primer selección, pero no es así...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Modulo selección de texto para python

Mensaje por FJCC-ES »

Estimado Mauricio,
Nuestros códigos funcionan cuando hay varias selecciones pero el objecto Selection (o oSels) contiene un elemento más, aparte de los textos seleccionados. Por ejemplo, si selecciono dos textos Selection.Count = 3! El tercero elemento (que tiene indice 0) es la posición del Cursor. No sé por qué cuando selecciono un texto Selection.Count = 1. Descubrí esto usando xray.
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Modulo selección de texto para python

Mensaje por mauricio »

Muchas gracias, como decía Doña Sor Juana (de Asbaje), -ahora ignoro un poco menos-...

Un abrazo
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder