Every spreadsheet document also inherits an "XCalculatable" interface.
This interface contains the "isAutomaticCalculationEnabled" function to
get the state of the automatic calculateion and the
"enableAutomaticCalculation" method to turn it on and off.
For further details see http://wi.wu-wien.ac.at/rgf/diplomarbeiten/BakkStuff/2008/200809_Frysak/200809_Frysak_Automating_OOo_ooRexx_Nutshells.pdf.
-- try to get a script context, will be .nil, if script was not invoked by OOo
x_ScriptContext = uno.getScriptContext()
if (x_ScriptContext <> .nil) then
do
-- invoked by OOo as a macro
-- get context
x_ComponentContext = x_ScriptContext~getComponentContext
-- get desktop (an XDesktop)
x_Desktop = x_ScriptContext~getDesktop
-- get current document
x_Document = x_ScriptContext~getDocument
end
else
do
-- called from outside of OOo, create a connection
-- connect to Open Office and get component context
x_ComponentContext = UNO.connect()
-- create a desktop service and its interface
service = "{%see com.sun.star.frame.Desktop}"
s_Desktop = x_ComponentContext~getServiceManager~{%see com.sun.star.lang.XMultiServiceFactory%XMultiServiceFactory}~createInstance(service)
x_Desktop = s_Desktop~{%see com.sun.star.frame.XDesktop%XDesktop}
-- get the last active document
x_Document = x_Desktop~getCurrentComponent()
end
-- generate interface to automatic calculation entry
x_Calculatable = x_Document~{%see com.sun.star.sheet.XCalculatable%XCalculatable}
-- if Calculation is enabled - disable it, else enable it
if x_Calculatable~isAutomaticCalculationEnabled()
then x_Calculatable~enableAutomaticCalculation(.false)
else x_Calculatable~enableAutomaticCalculation(.true)
::requires UNO.CLS