[RESUELTO] Acceder a objectos de texto incrustados en Calc

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
ifanlo
Mensajes: 420
Registrado: Lun Mar 30, 2009 10:32 am

[RESUELTO] Acceder a objectos de texto incrustados en Calc

Mensaje por ifanlo »

Hola!

Primero, una explicación del problema.

Cuando insertamos un objeto OLE de texto en Calc, el objeto queda desplazado por efecto de los márgenes de página del documento. Esto ocurre también al abrir documentos de Excel con textos de Word incrustados.

La solución que encontré es entrar en el texto incrustado y en el formato de página, dejar los márgenes a cero y el ancho de página ajustarlo al ancho del contenedor.

En las imágenes que siguen se puede ver gráficamente:
texto-incrustado-1.png
texto-incrustado-2.png
texto-incrustado-3.png
Ahora me encuentro con un organismo en migración con un departamento con abundantes hojas de cálculo donde cada uno de los documentos contiene un par de docenas de incrustaciones de este estilo.

Estos documentos deben ser manipulados delante del público y resulta absolutamente tediosa su resolución. Entonces, me he propuesto elaborar una macro que automatice la "reparación".

Entonces, mi reto es como acceder por programación a los objetos incrustados en el documento, comprobar si son objetos de texto, y en su caso, editar el formato de página del contenido.

No estoy teniendo ningún éxito en la búsqueda de lo primero: ¿Cómo acceder desde el documento a sus objetos OLE?

Gracias por vuestra ayuda,
Última edición por mauricio el Mar Feb 03, 2015 2:50 am, editado 2 veces en total.
Razón: Marcar icono de resuelto
Ismael Fanlo

*ifanlo - soluciones libres* http://ifanlo.com
- Consultoría en migraciones a software libre
- Soporte ofimático online
- E-learning
- Formación informática presencial
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Acceder a objectos de texto incrustados en Calc

Mensaje por FJCC-ES »

Código: Seleccionar todo

oSheet = ThisComponent.Sheets.getByName("Sheet1")
oDP = oSheet.getDrawPage()
for i = 0 to oDP.Count - 1
	oObj = oDP.getByIndex(i)
	If oObj.supportsService("com.sun.star.drawing.OLE2Shape") then
		oEmbObj = oObj.EmbeddedObject
		Comp  = oEmbObj.getComponent()
		If Comp.supportsService("com.sun.star.text.TextDocument") then
			StyleFam = Comp.StyleFamilies
			oPageStyles = StyleFam.getByName("PageStyles")
			oStd = oPageStyles.getByName("Standard")
			oStd.LeftMargin=0
			oStd.RightMargin=0
		End If
	End If
next i
Avatar de Usuario
ifanlo
Mensajes: 420
Registrado: Lun Mar 30, 2009 10:32 am

Re: Acceder a objectos de texto incrustados en Calc

Mensaje por ifanlo »

Muchísimas gracias, FJCC-ES!

Lo del getDrawPage() no se me abría ocurrido en la vida... :-D

Bueno, doy el tema por resuelto y analizaré el código que me muestras.

Gracias de nuevo.
Ismael Fanlo

*ifanlo - soluciones libres* http://ifanlo.com
- Consultoría en migraciones a software libre
- Soporte ofimático online
- E-learning
- Formación informática presencial
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Acceder a objectos de texto incrustados en Calc

Mensaje por mauricio »

ifanlo escribió:Lo del getDrawPage() no se me abría ocurrido en la vida... :-D
es que no has leido mi libro... :lol:
______________________________________________
"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
ifanlo
Mensajes: 420
Registrado: Lun Mar 30, 2009 10:32 am

Re: [RESUELTO] Acceder a objectos de texto incrustados en Ca

Mensaje por ifanlo »

Sí que lo he leído, Mauricio, pero estoy muy desentrenado... y buscando no supe encontrar. :-(

Hostias! ese "abría" que escribí antes, ¡que dolor de ojos! (que viene de haber, que no de abrir) :knock: :knock:

Abrazos!
Ismael Fanlo

*ifanlo - soluciones libres* http://ifanlo.com
- Consultoría en migraciones a software libre
- Soporte ofimático online
- E-learning
- Formación informática presencial
Responder