diff --git a/src/UserFnExecutor.js b/src/UserFnExecutor.js index 9e7ffaf..0f54341 100644 --- a/src/UserFnExecutor.js +++ b/src/UserFnExecutor.js @@ -10,6 +10,9 @@ module.exports = function UserFnExecutor(user_function) { var result; try { result = user_function.apply(self, self.args.map(f => f.calc())); + if (result instanceof Error) { + throw result; + } } catch (e) { const errorValue = getErrorValueByMessage(e.message) if (user_function.name === 'is_blank' diff --git a/test/5-formulajs-tests.js b/test/5-formulajs-tests.js index bfa75a6..91b4481 100644 --- a/test/5-formulajs-tests.js +++ b/test/5-formulajs-tests.js @@ -32,4 +32,15 @@ describe('formulajs integration', function() { assert.strictEqual(XLSX_CALC.xlsx_Fx.TRUNC === formulajs.TRUNC, true); }); }); + describe('UserFnExecutor()', function() { + it('handles error that is returned instead of thrown', function() { + XLSX_CALC.import_functions(formulajs); + var workbook = {}; + workbook.Sheets = {}; + workbook.Sheets.Sheet1 = {}; + workbook.Sheets.Sheet1.A2 = {f: 'AVERAGE(A1)'}; + XLSX_CALC(workbook); + assert.strictEqual(workbook.Sheets.Sheet1.A2.w, '#DIV/0!'); + }); + }) });