# Numbers, Function and 2 Values

I thought about a simple idea to use Numbers functions in a simple way.
There I could use function name or type of method name and use parameters.
In this example I use 2 parameters and 2 function name.

You need to:
From the picture below you could see how my numbers table sheet looks like.
You need that to be able to run my code.

It takes 2 values from column A and B and return C based on D
The E column is only for description of the function.
The code use a repeat loop to make it small…

The column C contains Numbers function if that was not clear.

The document from Number could be extended to more functions.

``````-- its valueFromFunction:"BITXOR" withValues:{0, 0}
-- its valueFromFunction:"BITOR" withValues:{0, 0}

on valueFromFunction:functionName withValues:{numberValue1, numberValue2}
tell application "Numbers"
tell front document
tell sheet "Function"
tell table "Function Table"
repeat with i from 1 to 2
if (value of cell ("D" & i)) is functionName then
set value of cell ("A" & i) to numberValue1
set value of cell ("B" & i) to numberValue2
set theValue to value of cell ("C" & i)
end if
end repeat
return theValue
end tell
end tell
end tell
end tell
end valueFromFunction:withValues:
``````

Here is a updated version.

``````-- its valueFromFunction:"BITAND" withValues:{1, 1}
-- its valueFromFunction:"BITOR" withValues:{1, 1}
-- its valueFromFunction:"BITXOR" withValues:{0, 1}
-- its valueFromFunction:"BITLSHIFT" withValues:{12, 3}
-- its valueFromFunction:"BITRSHIFT" withValues:{12, 3}
-- its valueFromFunction:"BIN2DEC" withValues:{"100111", 3}
-- its valueFromFunction:"BASETONUM" withValues:{"3F", 16}
-- its valueFromFunction:"BESSELJ" withValues:{25, 3}
-- its valueFromFunction:"BESSELY" withValues:{25, 3}
-- its valueFromFunction:"BIN2OCT" withValues:{"100111", 3} -- AppleScript convert octal to decimal
-- its valueFromFunction:"BIN2HEX" withValues:{"100111", 3} -- AppleScript convert hex to decimal

on valueFromFunction:functionName withValues:inputValues
set theValue to missing value

set inputValues to inputValues
set countInput to count inputValues

-- if (item 1 of inputValues)'s class is string then
-- return true
-- end if

tell application "Numbers"
tell front document
tell sheet "Function"
tell table "Function Table"
repeat with i from 1 to (count row) -- count the row in the table
if (value of cell ("D" & i) is functionName) then

-- inputValues of 1
if (countInput) = 1 then
set value of cell ("A" & i) to (item 1 of inputValues)
log value of cell ("A" & i) as string
set theValue to value of cell ("C" & i)
log value of cell ("C" & i) as string
end if

-- inputValues of 2
if (countInput = 2) then
set value of cell ("A" & i) to (item 1 of inputValues)
log value of cell ("A" & i) as string
set value of cell ("B" & i) to (item 2 of inputValues)
log value of cell ("B" & i) as string
set theValue to value of cell ("C" & i)
log value of cell ("C" & i) as string
end if
end if
end repeat
-- Return value
return theValue
end tell
end tell
end tell
end tell
end valueFromFunction:withValues:
``````

Here is screenshot of the table in Numbers.

When you exchange data from a scriptable application you also realize its very slow 16 return values takes 0,6 seconds to execute.
On other hand, we also set 16x2=32 new values.

But its little fun to see Numbers update… (32 + 16) cells