README
xllcall
Invoke XLL functions from Node.
Installation
npm install xllcall
or, to force 32 bit build for x86 XLLs (requires 32 bit Node)
npm install xllcall --arch=ia32
Running from Visual Studio Code (to be able to debug)
Run server.js, that will start a HTTP server that can receive requests.
If running a 64 bit system and intending to use 32 bit XLLs, then you must modify you launch.json
.
Specify a 32 bit version of node.exe in runtimeExecutable
:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"runtimeExecutable": "C:\\node-v8.9.4-win-x86\\node.exe",
"name": "Launch Program",
"program": "${file}"
}
]
}
API Basic use
var xllcall = require('xllcall');
// one can also call a function explicitly specifying the signature
xllcall.xllcall_ffi("myxll.xll", "myfct", [ "xloper", "const char*", "xloper", "double"], [ "abc", [[11 12],[21,22]], 1.234 ]);
This based on a core function xllcall_ffi
which invokes a XLL function knowiing its signature:
xllcall_ffi(xll_name, fct_name, [ return_type, arg_types, ...], [ arg_values, ... ])
See index.js
and server.js
for a more advance use, fetching list of exported functions, creating Javascript stub for them and starting a HTTP server for RPC.
Tested configuration
Excel DNA 0.34.6 with Node 32 bit and using Excel 97 (work needed to make it work with 64 bit, using Excel 2007 API)
Conversion Rules between JS and XLL
Argument conversion depends on the expected type for the argument:
string arguments:
undefined
andnull
become empty strings- numbers and booleans become their text representation
- string are assumed to contain latin1 only characters (for XLL using XL97 API) or UCS2 only characters (for XLL using XL2007 API)
- array: first value is used (top left value for 2D array)
number arguments:
undefined
andnull
become empty strings- boolean :
true
become1
, andfalse
becomes0
- array: first value is used (top left value for 2D array)
Boolean arguments
undefined
andnull
become false- non-zero numbers become
true
, zeros becomefalse
Range arguments:
- one dimensionnal array becomes column ranges