Utilizar una función de Calc desde una macro

OpenOffice Calc integra muchas funciones útiles para nuestras macros. Con este sencillo truco puedes utilizarlas para tus propósitos fácilmente.

Este truco lo he obtenido a partir de un post de Mauricio en el Foro Oficial en Español de OpenOffice.
Option Explicit

Sub PruebaFuncionCalc
	Dim dSuma As Double

  ' Podemos utilizar funciones de Calc desde una macro de dos modos
  ' Modo 1: Poniendo la formula en una celda, obtiendo su valor
	Dim oHoja As Object
	oHoja = ThisComponent.CurrentController.ActiveSheet	
	oHoja.getCellRangeByName("A13").Formula = "=SUM(A1:A12)"
	dSuma = oHoja.getCellRangeByName("A13").Value
	oHoja.getCellRangeByName("A13").String = ""

  ' Modo 2: Aplicando la funcion suma directamente
	dSuma = FuncionCalc( "SUM", Array(oHoja.getCellRangeByName("A1:A12")) )
 
End Sub

Function FuncionCalc( Nombre As String, Datos() )
  ' Esta función permite llamar a una función de Calc por su nombre en Inglés	
	Dim oSFA As Object
	oSFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	FuncionCalc = oSFA.callFunction( Nombre, Datos() )
End Function

1 comentario

Comentario De: Joey [Visitante]

Hola
Me ha parecido muy interesante poder insertar las funciones nativas de CALC dentro del macro de OOo basic. Alctualmente estoy intentando insertar otra funcion que no sea SUM y he utilizado el Modo 2 de su explicacion anterior y al tener varias variables, en mi función, las he separado con comas, pero luego el resultado sale siempre 0. No me sale error, y la hoja activa es la correcta. Alguien me puede ayudar. Gracias !!!

Function FuncionCalc( Nombre As String, Datos() )
' Esta función permite llamar a una función de Calc por su nombre en Inglés
Dim oSFA As Object
oSFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
FuncionCalc = oSFA.callFunction( Nombre, Datos() )
End Function

Sub testNativFunctions
Dim dSuma As Double
Dim oHoja As Object
oHoja = ThisComponent.CurrentController.ActiveSheet
dSuma = FuncionCalc( "MATCH", Array("Zona",oHoja.getCellRangeByName("A1:A12"),0) )
Msgbox dSuma
End sub


Form is loading...