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