forked from fabiooshiro/xlsx-calc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xlsx-calc.js.map
1 lines (1 loc) · 106 KB
/
xlsx-calc.js.map
1
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/RawValue.js","webpack:///./src/int_2_col_str.js","webpack:///./src/col_str_2_int.js","webpack:///./src/Range.js","webpack:///./src/errors.js","webpack:///./src/getSanitizedSheetName.js","webpack:///./src/str_2_val.js","webpack:///./src/RefValue.js","webpack:///./src/find_all_cells_with_formulas.js","webpack:///./src/index.js","webpack:///./src/exec_formula.js","webpack:///./src/expression_builder.js","webpack:///./src/Exp.js","webpack:///./src/LazyValue.js","webpack:///./src/UserFnExecutor.js","webpack:///./src/UserRawFnExecutor.js","webpack:///./src/formulas.js","webpack:///./src/utils.js","webpack:///./src/formulas-raw.js","webpack:///./src/Calculator.js"],"names":["root","factory","exports","module","define","amd","a","i","this","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setValue","v","calc","modulo","dividend","columnName","guard","String","fromCharCode","col_str","colstr","replace","length","Math","pow","charCodeAt","col_str_2_int","int_2_col_str","getSanitizedSheetName","str_expression","formula","range_expression","sheet_name","sheet","indexOf","aux","split","wb","Sheets","max_row","arr","min_row","parseInt","str_max_row","min_col","max_col","matrix","row","push","j","cell_name","cell_full_name","formula_ref","status","exec_formula","cell","f","includes","Error","nil","div0","ref","num","na","error","data","ERROR_MESSAGE_TO_VALUE","getErrorValueByMessage","errorMessage","quotedMatch","match","RawValue","RefValue","LazyValue","Range","definedNames","getDefinedName","buffer","Workbook","Names","keys","values","forEach","Name","Ref","str_2_val","isNaN","trim","inner","substr","self","parseRef","resolved_ref","ref_cell","console","log","w","cells","find_all_cells_with_formulas","Calculator","mymodule","workbook","options","formulas","continue_after_error","log_error","calculator","set_fx","exec_fx","import_functions","import_raw_functions","xlsx_Fx","localizeFunctions","XLSX_CALC","expression_builder","xlsx_raw_Fx","functions","opts","formulajs","prefix","obj","override","my_assign","dest","source","JSON","parse","stringify","k","build_expression","update_cell_value","fn","args","apply","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","exp_obj","was_string","fn_stack","exp","string","char","state","start","single_quote","stack","trim_buffer","special","special_raw","ini_parentheses","pop","add_operation","exp_id","last_arg","applyCellError","cellValueOrError","errorValue","message","undefined","applyCellValue","newCellType","getCellType","cellValue","isEmpty","checkVariable","getCurrentCellIndex","exec","op","splice","b","Array","isArray","e","id","array","colAndRow","colNumber","rowNumber","newCellNumber","newCellValue","destinationCellName","concat","Date","exec_minus","getTime","toLowerCase","user_function","result","map","utils","floor","abs","sqrt","return_index","range_lookup","val","max","arguments","arg","col","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","guest","NPV","normsInv","getArrayOfNumbers","_mean","reduce","mean","dev","itm","avg","E","var_p","covariance_p","is_blank","needle","table","index","exactmatch","searchingFor","row_num","column_num","lookupValue","matchType","match_exactly_string","match_exactly_non_string","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","consistentSizeRanges","matrixArray","getRowCount","getColCount","rowCount","colCount","product","_i","_ij","arrays","x","today","setHours","hours","minutes","seconds","date","getDate","day","getMonth","month","getFullYear","year","text","number","substring","cond","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","sa","sb","elementToSum","sumResult","slice","elt","toString","option","old_text","new_text","occurrence","RegExp","significance","ceil","someFormula","include","if_empty","arrayWidth","arrayHeight","includeWidth","includeHeight","bool","parseBool","addEmptyValuesToArray","indexValue","idx","average","mu","sigma","Infinity","requiredLength","requiredHeight","up","toUpperCase","cell_ref","rows","columns","height","width","ref_value","parsed_ref","end_range_col","onerrorvalue","condition","_then","_else","expressionWithRange","colRow","matrixRow","destinationColumn","destinationRow","expressions","variables","calcNames","var_name","variable","setVarOfExpression","vars","item","getRef","ref_name"],"mappings":"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","file":"xlsx-calc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 9);\n","\"use strict\";\n\nmodule.exports = function RawValue(value) {\n this.setValue = function(v) {\n value = v;\n };\n this.calc = function() {\n return value;\n };\n};\n","\"use strict\";\n\nmodule.exports = function int_2_col_str(n) {\n var dividend = n + 1;\n var columnName = '';\n var modulo;\n var guard = 10;\n while (dividend > 0 && guard--) {\n modulo = (dividend - 1) % 26;\n columnName = String.fromCharCode(modulo + 65) + columnName;\n dividend = (dividend - modulo - 1) / 26;\n }\n return columnName;\n};","\"use strict\";\n\nmodule.exports = function col_str_2_int(col_str) {\n var r = 0;\n var colstr = col_str.replace(/[0-9]+$/, '');\n for (var i = colstr.length; i--;) {\n r += Math.pow(26, colstr.length - i - 1) * (colstr.charCodeAt(i) - 64);\n }\n return r - 1;\n};","\"use strict\";\n\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function Range(str_expression, formula) {\n this.calc = function() {\n var range_expression, sheet_name, sheet;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n range_expression = aux[1];\n }\n else {\n sheet_name = formula.sheet_name;\n range_expression = str_expression;\n }\n sheet = formula.wb.Sheets[sheet_name];\n var arr = range_expression.split(':');\n var min_row = parseInt(arr[0].replace(/^[A-Z]+/, ''), 10) || 0;\n var str_max_row = arr[1].replace(/^[A-Z]+/, '');\n var max_row;\n if (str_max_row === '' && sheet['!ref']) {\n str_max_row = sheet['!ref'].split(':')[1].replace(/^[A-Z]+/, '');\n }\n // the max is 1048576, but TLE\n max_row = parseInt(str_max_row == '' ? '500000' : str_max_row, 10);\n var min_col = col_str_2_int(arr[0]);\n var max_col = col_str_2_int(arr[1]);\n var matrix = [];\n for (var i = min_row; i <= max_row; i++) {\n var row = [];\n matrix.push(row);\n for (var j = min_col; j <= max_col; j++) {\n var cell_name = int_2_col_str(j) + i;\n var cell_full_name = sheet_name + '!' + cell_name;\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n } else if (formula_ref.status === 'working') {\n if (formula_ref.cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n }\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else if (sheet[cell_name]) {\n if (sheet[cell_name].t === 'e') {\n row.push(sheet[cell_name]);\n }\n else {\n row.push(sheet[cell_name].v);\n }\n }\n else {\n row.push(null);\n }\n }\n }\n return matrix;\n };\n};\n","const nil = new Error('#NULL!')\nconst div0 = new Error('#DIV/0!')\nconst value = new Error('#VALUE!')\nconst ref = new Error('#REF!')\nconst name = new Error('#NAME?')\nconst num = new Error('#NUM!')\nconst na = new Error('#N/A')\nconst error = new Error('#ERROR!')\nconst data = new Error('#GETTING_DATA')\nconst calc = new Error('#CALC!')\n\nconst ERROR_MESSAGE_TO_VALUE = {\n '#NULL!': 0x00,\n '#DIV/0!': 0x07,\n '#VALUE!': 0x0F,\n '#REF!': 0x17,\n '#NAME?': 0x1D,\n '#NUM!': 0x24,\n '#N/A': 0x2A,\n '#GETTING_DATA': 0x2B,\n '#CALC!': 0x00, // todo: set the correct error code\n};\n\nfunction getErrorValueByMessage(errorMessage) {\n return ERROR_MESSAGE_TO_VALUE[errorMessage]\n}\n\nmodule.exports = {\n nil,\n div0,\n value,\n ref,\n name,\n num,\n na,\n error,\n data,\n calc,\n getErrorValueByMessage,\n}","\"use strict\";\n\nmodule.exports = function getSanitizedSheetName(sheet_name) {\n var quotedMatch = sheet_name.match(/^'(.*)'$/);\n if (quotedMatch) {\n return quotedMatch[1];\n }\n else {\n return sheet_name;\n }\n};\n","const RawValue = require('./RawValue.js');\nconst RefValue = require('./RefValue.js');\nconst LazyValue = require('./LazyValue.js');\nconst Range = require('./Range.js');\n\n// this is used to _cache_ range names so that it doesn't need to be queried\n// every time a range is used\nlet definedNames, wb;\nfunction getDefinedName(buffer, formula) {\n if (!(formula.wb.Workbook && formula.wb.Workbook.Names)) {\n return null;\n }\n if (wb !== formula.wb) {\n wb = formula.wb;\n definedNames = null;\n return getDefinedName(buffer, formula);\n }\n if (definedNames) {\n return definedNames[buffer];\n }\n const keys = Object.values(formula.wb.Workbook.Names);\n if (keys.length === 0) {\n return;\n }\n definedNames = {};\n keys.forEach(({ Name, Ref }) => {\n if (!Name.includes('.')) {\n definedNames[Name] = Ref;\n }\n });\n\n return getDefinedName(buffer, formula);\n}\n\nmodule.exports = function str_2_val(buffer, formula) {\n if (!isNaN(buffer)) {\n return new RawValue(+buffer);\n }\n if (buffer === 'TRUE') {\n return new RawValue(1);\n }\n if (typeof buffer !== 'string') {\n return buffer;\n }\n\n buffer = buffer.trim().replace(/\\$/g, '')\n\n if (buffer.match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+:[A-Z]+$/)) {\n return new Range(buffer, formula);\n }\n if (buffer.match(/^[A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/^[^!]+![A-Z]+[0-9]+$/)) {\n return new RefValue(buffer, formula);\n }\n if (buffer.match(/%$/)) {\n var inner = str_2_val(buffer.substr(0, buffer.length-1), formula)\n return new LazyValue(() => inner.calc() / 100)\n }\n if (getDefinedName(buffer, formula)) {\n return str_2_val(getDefinedName(buffer, formula), formula);\n }\n return buffer;\n};\n","\"use strict\";\n\nconst getSanitizedSheetName = require('./getSanitizedSheetName.js');\n\nmodule.exports = function RefValue(str_expression, formula) {\n var self = this;\n this.name = 'RefValue';\n this.str_expression = str_expression;\n this.formula = formula;\n\n self.parseRef = function() {\n var sheet, sheet_name, cell_name, cell_full_name;\n if (str_expression.indexOf('!') != -1) {\n var aux = str_expression.split('!');\n sheet_name = getSanitizedSheetName(aux[0]);\n sheet = formula.wb.Sheets[sheet_name];\n cell_name = aux[1];\n }\n else {\n sheet = formula.sheet;\n sheet_name = formula.sheet_name;\n cell_name = str_expression;\n }\n if (!sheet) {\n throw Error(\"Sheet \" + sheet_name + \" not found.\");\n }\n cell_full_name = sheet_name + '!' + cell_name;\n return {\n sheet: sheet,\n sheet_name: sheet_name,\n cell_name: cell_name,\n cell_full_name: cell_full_name\n };\n };\n\n this.calc = function() {\n var resolved_ref = self.parseRef();\n var sheet = resolved_ref.sheet;\n var cell_name = resolved_ref.cell_name;\n var cell_full_name = resolved_ref.cell_full_name;\n var ref_cell = sheet[cell_name];\n if (!ref_cell) {\n return null;\n }\n var formula_ref = formula.formula_ref[cell_full_name];\n if (formula_ref) {\n if (formula_ref.status === 'new') {\n formula.exec_formula(formula_ref);\n if (ref_cell.t === 'e') {\n console.log('ref is an error with new formula', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n else if (formula_ref.status === 'working') {\n if (ref_cell.f.includes(formula.name)) {\n throw new Error('Circular ref');\n }\n formula.exec_formula(formula_ref);\n return this.calc();\n }\n else if (formula_ref.status === 'done') {\n if (ref_cell.t === 'e') {\n console.log('ref is an error after formula eval', cell_full_name, ref_cell.w);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n }\n else {\n if (ref_cell.t === 'e') {\n console.log('ref is an error with no formula', cell_name);\n throw new Error(ref_cell.w);\n }\n return ref_cell.v;\n }\n };\n};\n","\"use strict\";\n\nmodule.exports = function find_all_cells_with_formulas(wb, exec_formula) {\n let formula_ref = {};\n let cells = [];\n for (let sheet_name in wb.Sheets) {\n let sheet = wb.Sheets[sheet_name];\n for (let cell_name in sheet) {\n if (sheet[cell_name] && sheet[cell_name].f) {\n let formula = formula_ref[sheet_name + '!' + cell_name] = {\n formula_ref: formula_ref,\n wb: wb,\n sheet: sheet,\n sheet_name: sheet_name,\n cell: sheet[cell_name],\n name: cell_name,\n status: 'new',\n exec_formula: exec_formula\n };\n cells.push(formula);\n }\n }\n }\n return cells;\n};\n","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst exec_formula = require('./exec_formula.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\nconst Calculator = require('./Calculator.js');\n\nvar mymodule = function(workbook, options) {\n var formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (var i = formulas.length - 1; i >= 0; i--) {\n try {\n exec_formula(formulas[i]);\n } catch (error) {\n if (!options || !options.continue_after_error) {\n throw error\n }\n if (options.log_error) {\n console.log('error executing formula', 'sheet', formulas[i].sheet_name, 'cell', formulas[i].name, error)\n }\n }\n }\n};\n\nmymodule.calculator = function calculator(workbook) {\n return new Calculator(workbook, exec_formula);\n};\n\nmymodule.set_fx = exec_formula.set_fx;\nmymodule.exec_fx = exec_formula.exec_fx;\nmymodule.col_str_2_int = col_str_2_int;\nmymodule.int_2_col_str = int_2_col_str;\nmymodule.import_functions = exec_formula.import_functions;\nmymodule.import_raw_functions = exec_formula.import_raw_functions;\nmymodule.xlsx_Fx = exec_formula.xlsx_Fx;\nmymodule.localizeFunctions = exec_formula.localizeFunctions;\n\nmymodule.XLSX_CALC = mymodule\n\nmodule.exports = mymodule;\n","\"use strict\";\n\nconst expression_builder = require('./expression_builder.js');\n\nlet xlsx_Fx = {};\nlet xlsx_raw_Fx = {};\n\nimport_functions(require('./formulas.js'));\nimport_raw_functions(require('./formulas-raw.js'));\n\nfunction import_raw_functions(functions, opts) {\n for (var key in functions) {\n xlsx_raw_Fx[key] = functions[key];\n }\n}\n\nfunction import_functions(formulajs, opts) {\n opts = opts || {};\n var prefix = opts.prefix || '';\n for (var key in formulajs) {\n var obj = formulajs[key];\n if (typeof(obj) === 'function') {\n if (opts.override || !xlsx_Fx[prefix + key]) {\n xlsx_Fx[prefix + key] = obj;\n }\n // else {\n // console.log(prefix + key, 'already exists.');\n // console.log(' to override:');\n // console.log(' XLSX_CALC.import_functions(yourlib, {override: true})');\n // }\n }\n else if (typeof(obj) === 'object') {\n import_functions(obj, my_assign(opts, { prefix: key + '.' }));\n }\n }\n}\n\nfunction my_assign(dest, source) {\n var obj = JSON.parse(JSON.stringify(dest));\n for (var k in source) {\n obj[k] = source[k];\n }\n return obj;\n}\n\nfunction build_expression(formula) {\n return expression_builder(formula, {xlsx_Fx: xlsx_Fx, xlsx_raw_Fx: xlsx_raw_Fx});\n}\n\nfunction exec_formula(formula) {\n let root_exp = build_expression(formula);\n root_exp.update_cell_value();\n}\n\nexec_formula.set_fx = function set_fx(name, fn) {\n xlsx_Fx[name] = fn;\n};\n\nexec_formula.exec_fx = function exec_fx(name, args) {\n return xlsx_Fx[name].apply(this, args);\n};\n\nexec_formula.localizeFunctions = function(dic) {\n for (let newName in dic) {\n let oldName = dic[newName];\n if (xlsx_Fx[oldName]) {\n xlsx_Fx[newName] = xlsx_Fx[oldName];\n }\n if (xlsx_raw_Fx[oldName]) {\n xlsx_raw_Fx[newName] = xlsx_raw_Fx[oldName];\n }\n }\n};\n\nexec_formula.import_functions = import_functions;\nexec_formula.import_raw_functions = import_raw_functions;\nexec_formula.build_expression = build_expression;\nexec_formula.xlsx_Fx = xlsx_Fx;\nmodule.exports = exec_formula;\n","const Exp = require('./Exp.js');\nconst RawValue = require('./RawValue.js');\nconst UserFnExecutor = require('./UserFnExecutor.js');\nconst UserRawFnExecutor = require('./UserRawFnExecutor.js');\nconst common_operations = {\n '*': 'multiply',\n '+': 'plus',\n '-': 'minus',\n '/': 'divide',\n '^': 'power',\n '&': 'concat',\n '<': 'lt',\n '>': 'gt',\n '=': 'eq'\n};\n\nmodule.exports = function expression_builder(formula, opts) {\n formula.status = 'working';\n\n var xlsx_Fx = opts.xlsx_Fx || {};\n var xlsx_raw_Fx = opts.xlsx_raw_Fx || {};\n\n var root_exp;\n var str_formula = formula.cell.f;\n if (str_formula[0] == '=') {\n str_formula = str_formula.substr(1);\n }\n var exp_obj = root_exp = new Exp(formula);\n var buffer = '',\n was_string = false;\n var fn_stack = [{\n exp: exp_obj\n }];\n\n /**\n * state pattern in functional way\n */\n function string(char) {\n if (char === '\"') {\n exp_obj.push(new RawValue(buffer));\n was_string = true;\n buffer = '';\n state = start;\n } else {\n buffer += char;\n }\n }\n\n function single_quote(char) {\n if (char === \"'\") {\n state = start;\n }\n buffer += char;\n }\n\n function ini_parentheses() {\n var o, trim_buffer = buffer.trim(),\n special = xlsx_Fx[trim_buffer];\n var special_raw = xlsx_raw_Fx[trim_buffer];\n if (special_raw) {\n special = new UserRawFnExecutor(special_raw, formula);\n }\n else if (special) {\n special = new UserFnExecutor(special, formula);\n }\n else if (trim_buffer) {\n //Error: \"Worksheet 1\"!D145: Function INDEX not found\n throw new Error('\"' + formula.sheet_name + '\"!' + formula.name + ': Function ' + buffer + ' not found');\n }\n o = new Exp(formula);\n fn_stack.push({\n exp: o,\n special: special\n });\n exp_obj = o;\n buffer = '';\n }\n\n function end_parentheses() {\n var v, stack = fn_stack.pop();\n exp_obj = stack.exp;\n exp_obj.push(buffer);\n v = exp_obj;\n buffer = '';\n exp_obj = fn_stack[fn_stack.length - 1].exp;\n if (stack.special) {\n stack.special.push(v);\n exp_obj.push(stack.special);\n }\n else {\n exp_obj.push(v);\n }\n }\n\n function add_operation(char) {\n if (!was_string) {\n exp_obj.push(buffer);\n }\n was_string = false;\n exp_obj.push(char);\n buffer = '';\n }\n\n function start(char) {\n if (char === '\"') {\n state = string;\n buffer = '';\n } else if (char === \"'\") {\n state = single_quote;\n buffer = \"'\";\n } else if (char === '(') {\n ini_parentheses();\n } else if (char === ')') {\n end_parentheses();\n } else if (common_operations[char]) {\n add_operation(char);\n } else if (char === ',' && fn_stack[fn_stack.length - 1].special) {\n was_string = false;\n fn_stack[fn_stack.length - 1].exp.push(buffer);\n fn_stack[fn_stack.length - 1].special.push(fn_stack[fn_stack.length - 1].exp);\n fn_stack[fn_stack.length - 1].exp = exp_obj = new Exp(formula);\n buffer = '';\n } else if (char !== ' ') {\n buffer += char;\n }\n }\n \n var state = start;\n\n for (var i = 0; i < str_formula.length; i++) {\n state(str_formula[i]);\n }\n root_exp.push(buffer);\n return root_exp;\n\n}","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst str_2_val = require('./str_2_val.js');\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\nconst col_str_2_int = require('./col_str_2_int.js');\nconst int_2_col_str = require('./int_2_col_str.js');\nconst { getErrorValueByMessage } = require('./errors')\nvar exp_id = 0;\n\nfunction isMatrix(obj) {\n return Array.isArray(obj) && (obj.length === 0 || Array.isArray(obj[0]));\n}\n\nmodule.exports = function Exp(formula) {\n var self = this;\n self.id = ++exp_id;\n self.args = [];\n self.name = 'Expression';\n self.update_cell_value = update_cell_value;\n self.formula = formula;\n \n function update_cell_value() {\n try {\n if (Array.isArray(self.args) \n && self.args.length === 1\n && self.args[0] instanceof Range) {\n throw new Error('#VALUE!');\n }\n formula.cell.v = self.calc();\n formula.cell.t = getCellType(formula.cell.v);\n if (isMatrix(formula.cell.v)) {\n const array = formula.cell.v;\n formula.cell.v = undefined;\n let cellsName = formula.name;\n let colAndRow = cellsName.match(/([A-Z]+)([0-9]+)/);\n let colNumber = col_str_2_int(colAndRow[1]);\n let rowNumber = +colAndRow[2];\n for (let i = 0; i < array.length; i++) {\n const newCellNumber = rowNumber + i;\n for (let j = 0; j < array[i].length; j++) {\n const newCellValue = array[i][j];\n const destinationColumn = j + colNumber;\n const destinationCellName = int_2_col_str(destinationColumn) + newCellNumber;\n let cell = formula.sheet[destinationCellName];\n if (!cell) {\n cell = {};\n formula.sheet[destinationCellName] = cell;\n }\n applyCellValue(cell, newCellValue);\n }\n }\n }\n }\n catch (e) {\n if (!applyCellError(formula.cell, e)) {\n throw e;\n }\n }\n finally {\n formula.status = 'done';\n }\n }\n\n function applyCellError(cell, cellValueOrError) {\n const error = cellValueOrError || {};\n cell.t = 'e';\n const errorValue = getErrorValueByMessage(error.message);\n if (errorValue !== undefined) {\n cell.w = error.message;\n cell.v = errorValue;\n return true;\n } else {\n return false;\n }\n }\n\n function applyCellValue(cell, cellValueOrError) {\n if (cellValueOrError instanceof Error) {\n applyCellError(cell, cellValueOrError)\n } else {\n const newCellType = getCellType(cellValueOrError);\n cell.v = cellValueOrError;\n if (newCellType) cell.t = newCellType;\n }\n }\n\n function getCellType(cellValue) {\n if (typeof(cellValue) === 'string') {\n return 's';\n }\n else if (typeof(cellValue) === 'number') {\n return 'n';\n }\n else if (cellValue instanceof Error) {\n return 'e';\n }\n }\n\n function isEmpty(value) {\n return value === undefined || value === null || value === \"\";\n }\n \n function checkVariable(obj) {\n if (typeof obj.calc !== 'function') {\n throw new Error('Undefined ' + obj);\n }\n }\n\n function getCurrentCellIndex() {\n return +self.formula.name.replace(/[^0-9]/g, '');\n }\n \n function exec(op, args, fn) {\n for (var i = 0; i < args.length; i++) {\n if (args[i] === op) {\n try {\n if (i===0 && op==='+') {\n checkVariable(args[i + 1]);\n let r = args[i + 1].calc();\n args.splice(i, 2, new RawValue(r));\n } else {\n checkVariable(args[i - 1]);\n checkVariable(args[i + 1]);\n\n let a = args[i - 1].calc();\n let b = args[i + 1].calc();\n if (Array.isArray(a)) {\n a = a[getCurrentCellIndex() - 1][0];\n }\n if (Array.isArray(b)) {\n b = b[getCurrentCellIndex() - 1][0];\n }\n\n let r = fn(a, b);\n args.splice(i - 1, 3, new RawValue(r));\n i--;\n }\n }\n catch (e) {\n // console.log('[Exp.js] - ' + formula.name + ': evaluating ' + formula.cell.f + '\\n' + e.message);\n throw e;\n }\n }\n }\n }\n\n function exec_minus(args) {\n for (var i = args.length; i--;) {\n if (args[i] === '-') {\n checkVariable(args[i + 1]);\n var b = args[i + 1].calc();\n if (i > 0 && typeof args[i - 1] !== 'string') {\n args.splice(i, 1, '+');\n if (b instanceof Date) {\n b = Date.parse(b);\n checkVariable(args[i - 1]);\n var a = args[i - 1].calc();\n if (a instanceof Date) {\n a = Date.parse(a) / MS_PER_DAY;\n b = b / MS_PER_DAY;\n args.splice(i - 1, 1, new RawValue(a));\n }\n }\n args.splice(i + 1, 1, new RawValue(-b));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(-b));\n }\n }\n }\n }\n\n self.calc = function() {\n let args = self.args.concat();\n exec('^', args, function(a, b) {\n return Math.pow(+a, +b);\n });\n exec_minus(args);\n exec('/', args, function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n });\n exec('*', args, function(a, b) {\n return (+a) * (+b);\n });\n exec('+', args, function(a, b) {\n if (a instanceof Date && typeof b === 'number') {\n b = b * MS_PER_DAY;\n }\n return (+a) + (+b);\n });\n exec('&', args, function(a, b) {\n return '' + a + b;\n });\n exec('<', args, function(a, b) {\n return a < b;\n });\n exec('>', args, function(a, b) {\n return a > b;\n });\n exec('>=', args, function(a, b) {\n return a >= b;\n });\n exec('<=', args, function(a, b) {\n return a <= b;\n });\n exec('<>', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() !== b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return false;\n }\n return a !== b;\n });\n exec('=', args, function(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (isEmpty(a) && isEmpty(b)) {\n return true;\n }\n if ((a == null && b === 0) || (a === 0 && b == null)) {\n return true;\n }\n if (typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase()) {\n return true;\n }\n return a === b;\n });\n if (args.length == 1) {\n if (typeof(args[0].calc) !== 'function') {\n return args[0];\n }\n else {\n return args[0].calc();\n }\n }\n };\n\n var last_arg;\n self.push = function(buffer) {\n if (buffer) {\n var v = str_2_val(buffer, formula);\n if (((v === '=') && (last_arg == '>' || last_arg == '<')) || (last_arg == '<' && v === '>')) {\n self.args[self.args.length - 1] += v;\n }\n else {\n self.args.push(v);\n }\n last_arg = v;\n //console.log(self.id, '-->', v);\n }\n };\n};","\"use strict\";\n\nmodule.exports = function LazyValue(fn) {\n this.calc = function() {\n return fn();\n };\n};\n","\"use strict\";\n\nconst { getErrorValueByMessage } = require('./errors')\n\nmodule.exports = function UserFnExecutor(user_function) {\n var self = this;\n self.name = 'UserFn';\n self.args = [];\n self.calc = function () {\n var result;\n try {\n result = user_function.apply(self, self.args.map(f => f.calc()));\n } catch (e) {\n const errorValue = getErrorValueByMessage(e.message)\n if (user_function.name === 'is_blank'\n && errorValue !== undefined) {\n // is_blank applied to an error cell doesn't propagate the error\n result = 0;\n }\n else if (user_function.name === 'iserror'\n && errorValue !== undefined) {\n // iserror applied to an error doesn't propagate the error and returns true\n result = true;\n }\n else {\n throw e;\n }\n }\n return result;\n };\n self.push = function (buffer) {\n self.args.push(buffer);\n };\n};","\"use strict\";\n\nmodule.exports = function UserRawFnExecutor(user_function, formula) {\n var self = this;\n self.name = 'UserRawFn';\n self.args = [];\n self.calc = function() {\n try {\n return user_function.apply(self, self.args);\n } catch(e) {\n // debug\n // console.log('----------------', user_function);\n // console.log(formula.name);\n // console.log(self);\n throw e;\n }\n };\n self.push = function(buffer) {\n self.args.push(buffer);\n };\n};\n","\"use strict\";\nconst utils = require('./utils')\nconst error = require('./errors')\n\n// +---------------------+\n// | FORMULAS REGISTERED |\n// +---------------------+\nlet formulas = {\n 'FLOOR': Math.floor,\n '_xlfn.FLOOR.MATH': Math.floor,\n 'FLOOR.MATH': Math.floor,\n 'ABS': Math.abs,\n 'SQRT': Math.sqrt,\n 'VLOOKUP': vlookup,\n 'MAX': max,\n 'SUM': sum,\n 'MIN': min,\n 'CONCATENATE': concatenate,\n 'PMT': pmt,\n 'COUNTA': counta,\n 'IRR': irr,\n 'NORM.INV': normsInv,\n '_xlfn.NORM.INV': normsInv,\n 'STDEV': stDeviation,\n 'AVERAGE': avg,\n 'EXP': EXP,\n 'LN': Math.log,\n '_xlfn.VAR.P': var_p,\n 'VAR.P': var_p,\n '_xlfn.COVARIANCE.P': covariance_p,\n 'COVARIANCE.P': covariance_p,\n 'TRIM': trim,\n 'LEN': len,\n 'ISBLANK': is_blank,\n 'HLOOKUP': hlookup,\n 'INDEX': index,\n 'MATCH': match,\n 'SUMPRODUCT': sumproduct,\n 'ISNUMBER': isnumber,\n 'TODAY': today,\n 'ISERROR': iserror,\n 'TIME': time,\n 'DAY': day,\n 'MONTH': month,\n 'YEAR': year,\n 'RIGHT': right,\n 'LEFT': left,\n 'IFS': ifs,\n 'ROUND': round,\n 'CORREL': correl, // missing test\n 'SUMIF': sumif, // missing test,\n 'CHOOSE': choose,\n 'SUBSTITUTE': substitute,\n 'CEILING': ceiling,\n 'FILTER': throwErrors(FILTER),\n};\n\nfunction choose(option) {\n return arguments[option];\n}\n\nfunction sumif(){\n\n let elementToSum = arguments[1];\n let sumResult = 0;\n\n [].slice.call(arguments)[0][0].forEach((elt,key) =>{\n \n if (elt!==null){\n //if the element is not a string but a number, number has no replace function, so converting to string.\n elt = elt.toString();\n if( elt.replace(/\\'/g, \"\") === elementToSum){\n if (!isNaN([].slice.call(arguments)[2][0][key])){\n sumResult += [].slice.call(arguments)[2][0][key]\n }\n }\n }\n });\n return sumResult\n}\n\nfunction correl(a,b){\n\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n\n if (a.length !== b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / (a.length-1);\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n var sa = 0;\n var sb=0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n\n sa+=Math.pow(a[i],2);\n sb+=Math.pow(b[i],2);\n }\n\n sa=Math.sqrt(sa/inv_n);\n sb=Math.sqrt(sb/inv_n);\n\n return s / (inv_n*sa*sb);\n}\n\nfunction round(value, decimalPlaces) {\n if (arguments.length === 0) throw new Error(\"Err:511\");\n if (arguments.length === 1) return Math.round(value);\n let roundMeasure = Math.pow(10, decimalPlaces);\n return Math.round(roundMeasure*value)/roundMeasure\n}\n\nfunction today() {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n}\n\nfunction isnumber(x) {\n return !isNaN(x);\n}\n\nfunction sumproduct() {\n var parseNumber = function (string) {\n if (string === undefined || string === '' || string === null) {\n return 0;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n return 0;\n },\n consistentSizeRanges = function (matrixArray) {\n var getRowCount = function(matrix) {\n return matrix.length;\n },\n getColCount = function(matrix) {\n return matrix[0].length;\n },\n rowCount = getRowCount(matrixArray[0]),\n colCount = getColCount(matrixArray[0]);\n\n for (var i = 1; i < matrixArray.length; i++) {\n if (getRowCount(matrixArray[i]) !== rowCount\n || getColCount(matrixArray[i]) !== colCount) {\n return false;\n }\n }\n return true;\n };\n\n if (!arguments || arguments.length === 0) {\n throw Error('#VALUE!');\n }\n if (!consistentSizeRanges(arguments)) {\n throw Error('#VALUE!');\n }\n // throw error if any of the cells passed in arguments is in error\n for (var i = 0; i < arguments.length; i++) {\n var row = arguments[i];\n if (Array.isArray(row)) {\n for (var j = 0; j < row.length; j++) {\n var col = row[j];\n if (Array.isArray(col)) {\n for (var k = 0; k < col.length; k++) {\n var cell = col[k];\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n else {\n var cell = col;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n }\n else {\n var cell = row;\n if (cell && typeof cell === 'object' && cell.t === 'e') {\n throw Error(cell.w);\n }\n }\n }\n\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _i = parseNumber(arguments[k - 1][i]);\n\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n _ij = parseNumber(arguments[k - 1][i][j]);\n\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n}\n\nfunction match_less_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] > indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match_exactly_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1\n && typeof matrix[idx][0] === 'string') {\n if (matrix[idx][0].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n } else if (typeof matrix[idx] === 'string') {\n if (matrix[idx].toLowerCase() === lookupValue.toLowerCase()) {\n return idx + 1;\n }\n }\n\n }\n throw Error('#N/A');\n}\n\nfunction match_exactly_non_string(matrix, lookupValue) {\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx])) {\n if (matrix[idx].length === 1) {\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matrix[idx] === lookupValue) {\n return idx + 1;\n }\n }\n throw Error('#N/A');\n}\n\n// +---------------------+\n// | THE IMPLEMENTATIONS |\n// +---------------------+\n\n\nfunction match_greater_than_or_equal(matrix, lookupValue) {\n var index;\n var indexValue;\n for (var idx = 0; idx < matrix.length; idx++) {\n if (Array.isArray(matrix[idx]) && matrix[idx].length > 0) {\n // For array in column\n if (matrix[idx][0] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx][0] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n } else if (matrix[idx][0] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx][0];\n }\n }\n } else {\n // For array in row\n if (matrix[idx] === lookupValue) {\n return idx + 1;\n } else if (matrix[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n } else if (matrix[idx] < indexValue) {\n index = idx + 1;\n indexValue = matrix[idx];\n }\n }\n }\n }\n if (!index) {\n throw Error('#N/A');\n }\n return index;\n}\n\nfunction match(lookupValue, matrix, matchType) {\n if (Array.isArray(matrix)\n && matrix.length === 1\n && Array.isArray(matrix[0])) {\n matrix = matrix[0];\n }\n if (!lookupValue && !matrix) {\n throw Error('#N/A');\n }\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(matrix instanceof Array)) {\n throw Error('#N/A');\n }\n if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n return match_exactly_string(matrix, lookupValue);\n } else {\n return match_exactly_non_string(matrix, lookupValue);\n }\n } else if (matchType === 1) {\n return match_less_than_or_equal(matrix, lookupValue);\n } else if (matchType === -1) {\n return match_greater_than_or_equal(matrix, lookupValue);\n } else {\n throw Error('#N/A');\n }\n}\n\nfunction index(matrix, row_num, column_num) {\n if (row_num <= matrix.length) {\n var row = matrix[row_num - 1];\n if (Array.isArray(row)) {\n if (!column_num) {\n return row;\n } else if (column_num <= row.length) {\n return row[column_num - 1];\n }\n } else {\n return matrix[row_num];\n }\n }\n throw Error('#REF!');\n}\n\n// impl ported from https://github.com/FormulaPages/hlookup\nfunction hlookup(needle, table, index, exactmatch) {\n if (typeof needle === \"undefined\" || (0, is_blank)(needle)) {\n throw Error('#N/A');\n }\n\n index = index || 0;\n let row = table[0], i, searchingFor;\n\n if (typeof needle === 'string') {\n searchingFor = needle.toLowerCase();\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i].toLowerCase().indexOf(searchingFor) !== -1) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n } else {\n searchingFor = needle;\n for (i = 0; i < row.length; i++) {\n if (exactmatch && row[i] === searchingFor || row[i] === searchingFor) {\n return index < table.length + 1 ? table[index - 1][i] : table[0][i];\n }\n }\n }\n throw Error('#N/A');\n}\n\nfunction len(a) {\n return ('' + a).length;\n}\n\nfunction trim(a) {\n return ('' + a).trim();\n}\n\nfunction is_blank(a) {\n // console.log(a)\n return !a;\n}\n\nfunction covariance_p(a, b) {\n a = getArrayOfNumbers(a);\n b = getArrayOfNumbers(b);\n if (a.length != b.length) {\n return 'N/D';\n }\n var inv_n = 1.0 / a.length;\n var avg_a = sum.apply(this, a) / a.length;\n var avg_b = sum.apply(this, b) / b.length;\n var s = 0.0;\n for (var i = 0; i < a.length; i++) {\n s += (a[i] - avg_a) * (b[i] - avg_b);\n }\n return s * inv_n;\n}\n\nfunction getArrayOfNumbers(range) {\n var arr = [];\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n if (typeof(matrix[j]) == 'number') {\n arr.push(matrix[j]);\n }\n else if (Array.isArray(matrix[j])) {\n for (var k = matrix[j].length; k--;) {\n if (typeof(matrix[j][k]) == 'number') {\n arr.push(matrix[j][k]);\n }\n }\n }\n // else {\n // wtf is that?\n // }\n }\n }\n else {\n if (typeof(arg) == 'number') {\n arr.push(arg);\n }\n }\n }\n return arr;\n}\n\nfunction var_p() {\n var average = avg.apply(this, arguments);\n var s = 0.0;\n var c = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n s += Math.pow(matrix[j][k] - average, 2);\n c++;\n }\n }\n }\n }\n else {\n s += Math.pow(arg - average, 2);\n c++;\n }\n }\n return s / c;\n}\n\nfunction EXP(n) {\n return Math.pow(Math.E, n);\n}\n\nfunction avg() {\n var aux = counta.apply(this, arguments);\n if (aux == 0) {\n throw Error('#DIV/0!');\n }\n return sum.apply(this, arguments) / aux;\n}\n\nfunction stDeviation() {\n var array = getArrayOfNumbers(arguments);\n\n function _mean(array) {\n return array.reduce(function(a, b) {\n return a + b;\n }) / array.length;\n }\n var mean = _mean(array),\n dev = array.map(function(itm) {\n return (itm - mean) * (itm - mean);\n });\n return Math.sqrt(dev.reduce(function(a, b) {\n return a + b;\n }) / (array.length - 1));\n}\n\n/// Original C++ implementation found at http://www.wilmott.com/messageview.cfm?catid=10&threadid=38771\n/// C# implementation found at http://weblogs.asp.net/esanchez/archive/2010/07/29/a-quick-and-dirty-implementation-of-excel-norminv-function-in-c.aspx\n/*\n * Compute the quantile function for the normal distribution.\n *\n * For small to moderate probabilities, algorithm referenced\n * below is used to obtain an initial approximation which is\n * polished with a final Newton step.\n *\n * For very large arguments, an algorithm of Wichura is used.\n *\n * REFERENCE\n *\n * Beasley, J. D. and S. G. Springer (1977).\n * Algorithm AS 111: The percentage points of the normal distribution,\n * Applied Statistics, 26, 118-121.\n *\n * Wichura, M.J. (1988).\n * Algorithm AS 241: The Percentage Points of the Normal Distribution.\n * Applied Statistics, 37, 477-484.\n */\nfunction normsInv(p, mu, sigma) {\n if (p < 0 || p > 1) {\n throw \"The probality p must be bigger than 0 and smaller than 1\";\n }\n if (sigma < 0) {\n throw \"The standard deviation sigma must be positive\";\n }\n\n if (p == 0) {\n return -Infinity;\n }\n if (p == 1) {\n return Infinity;\n }\n if (sigma == 0) {\n return mu;\n }\n\n var q, r, val;\n\n q = p - 0.5;\n\n /*-- use AS 241 --- */\n /* double ppnd16_(double *p, long *ifault)*/\n /* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3\n Produces the normal deviate Z corresponding to a given lower\n tail area of P; Z is accurate to about 1 part in 10**16.\n */\n if (Math.abs(q) <= .425) { /* 0.075 <= p <= 0.925 */\n r = .180625 - q * q;\n val =\n q * (((((((r * 2509.0809287301226727 +\n 33430.575583588128105) * r + 67265.770927008700853) * r +\n 45921.953931549871457) * r + 13731.693765509461125) * r +\n 1971.5909503065514427) * r + 133.14166789178437745) * r +\n 3.387132872796366608) / (((((((r * 5226.495278852854561 +\n 28729.085735721942674) * r + 39307.89580009271061) * r +\n 21213.794301586595867) * r + 5394.1960214247511077) * r +\n 687.1870074920579083) * r + 42.313330701600911252) * r + 1);\n }\n else { /* closer than 0.075 from {0,1} boundary */\n\n /* r = min(p, 1-p) < 0.075 */\n if (q > 0)\n r = 1 - p;\n else\n r = p;\n\n r = Math.sqrt(-Math.log(r));\n /* r = sqrt(-log(r)) <==> min(p, 1-p) = exp( - r^2 ) */\n\n if (r <= 5) { /* <==> min(p,1-p) >= exp(-25) ~= 1.3888e-11 */\n r += -1.6;\n val = (((((((r * 7.7454501427834140764e-4 +\n .0227238449892691845833) * r + .24178072517745061177) *\n r + 1.27045825245236838258) * r +\n 3.64784832476320460504) * r + 5.7694972214606914055) *\n r + 4.6303378461565452959) * r +\n 1.42343711074968357734) / (((((((r *\n 1.05075007164441684324e-9 + 5.475938084995344946e-4) *\n r + .0151986665636164571966) * r +\n .14810397642748007459) * r + .68976733498510000455) *\n r + 1.6763848301838038494) * r +\n 2.05319162663775882187) * r + 1);\n }\n else { /* very close to 0 or 1 */\n r += -5;\n val = (((((((r * 2.01033439929228813265e-7 +\n 2.71155556874348757815e-5) * r +\n .0012426609473880784386) * r + .026532189526576123093) *\n r + .29656057182850489123) * r +\n 1.7848265399172913358) * r + 5.4637849111641143699) *\n r + 6.6579046435011037772) / (((((((r *\n 2.04426310338993978564e-15 + 1.4215117583164458887e-7) *\n r + 1.8463183175100546818e-5) * r +\n 7.868691311456132591e-4) * r + .0148753612908506148525) * r + .13692988092273580531) * r +\n .59983220655588793769) * r + 1);\n }\n\n if (q < 0.0) {\n val = -val;\n }\n }\n\n return mu + sigma * val;\n}\n\nfunction irr(range, guess) {\n var min = -2.0;\n var max = 1.0;\n var n = 0;\n do {\n var guest = (min + max) / 2;\n var NPV = 0;\n for (var i = 0; i < range.length; i++) {\n var arg = range[i];\n NPV += arg[0] / Math.pow((1 + guest), i);\n }\n if (NPV > 0) {\n if (min === max) {\n max += Math.abs(guest);\n }\n min = guest;\n }\n else {\n max = guest;\n }\n n++;\n } while (Math.abs(NPV) > 0.000001 && n < 100000);\n //console.log(n);\n return guest;\n}\n\nfunction counta() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (matrix[j][k] !== null && matrix[j][k] !== undefined) {\n r++;\n }\n }\n }\n }\n else {\n if (arg !== null && arg !== undefined) {\n r++;\n }\n }\n }\n return r;\n}\n\nfunction pmt(rate_per_period, number_of_payments, present_value, future_value, type) {\n type = type || 0;\n future_value = future_value || 0;\n if (rate_per_period != 0.0) {\n // Interest rate exists\n var q = Math.pow(1 + rate_per_period, number_of_payments);\n return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type)));\n\n }\n else if (number_of_payments != 0.0) {\n // No interest rate, but number of payments exists\n return -(future_value + present_value) / number_of_payments;\n }\n return 0;\n}\n\nfunction concatenate() {\n var r = '';\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (arg === null || arg === undefined) continue;\n r += arg;\n }\n return r;\n}\n\nfunction sum() {\n var r = 0;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var matrix = arg;\n for (var j = matrix.length; j--;) {\n for (var k = matrix[j].length; k--;) {\n if (!isNaN(matrix[j][k])) {\n r += +matrix[j][k];\n }\n }\n }\n }\n else {\n r += +arg;\n }\n }\n return r;\n}\n\nfunction max() {\n var max = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (max == null || (col[k] != null && max < col[k])) {\n max = col[k];\n }\n }\n }\n else if (max == null || (col != null && max < col)) {\n max = col;\n }\n }\n }\n else if (!isNaN(arg) && (max == null || (arg != null && max < arg))) {\n max = arg;\n }\n }\n return max;\n}\n\nfunction min() {\n var min = null;\n for (var i = arguments.length; i--;) {\n var arg = arguments[i];\n if (Array.isArray(arg)) {\n var arr = arg;\n for (var j = arr.length; j--;) {\n var col = arr[j];\n if (Array.isArray(col)) {\n for (var k = col.length; k--;) {\n if (min == null || (col[k] != null && min > col[k])) {\n min = col[k];\n }\n }\n }\n else if (min == null || (col != null && min > col)) {\n min = col;\n }\n }\n }\n else if (!isNaN(arg) && (min == null || (arg != null && min > arg))) {\n min = arg;\n }\n }\n return min;\n}\n\nfunction vlookup(key, matrix, return_index, range_lookup=true) {\n var val = null;\n for (var i = 0; i < matrix.length; i++) {\n if (matrix[i][0] < key) {\n val = matrix[i][return_index - 1];\n }\n else if (matrix[i][0] == key) {\n return matrix[i][return_index - 1];\n }\n }\n if (range_lookup && val) {\n return val;\n }\n throw Error('#N/A');\n}\n\nfunction iserror() {\n // if an error is catched before getting there, true will be returned from the catch block\n // if we get here then it's not an error\n return false;\n}\n\nfunction time(hours, minutes, seconds) {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n return ((hours * 60 + minutes) * 60 + seconds) * 1000 / MS_PER_DAY;\n}\n\nfunction day(date) {\n if (!date.getDate) {\n throw Error('#VALUE!');\n }\n var day = date.getDate();\n if (isNaN(day)) {\n throw Error('#VALUE!');\n }\n return day;\n}\n\nfunction month(date) {\n if (!date.getMonth) {\n throw Error('#VALUE!');\n }\n var month = date.getMonth();\n if (isNaN(month)) {\n throw Error('#VALUE!');\n }\n return month + 1;\n}\n\nfunction year(date) {\n if (!date.getFullYear) {\n throw Error('#VALUE!');\n }\n var year = date.getFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction right(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(text.length - number);\n}\n\nfunction left(text, number) {\n number = (number === undefined) ? 1 : parseFloat(number);\n\n if (isNaN(number)) {\n throw Error('#VALUE!');\n }\n if (text === undefined || text === null) {\n text = '';\n } else {\n text = '' + text;\n }\n return text.substring(0, number);\n}\n\nfunction ifs(/*_cond1, _val1, _cond2, _val2, _cond3, _val3, ... */) {\n for (var i = 0; i + 1 < arguments.length; i+=2) {\n var cond = arguments[i];\n var val = arguments[i+1];\n if (cond) {\n return val;\n }\n }\n throw Error('#N/A');\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction substitute(text, old_text, new_text, occurrence) {\n if(occurrence <= 0) {\n throw Error('#VALUE!');\n }\n if (!text || !old_text || (!new_text && new_text !== '')) {\n return text;\n } else if (occurrence === undefined) {\n return text.replace(new RegExp(escapeRegExp(old_text), 'g'), new_text);\n } else {\n var index = 0;\n var i = 0;\n while (text.indexOf(old_text, index) > 0) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n }\n };\n\nfunction ceiling(number, significance) {\n return Math.ceil(number / significance) * significance\n}\n/**\n * Filters an array based on a Boolean (True/False) array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array The array, or range to filter. E.g. [[1,2,3],[4,5,6]]\n * @param {*} include A boolean array whose height or width is the same as the array. E.g. [[true, false, true]] OR [[true],[false]]\n * @param {*} if_empty Optional. The value to return if all values in the included array are empty (filter returns nothing). E.g. \"No results\"\n * @returns\n */\n function FILTER(array, include, if_empty) {\n // correct types\n if (!array || !include) {\n return error.na\n }\n\n if (!(array instanceof Array)) {\n return error.na\n }\n\n if (!(include instanceof Array)) {\n return error.na\n }\n\n // array lengths must be greater than 0 and symmetrical\n if (array.length === 0) {\n return error.na\n }\n\n if (include.length === 0) {\n return error.na\n }\n\n for (let i = 0; i < array.length; i++) {\n if (!(array[i] instanceof Array)) {\n return error.na\n }\n\n if (array[i].length === 0) {\n return error.na\n }\n\n if (array[i].length !== array[0].length) {\n return error.na\n }\n }\n\n for (let i = 0; i < include.length; i++) {\n if (!(include[i] instanceof Array)) {\n return error.na\n }\n\n if (include[i].length === 0) {\n return error.na\n }\n\n if (include[i].length !== include[0].length) {\n return error.na\n }\n }\n\n const arrayWidth = array[0].length\n const arrayHeight = array.length\n const includeWidth = include[0].length\n const includeHeight = include.length\n\n // include array must have same width or height as array (and generally not both)\n if (arrayWidth !== includeWidth && arrayHeight !== includeHeight) {\n return error.na\n }\n\n if (\n arrayHeight > 1 &&\n arrayWidth > 1 &&\n ((arrayWidth === includeWidth && includeHeight !== 1) || (arrayHeight === includeHeight && includeWidth !== 1))\n ) {\n return error.na\n }\n\n if (\n arrayHeight > 1 &&\n arrayWidth === 1 &&\n (includeWidth !== 1 || (includeHeight !== 1 && includeHeight !== arrayHeight))\n ) {\n return error.na\n }\n\n // filter\n const result = []\n for (let i = 0; i < arrayHeight; i++) {\n const row = []\n for (let j = 0; j < arrayWidth; j++) {\n const value = include[i][j] || include[0][j] || include[i][0]\n const bool = utils.parseBool(value)\n if (bool === true) row.push(array[i][j])\n else if (bool instanceof Error) return utils.addEmptyValuesToArray([[bool]], arrayWidth, arrayHeight)\n }\n if (row.length > 0) result.push(row)\n }\n\n if (result.length === 0) {\n if (if_empty != null) {\n return utils.addEmptyValuesToArray([[if_empty]], arrayWidth, arrayHeight)\n }\n\n return utils.addEmptyValuesToArray([[error.calc]], arrayWidth, arrayHeight)\n }\n\n return utils.addEmptyValuesToArray(result, arrayWidth, arrayHeight)\n}\n\nfunction throwErrors(someFormula) {\n return function() {\n const result = someFormula.apply(this, arguments);\n if (result instanceof Error) {\n throw result;\n }\n return result;\n }\n}\n\nmodule.exports = formulas;\n","function parseBool(bool) {\n if (typeof bool === 'boolean') {\n return bool\n }\n\n if (bool instanceof Error) {\n return bool\n }\n\n if (typeof bool === 'number') {\n return bool !== 0\n }\n\n if (typeof bool === 'string') {\n const up = bool.toUpperCase()\n\n if (up === 'TRUE') {\n return true\n }\n\n if (up === 'FALSE') {\n return false\n }\n }\n\n if (bool instanceof Date && !isNaN(bool)) {\n return true\n }\n\n return error.value\n}\n\n// E.g. addEmptyValuesToArray([[1]], 2, 2) => [[1, \"\"], [\"\", \"\"]]\nfunction addEmptyValuesToArray(array, requiredLength, requiredHeight) {\n if (!array || !requiredLength || !requiredHeight) {\n return array\n }\n\n if (requiredLength < 0 || requiredHeight < 0) {\n return array\n }\n\n // array must be a square matrix\n if (!Array.isArray(array) || !array.length) return array;\n for (let i = 0; i < array.length; i++) {\n if (!(array[i] instanceof Array)) return array\n }\n\n // add empty values to columns\n for (let i = 0; i < array.length; i++) {\n if (array[i].length < requiredLength) {\n for (let j = array[i].length; j < requiredLength; j++) {\n array[i].push('')\n }\n }\n }\n\n // add empty values to rows\n if (array.length < requiredHeight) {\n for (let i = array.length; i < requiredHeight; i++) {\n array.push([])\n for (let j = 0; j < requiredLength; j++) {\n array[i].push('')\n }\n }\n }\n\n return array\n}\n\nmodule.exports = {\n addEmptyValuesToArray,\n parseBool,\n}","\"use strict\";\n\nconst int_2_col_str = require('./int_2_col_str.js');\nconst col_str_2_int = require('./col_str_2_int.js');\nconst RawValue = require('./RawValue.js');\nconst Range = require('./Range.js');\nconst RefValue = require('./RefValue.js');\n\nfunction raw_offset(cell_ref, rows, columns, height, width) {\n height = (height || new RawValue(1)).calc();\n width = (width || new RawValue(1)).calc();\n if (cell_ref.args.length === 1 && cell_ref.args[0].name === 'RefValue') {\n var ref_value = cell_ref.args[0];\n var parsed_ref = ref_value.parseRef();\n var col = col_str_2_int(parsed_ref.cell_name) + columns.calc();\n var col_str = int_2_col_str(col);\n var row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '') + rows.calc();\n var cell_name = parsed_ref.sheet_name + '!' + col_str + row;\n if (height === 1 && width === 1) {\n return new RefValue(cell_name, ref_value.formula).calc();\n }\n else {\n var end_range_col = int_2_col_str(col + width - 1);\n var end_range_row = row + height - 1;\n var end_range = end_range_col + end_range_row;\n var str_expression = cell_name + ':' + end_range;\n return new Range(str_expression, ref_value.formula).calc();\n }\n }\n}\n\nfunction iferror(cell_ref, onerrorvalue) {\n try {\n var value = cell_ref.calc();\n if (typeof value === 'number' && (isNaN(value) || value === Infinity || value === -Infinity)) {\n return onerrorvalue.calc();\n }\n return value;\n } catch (e) {\n return onerrorvalue.calc();\n }\n}\n\nfunction _if(condition, _then, _else) {\n if (condition.calc()) {\n // console.log(condition.formula.name)\n // if (condition.formula.name === 'P40') {\n // console.log('P40 =', _then.calc());\n // console.log(' -->', _then.args[1].calc());\n // }\n return _then.calc();\n }\n else {\n if (typeof _else === 'undefined') {\n return false;\n } else {\n return _else.calc();\n }\n }\n}\n\nfunction and() {\n for (var i = 0; i < arguments.length; i++) {\n if (!arguments[i].calc()) return false;\n }\n return true;\n}\n\nfunction _or() {\n for (var i = 0; i < arguments.length; i++) {\n if (arguments[i].calc()) return true;\n }\n return false;\n}\n\nfunction transpose(expressionWithRange) {\n let range = expressionWithRange.args[0];\n // console.log(expressionWithRange.args[0])\n // console.log(expressionWithRange.formula.wb.Sheets.Sheet1)\n // console.log(range.calc())\n let matrix = range.calc();\n let cellName = expressionWithRange.formula.name;\n let colRow = cellName.match(/([A-Z]+)([0-9]+)/);\n let sheet = expressionWithRange.formula.sheet;\n // console.log(colRow[1], colRow[2]);\n // console.log(col_str_2_int(colRow[1]));\n let colNumber = col_str_2_int(colRow[1]);\n let rowNumber = +colRow[2];\n for (let i = 0; i < matrix.length; i++) {\n let matrixRow = matrix[i];\n for (let j = 0; j < matrixRow.length; j++) {\n let destinationColumn = colNumber + i;\n let destinationRow = rowNumber + j;\n let value = matrixRow[j];\n // console.log(int_2_col_str(destinationColumn), destinationRow, value);\n sheet[int_2_col_str(destinationColumn) + destinationRow].v = value;\n }\n }\n // console.log(expressionWithRange.formula.name)\n return matrix[0][0];\n}\n\nmodule.exports = {\n 'OFFSET': raw_offset,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose,\n};\n","\"use strict\";\n\nconst RawValue = require('./RawValue.js');\nconst str_2_val = require('./str_2_val.js');\nconst find_all_cells_with_formulas = require('./find_all_cells_with_formulas.js');\n\nclass Calculator {\n \n constructor(workbook, exec_formula) {\n this.workbook = workbook;\n this.expressions = [];\n this.exec_formula = exec_formula;\n this.variables = {};\n this.formulas = find_all_cells_with_formulas(workbook, exec_formula);\n for (let i = this.formulas.length - 1; i >= 0; i--) {\n let exp = exec_formula.build_expression(this.formulas[i]);\n this.expressions.push(exp);\n }\n this.calcNames();\n }\n \n setVar(var_name, value) {\n let variable = this.variables[var_name];\n if (variable) {\n variable.setValue(value);\n } else {\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, var_name, value);\n });\n }\n }\n \n getVars() {\n let vars = {};\n for (let k in this.variables) {\n vars[k] = this.variables[k].calc();\n }\n return vars;\n }\n \n calcNames() {\n if (!this.workbook || !this.workbook.Workbook || !this.workbook.Workbook.Names) {\n return;\n }\n this.workbook.Workbook.Names.forEach(item => {\n let val = this.getRef(item.Ref);\n this.variables[item.Name] = val;\n this.expressions.forEach(exp => {\n this.setVarOfExpression(exp, item.Name);\n });\n });\n }\n \n getRef(ref_name) {\n if (!this.formulas.length) {\n throw new Error(\"No formula found.\");\n }\n let first_formula = this.formulas[0];\n let formula_ref = first_formula.formula_ref;\n let formula = {\n formula_ref: formula_ref,\n wb: this.workbook,\n exec_formula: this.exec_formula\n };\n return str_2_val(ref_name, formula);\n }\n \n setVarOfExpression(exp, var_name, value) {\n for (let i = 0; i < exp.args.length; i++) {\n let arg = exp.args[i];\n if (arg === var_name) {\n exp.args[i] = this.variables[var_name] || (this.variables[var_name] = new RawValue(value));\n } else if (typeof arg === 'object' && (arg.name === 'Expression' || arg.name === 'UserFn')) {\n this.setVarOfExpression(arg, var_name, value);\n }\n }\n }\n \n execute() {\n this.expressions.forEach(exp => {\n exp.update_cell_value();\n });\n }\n}\n\nmodule.exports = Calculator;"],"sourceRoot":""}