[Resuelto] Macro de AOO Calc no funciona en Libo Calc

Discute sobre la aplicación de hojas de cálculo
Responder
BOTUCATU
Mensajes: 34
Registrado: Vie Ene 04, 2019 9:59 pm

[Resuelto] Macro de AOO Calc no funciona en Libo Calc

Mensaje por BOTUCATU »

Buenas tardes. Tengo esta macro que funciona perfectamente en OpenOffice Calc (4.1.7) pero no así en LibreOffice Calc (7.0.0.3 (x64)).

Básicamente se trata de copiar unas fórmulas (sencillas), pegarlas en un área, y luego volver a copiar todo eso y pegar sólo los registros ya sin fórmulas en el mismo área. La macro la hice con la grabadora de macros de opencalc (y también probé grabarla con la grabadora de macros de libreOffice Calc donde obtuve el mismo código). Lo raro es que en LibreOffice Calc la macro no funciona correctamente ya que las celdas no se llenan con los datos correctos. Adjunto un archivo de muestra que se puede abrir en OpenOffice Calc (dónde apretando el "botón" funciona correctamente todo) y luego en LibreOffice Calc (dónde apretando el "botón" no funciona la macro ya que arroja un resultado equivocado)

Agradezco vuestras opiniones (y comentarios) sobre como hacer que esta macro funcione indistintamente y correctamente en ambos sistemas. Saludos.

Aquí el código de la macro

Código: Seleccionar todo

sub formular
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "filaconformula"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "areaapegarfórmula"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDF"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVD"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())


end sub
Adjuntos
Macro de Aoc loquea en Libo.ods
(25.77 KiB) Descargado 104 veces
Última edición por BOTUCATU el Sab Ago 29, 2020 10:53 pm, editado 2 veces en total.
OpenOffice 3.1 en Windows 7 SP1
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Macro de AOO Calc no funciona en Libo Calc

Mensaje por xiseme »

Versión corta:
La razón puede estar en el «Botón»
Establecer la opción «Dar foco al pulsar» a «No» en las propiedades del botón debería funcionar.

Versión extendida:
Suelo usar unas macros* (que son básicamente lo mismo que la tuya) y no me dan problemas.
He probado en ese archivo y a veces sí iba bien y a veces no. :shock:
Proceso seguido:
-Descargo el archivo
-Lo abro con LibO**
-Borro datos
-Doy al botón... ahora Sí/ ahora No ... ahora Sí/ ahora No ..Sí/No ... Sí/No ... grrrr... :evil:
-Cambio el foco del boton***
-Guardo, abro y pruebo: siempre Sí :mrgreen:
Espero que sea eso (raro me parece peeero...)

*

Código: Seleccionar todo

'---------------------------------------
Sub CopiaRango(RangOrx As String, RangoDestino As String, Optional TipoDatos As String )
'Copia de RangOrx a RangoDestino solo los tipos de datos indicados en TipoDatos (ausente → todos)
'SVDFNT  S=texto V=valores D=fecha F=formulas N=comentarios T=formatos ex.: DF= fechas + formulas
	If IsMissing(TipoDatos) Then TipoDatos = "SVDFN"	'Por defecto pega todo menos formatos
	Dim Document As Object
	Dim Dispatcher As Object

	Document = ThisComponent.CurrentController.Frame
	Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	Dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = RangOrx	'"$D$8:$J$8"
	
	Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args1())
	Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array())
	
	rem ----------------------------------------------------------------------
	Dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "ToPoint"
	args3(0).Value = RangoDestino
	
	Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args3())

	rem ----------------------------------------------------------------------
	Dim args5(5) as new com.sun.star.beans.PropertyValue
	args5(0).Name = "Flags"
	args5(0).Value = TipoDatos		'"F"
	args5(1).Name = "FormulaCommand"
	args5(1).Value = 0
	args5(2).Name = "SkipEmptyCells"
	args5(2).Value = false
	args5(3).Name = "Transpose"
	args5(3).Value = false
	args5(4).Name = "AsLink"
	args5(4).Value = false
	args5(5).Name = "MoveMode"
	args5(5).Value = 4	'4→ApacheOpenOffice 6-LibreOfficeINSERTA COL
	
	Dispatcher.executeDispatch(Document, ".uno:InsertContents", "", 0, args5())

End Sub 


Sub PegadoEspecial(RangOrx As String, RangoDestino As String, Optional TipoPegado As String )
'Para LibreOffice (sin probar en AOO)
'Copia de RangOrx a RangoDestino solo los tipos de datos indicados en TipoPegado (ausente → todo)
' S=texto V=valores F=formulas 

	Dim Document As Object
	Dim Dispatcher As Object
		
	Select Case TipoPegado
		Case "F": 	TipoPegado = ".uno:PasteOnlyFormula"	'formulas
		Case "S": 	TipoPegado = ".uno:PasteOnlyText"		'string-texto o texto dev.por formula
		Case "V": 	TipoPegado = ".uno:PasteOnlyValue"		'valores o resultados que son un valor
		'Case "SVD":	TipoPegado = ".uno:PasteOnly"			'??????? NO HACE NADA
		Case Else:	TipoPegado = ".uno:Paste"				'todo-todo
	End Select 
	
	Document = ThisComponent.CurrentController.Frame
	Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	Dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = RangOrx
	
	Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args1())
	Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array())
	
	Dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "ToPoint"
	args3(0).Value = RangoDestino
	
	Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args3())

 	Dispatcher.executeDispatch(Document, TipoPegado, "", 0, Array())

End Sub 

Sub formular

CopiaRango("filaconformula","areaapegarfórmula","F")
CopiaRango("areaapegarfórmula","areaapegarfórmula","V")

End Sub
**
Version: 7.0.1.1.0+
Build ID: <buildversion>
CPU threads: 2; OS: Linux 5.8; UI render: default; VCL: kf5

***Por ej. Menú → Ver → Barras de herramientas → Controles de formulario ...

Nota: ¿qué ha sido de la buena costumbre de no usar acentos ni caracteres especiales en nombres de rangos, hojas, etc...? :ucrazy: :mrgreen:
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
BOTUCATU
Mensajes: 34
Registrado: Vie Ene 04, 2019 9:59 pm

Re: Macro de AOO Calc no funciona en Libo Calc

Mensaje por BOTUCATU »

Muchas gracias xiseme. Por lo visto la razón estaba en el "Botón"
Procedí a darle "NO" a la configuración del foco del botón y ahí funcionó correctamente la macro luego de apretar el botón.
(Propiedades del botón => General => Dar foco al pulsar: "No" )

Ahora Funciona. Daré por resuelto el tema (pero pienso que al margen, habría que ver este inconveniente del "botón" en Libreoffice ya que parece ser un Bug vigente).
OpenOffice 3.1 en Windows 7 SP1
Responder