From 619a3a35cd5ed8a729a2386bddb57b4d584f5040 Mon Sep 17 00:00:00 2001 From: Fabio Issamu Oshiro Date: Sun, 28 Jul 2024 11:08:01 -0300 Subject: [PATCH] build: bump version from v0.9.0 to v0.9.1 --- lib/xlsx-calc.js | 2 +- lib/xlsx-calc.js.map | 2 +- package.json | 6 +- xlsx-calc.js | 2 +- xlsx-calc.js.map | 2 +- xlsx-calc.min.js | 2 +- yarn.lock | 2694 ++++++++---------------------------------- 7 files changed, 512 insertions(+), 2198 deletions(-) diff --git a/lib/xlsx-calc.js b/lib/xlsx-calc.js index a07ac87..2695d20 100644 --- a/lib/xlsx-calc.js +++ b/lib/xlsx-calc.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=9)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(5);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var l,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),l=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=l;w++){var A=[];v.push(A);for(var y=p;y<=g;y++){var m=o(y)+w,E=a+"!"+m,x=e.formula_ref[E];if(x){if("new"===x.status)e.exec_formula(x);else if("working"===x.status){if(x.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(x)}"e"===f[m].t?A.push(f[m]):A.push(f[m].v)}else f[m]?"e"===f[m].t?A.push(f[m]):A.push(f[m].v):A.push(null)}}return v}}},function(r,e){const t=new Error("#NULL!"),n=new Error("#DIV/0!"),o=new Error("#VALUE!"),i=new Error("#REF!"),a=new Error("#NAME?"),f=new Error("#NUM!"),u=new Error("#N/A"),l=new Error("#ERROR!"),s=new Error("#GETTING_DATA"),c=new Error("#CALC!"),h={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:t,div0:n,value:o,ref:i,name:a,num:f,na:u,error:l,data:s,calc:c,getErrorValueByMessage:function(r){return h[r]}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(7),i=t(13),a=t(3);let f,u;function l(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,l(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),l(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return l(e,t)?r(l(e,t),t):e}},function(r,e,t){"use strict";const n=t(5);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(10),a=t(8),f=t(19);var u=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(11);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function l(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){l(r).update_cell_value()}f(t(16)),a(t(18)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=l,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(12),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},l=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",y=A):h+=r}function w(r){"'"===r&&(y=A),h+=r}function A(e){var t,o;'"'===e?(y=v,h=""):"'"===e?(y=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=l[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var y=A,m=0;m0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),g(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),w("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),w("*",r,(function(r,e){return+r*+e})),w("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),w("&",r,(function(r,e){return""+r+e})),w("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),w(">=",r,(function(r,e){return r>=e})),w("<=",r,(function(r,e){return r<=e})),w("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!p(r)||!p(e))&&r!==e})),w("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!p(r)||!p(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";const{getErrorValueByMessage:n}=t(4);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";const n=t(17),o=t(4);let i={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":w,"_xlfn.NORM.INV":w,STDEV:function(){var r=p(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:v,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":g,"VAR.P":g,"_xlfn.COVARIANCE.P":h,"COVARIANCE.P":h,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:c,HLOOKUP:function(r,e,t,n){if(void 0===r||c(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(a=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&i>1&&(i===f&&1!==u||a===u&&1!==f))return o.na;if(a>1&&1===i&&(1!==f||1!==u&&u!==a))return o.na;const l=[];for(let t=0;t0&&l.push(o)}return 0===l.length?null!=t?n.addEmptyValuesToArray([[t]],i,a):n.addEmptyValuesToArray([[o.calc]],i,a):n.addEmptyValuesToArray(l,i,a)},function(){const r=a.apply(this,arguments);if(r instanceof Error)throw r;return r})};var a;function f(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function u(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function A(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function y(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=i},function(r,e){r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(()=>{return r={490:(r,e,t)=>{"use strict";const n=t(77),o=t(530),a=t(82);r.exports=class{constructor(r,e){this.workbook=r,this.expressions=[],this.exec_formula=e,this.variables={},this.formulas=a(r,e);for(let r=this.formulas.length-1;r>=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach((t=>{this.setVarOfExpression(t,r,e)}))}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach((r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach((e=>{this.setVarOfExpression(e,r.Name)}))}))}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()}))}}},755:(r,e,t)=>{"use strict";const n=t(77),o=(t(529),t(530)),a=864e5,i=t(161),l=t(217),s=t(948),{getErrorValueByMessage:f}=t(325);var u=0;r.exports=function(r){var e,t=this;function c(r,e){const t=e||{};r.t="e";const n=f(t.message);return void 0!==n&&(r.w=t.message,r.v=n,!0)}function h(r,e){if(e instanceof Error)c(r,e);else{const t=p(e);r.v=e,t&&(r.t=t)}}function p(r){return"string"==typeof r?"s":"number"==typeof r?"n":r instanceof Error?"e":void 0}function g(r){return null==r||""===r}function w(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function v(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),w(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/a,t/=a,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(m(t)))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(m(t)))}}}(r),v("/",r,s((function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e}))),v("*",r,s((function(r,e){return+r*+e}))),v("+",r,s((function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=a),+r+ +e}))),v("&",r,s((function(r,e){var t="";return null!==r&&(t+=r),null!==e&&(t+=e),t}))),v("<",r,s((function(r,e){return r",r,s((function(r,e){return r>e}))),v(">=",r,s((function(r,e){return r>=e}))),v("<=",r,s((function(r,e){return r<=e}))),v("<>",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():!(g(r)&&g(e)||r===e)}))),v("=",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!g(r)||!g(e))||null==r&&0===e||0===r&&null==e||"string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e}))),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var a=o(n,r);"="===a&&(">"==e||"<"==e)||"<"==e&&">"===a?t.args[t.args.length-1]+=a:t.args.push(a),e=a}}}},839:r=>{"use strict";r.exports=function(r){this.calc=function(){return r()}}},529:(r,e,t)=>{"use strict";const n=t(161),o=t(217),a=t(199);r.exports=function(r,e){this.parse=function(){var t,o,i;if(-1!=r.indexOf("!")){var l=r.split("!");o=a(l[0]),t=l[1]}else o=e.sheet_name,t=r;i=e.wb.Sheets[o];var s,f=t.split(":"),u=parseInt(f[0].replace(/^[A-Z]+/,""),10)||0,c=f[1].replace(/^[A-Z]+/,"");return""===c&&i["!ref"]&&(c=(i["!ref"].includes(":")?i["!ref"].split(":")[1]:i["!ref"]).replace(/^[A-Z]+/,"")),s=parseInt(""==c?"500000":c,10),{sheet_name:o,sheet:i,min_row:u,min_col:n(f[0]),max_row:s,max_col:n(f[1])}},this.calc=function(){for(var r=this.parse(),t=r.sheet_name,n=r.sheet,a=r.min_row,i=r.min_col,l=r.max_row,s=r.max_col,f=[],u=a;u<=l;u++){var c=[];f.push(c);for(var h=i;h<=s;h++){var p=o(h)+u,g=t+"!"+p,w=e.formula_ref[g];if(w){if("new"===w.status)e.exec_formula(w);else if("working"===w.status){if(w.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(w)}"e"===n[p].t?c.push(n[p]):c.push(n[p].v)}else n[p]?"e"===n[p].t?c.push(n[p]):c.push(n[p].v):c.push(null)}}return f}}},77:r=>{"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},596:(r,e,t)=>{"use strict";const n=t(199);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,a;if(-1!=r.indexOf("!")){var i=r.split("!");o=n(i[0]),t=e.wb.Sheets[o],a=i[1]}else t=e.sheet,o=e.sheet_name,a=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:a,cell_full_name:o+"!"+a}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,a=r.cell_full_name,i=n[o];if(!i)return null;var l=e.formula_ref[a];if(!l){if("e"===i.t)throw console.log("ref is an error with no formula",o),new Error(i.w);return i.v}if("new"===l.status){if(e.exec_formula(l),"e"===i.t)throw console.log("ref is an error with new formula",a,i.w),new Error(i.w);return i.v}if("working"===l.status){if(i.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(l),this.calc()}if("done"===l.status){if("e"===i.t)throw console.log("ref is an error after formula eval",a,i.w),new Error(i.w);return i.v}}}},120:(r,e,t)=>{"use strict";const{getErrorValueByMessage:n}=t(325);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{if((t=r.apply(e,e.args.map((r=>r.calc()))))instanceof Error)throw t}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},930:r=>{"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},161:r=>{"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},948:(r,e,t)=>{const n=t(325);r.exports=function(r){return function(){for(var e=!1,t=[],o=[],a=[],i=0,l=arguments.length;iArray.isArray(r)?r:[r])):[[s]];t[i]=u,o[i]=u.length,a[i]=u[0].length}for(var c=Math.max.apply(null,o),h=Math.max.apply(null,a),p=[],g=0;g{const e=new Error("#NULL!"),t=new Error("#DIV/0!"),n=new Error("#VALUE!"),o=new Error("#REF!"),a=new Error("#NAME?"),i=new Error("#NUM!"),l=new Error("#N/A"),s=new Error("#ERROR!"),f=new Error("#GETTING_DATA"),u=new Error("#CALC!"),c={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:e,div0:t,value:n,ref:o,name:a,num:i,na:l,error:s,data:f,calc:u,getErrorValueByMessage:function(r){return c[r]}}},534:(r,e,t)=>{"use strict";const n=t(940);let o={},a={};function i(r,e){for(var t in r)a[t]=r[t]}function l(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var a=r[n];"function"==typeof a?!e.override&&o[t+n]||(o[t+n]=a):"object"==typeof a&&l(a,s(e,{prefix:n+"."}))}}function s(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function f(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:a})}function u(r){f(r).update_cell_value()}l(t(649)),i(t(982)),u.set_fx=function(r,e){o[r]=e},u.exec_fx=function(r,e){return o[r].apply(this,e)},u.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),a[t]&&(a[e]=a[t])}},u.import_functions=l,u.import_raw_functions=i,u.build_expression=f,u.xlsx_Fx=o,r.exports=u},940:(r,e,t)=>{const n=t(755),o=t(77),a=t(120),i=t(930),l={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,s=e.xlsx_Fx||{},f=e.xlsx_raw_Fx||{},u=r.cell.f;"="==u[0]&&(u=u.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function w(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function v(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=w,h=""):"'"===e?(A=v,h="'"):"("===e?function(){var e,t=h.trim(),o=s[t],l=f[t];if(l)o=new i(l,r);else if(o)o=new a(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):l[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,E=0;E{"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let a=r.Sheets[o];for(let i in a)if(a[i]&&a[i].f){let l=t[o+"!"+i]={formula_ref:t,wb:r,sheet:a,sheet_name:o,cell:a[i],name:i,status:"new",exec_formula:e};n.push(l)}}return n}},982:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(948),i=t(77),l=t(529),s=t(596);r.exports={OFFSET:function(r,e,t,a,f){if(a=(a||new i(1)).calc(),f=(f||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var u=r.args[0],c=u.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),w=c.sheet_name+"!"+p+g;if(1===a&&1===f)return new s(w,u.formula).calc();var v=n(h+f-1);return new l(w+":"+(v+(g+a-1)),u.formula).calc()}},ROW:function(r){if(0===r.args.length)return+r.formula.name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&"RefValue"===r.args[0].name)return+r.args[0].parseRef().cell_name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&r.args[0]instanceof l){for(var e=r.args[0].parse(),t=e.min_row,n=e.max_row,o=[],a=t;a<=n;a++)o.push(a);return o}},COLUMN:function(r){if(0===r.args.length)return o(r.formula.name)+1;if(1===r.args.length&&"RefValue"===r.args[0].name){var e=r.args[0].parseRef();return o(e.cell_name)+1}if(1===r.args.length&&r.args[0]instanceof l){for(var t=r.args[0].parse(),n=t.min_col,a=t.max_col,i=[],s=n;s<=a;s++)i.push(s+1);return i}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){var n,o,i;try{n=r.calc()}catch(r){n=r}try{o=e.calc()}catch(r){o=r}try{i=void 0!==t&&t.calc()}catch(r){i=r}return a((function(r,e,t){return r instanceof Error?r:r?e:t}))(n,o,i)},AND:function(){for(var r=0;r{"use strict";const n=t(413),o=t(325);let a={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,a=0;aa[i])&&(r=a[i]);else(null==r||null!=a&&r>a)&&(r=a)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(a)),t=a):n=a,o++}while(Math.abs(i)>1e-6&&o<1e5);return a},"NORM.INV":h,"_xlfn.NORM.INV":h,STDEV:function(){var r=f(arguments),e=function(r){return r.reduce((function(r,e){return r+e}))/r.length}(r),t=r.map((function(r){return(r-e)*(r-e)}));return Math.sqrt(t.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:c,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":u,"VAR.P":u,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,a,i=e[0];if("string"==typeof r){for(a=r.toLowerCase(),o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}(e,r);if(-1===t)return function(r,e){for(var t,n,o=0;o0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))})),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,a=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++a===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(i=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&a>1&&(a===l&&1!==s||i===s&&1!==l))return o.na;if(i>1&&1===a&&(1!==l||1!==s&&s!==i))return o.na;const f=[];for(let t=0;t0&&f.push(o)}return 0===f.length?null!=t?n.addEmptyValuesToArray([[t]],a,i):n.addEmptyValuesToArray([[o.calc]],a,i):n.addEmptyValuesToArray(f,a,i)},function(){const r=i.apply(this,arguments);if(r instanceof Error)throw r;return r}),DATEDIF:function(r,e,t){if(r=new Date(r),e=new Date(e),!r||!e||"Invalid Date"==r||"Invalid Date"==e)throw Error("#VALUE!");switch(t=t.replace(/[^DMY]/gi,"")){case"M":return e.getMonth()-r.getMonth()+12*(e.getFullYear()-r.getFullYear());case"Y":return Math.abs(e.getUTCFullYear()-r.getUTCFullYear());default:var n=Math.abs(e-r);return Math.ceil(n/864e5)}},EOMONTH:function(r,e){if(!(r=new Date(r))||"Invalid Date"==r)throw Error("#VALUE!");e=e||0;var t=new Date(r.getUTCFullYear(),r.getUTCMonth()+e+1,0);return t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t}};var i;function l(r){return!r}function s(r,e){if(r=f(r),e=f(e),r.length!=e.length)return"N/D";for(var t=1/r.length,n=g.apply(this,r)/r.length,o=g.apply(this,e)/e.length,a=0,i=0;i1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?a=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,a=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(a=-a)),e+t*a);var n,o,a}function p(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)null!==n[o][a]&&void 0!==n[o][a]&&r++;else null!=t&&r++}return r}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)isNaN(n[o][a])||(r+=+n[o][a]);else r+=+t}return r}function w(r,e,t){if(r[e])return!1===r[e][t]?"FALSE":r[e][t]}r.exports=a},199:r=>{"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},44:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(534),i=t(82),l=t(490);var s=function(r,e){for(var t=i(r,a),n=t.length-1;n>=0;n--)try{if("done"===t[n].status)continue;a(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};s.calculator=function(r){return new l(r,a)},s.set_fx=a.set_fx,s.exec_fx=a.exec_fx,s.col_str_2_int=o,s.int_2_col_str=n,s.import_functions=a.import_functions,s.import_raw_functions=a.import_raw_functions,s.xlsx_Fx=a.xlsx_Fx,s.localizeFunctions=a.localizeFunctions,s.XLSX_CALC=s,r.exports=s},217:r=>{"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},530:(r,e,t)=>{const n=t(77),o=t(596),a=t(839),i=t(529);let l,s;function f(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(s!==e.wb)return s=e.wb,l=null,f(r,e);if(l)return l[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(l={},t.forEach((({Name:r,Ref:e})=>{r.includes(".")||(l[r]=e)})),f(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("FALSE"===e)return new n(0);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var l=r(e.substr(0,e.length-1),t);return new a((()=>l.calc()/100))}return f(e,t)?r(f(e,t),t):e}},413:(r,e,t)=>{const n=t(325);r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e 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":""} \ No newline at end of file +{"version":3,"file":"xlsx-calc.js","mappings":"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","sources":["webpack://xlsx-calc/webpack/universalModuleDefinition","webpack://xlsx-calc/./src/Calculator.js","webpack://xlsx-calc/./src/Exp.js","webpack://xlsx-calc/./src/LazyValue.js","webpack://xlsx-calc/./src/Range.js","webpack://xlsx-calc/./src/RawValue.js","webpack://xlsx-calc/./src/RefValue.js","webpack://xlsx-calc/./src/UserFnExecutor.js","webpack://xlsx-calc/./src/UserRawFnExecutor.js","webpack://xlsx-calc/./src/col_str_2_int.js","webpack://xlsx-calc/./src/dynamic_array_compatible.js","webpack://xlsx-calc/./src/errors.js","webpack://xlsx-calc/./src/exec_formula.js","webpack://xlsx-calc/./src/expression_builder.js","webpack://xlsx-calc/./src/find_all_cells_with_formulas.js","webpack://xlsx-calc/./src/formulas-raw.js","webpack://xlsx-calc/./src/formulas.js","webpack://xlsx-calc/./src/getSanitizedSheetName.js","webpack://xlsx-calc/./src/index.js","webpack://xlsx-calc/./src/int_2_col_str.js","webpack://xlsx-calc/./src/str_2_val.js","webpack://xlsx-calc/./src/utils.js","webpack://xlsx-calc/webpack/bootstrap","webpack://xlsx-calc/webpack/startup"],"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, () => {\nreturn ","\"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;","\"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 dynamic_array_compatible = require('./dynamic_array_compatible.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 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 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 (a instanceof Error) {\n throw a;\n }\n if (b instanceof Error) {\n throw b;\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 toNegative(value) {\n return Array.isArray(value) ? value.map(toNegative) : -value;\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(toNegative(b)));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(toNegative(b)));\n }\n }\n }\n }\n\n\tfunction execNegativePow(args, fn) {\n for (var i = 0; i < args.length - 2; i++) {\n if ('^' === args[i] && '-' === args[i+1]) {\n try {\n\t\t\t\t\tcheckVariable(args[i - 1]);\n\t\t\t\t\tcheckVariable(args[i + 2]);\n\n\t\t\t\t\tlet a = args[i - 1].calc();\n\t\t\t\t\tlet b = args[i + 2].calc();\n\t\t\t\t\tif (Array.isArray(a)) {\n\t\t\t\t\t\ta = a[getCurrentCellIndex() - 1][0];\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(b)) {\n\t\t\t\t\t\tb = b[getCurrentCellIndex() - 1][0];\n\t\t\t\t\t}\n\n\t\t\t\t\tlet r = fn(a, b);\n\t\t\t\t\targs.splice(i - 1, 4, new RawValue(r));\n\t\t\t\t\ti--;\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 self.calc = function() {\n let args = self.args.concat();\n execNegativePow(args, function(a, b) {\n return Math.pow(+a, 0-b);\n });\n exec('^', args, dynamic_array_compatible(function(a, b) {\n return Math.pow(+a, +b);\n }));\n exec_minus(args);\n exec('/', args, dynamic_array_compatible(function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n }));\n exec('*', args, dynamic_array_compatible(function(a, b) {\n return (+a) * (+b);\n }));\n exec('+', args, dynamic_array_compatible(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, dynamic_array_compatible(function(a, b) {\n var string = '';\n if (a !== null) {\n string += a;\n }\n if (b !== null) {\n string += b;\n }\n return string;\n }));\n exec('<', args, dynamic_array_compatible(function(a, b) {\n return a < b;\n }));\n exec('>', args, dynamic_array_compatible(function(a, b) {\n return a > b;\n }));\n exec('>=', args, dynamic_array_compatible(function(a, b) {\n return a >= b;\n }));\n exec('<=', args, dynamic_array_compatible(function(a, b) {\n return a <= b;\n }));\n exec('<>', args, dynamic_array_compatible(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, dynamic_array_compatible(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 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.parse = 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'].includes(':') ? sheet['!ref'].split(':')[1] : sheet['!ref']).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 return {\n sheet_name: sheet_name,\n sheet: sheet,\n min_row: min_row,\n min_col: min_col,\n max_row: max_row,\n max_col: max_col,\n };\n };\n this.calc = function() {\n var results = this.parse();\n var sheet_name = results.sheet_name;\n var sheet = results.sheet;\n var min_row = results.min_row;\n var min_col = results.min_col;\n var max_row = results.max_row;\n var max_col = results.max_col;\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","\"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\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\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 if (result instanceof Error) {\n throw result;\n }\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\";\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};","const error = require('./errors');\n\nmodule.exports = function dynamic_array_compatible(fn) {\n return function () {\n var hasArray = false;\n var parameters = [];\n var numberOfRows = [];\n var numberOfColumns = [];\n for (var i = 0, length = arguments.length; i < length; i++) {\n var argument = arguments[i];\n var isArray = Array.isArray(argument);\n if (isArray) {\n hasArray = true;\n }\n var parameter = isArray ? argument.map(value => Array.isArray(value) ? value : [value]) : [[argument]];\n parameters[i] = parameter;\n numberOfRows[i] = parameter.length;\n numberOfColumns[i] = parameter[0].length;\n }\n var maxNumberOfRows = Math.max.apply(null, numberOfRows);\n var maxNumberOfColumns = Math.max.apply(null, numberOfColumns);\n var results = [];\n for (var x = 0; x < maxNumberOfRows; x++) {\n results[x] = [];\n for (var y = 0; y < maxNumberOfColumns; y++) {\n var hasError = false;\n var elements = [];\n for (var i = 0, length = parameters.length; i < length; i++) {\n var element = parameters[i];\n var xKey = numberOfRows[i] === 1 ? 0 : x;\n var yKey = numberOfColumns[i] === 1 ? 0 : y;\n if (xKey in element) {\n element = element[xKey];\n if (yKey in element) {\n element = element[yKey];\n } else {\n hasError = true;\n break;\n }\n } else {\n hasError = true;\n break;\n }\n elements[i] = element;\n }\n results[x][y] = hasError ? error.na : fn.apply(null, elements);\n }\n }\n return hasArray ? results : results[0][0];\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\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\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 dynamic_array_compatible = require('./dynamic_array_compatible.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 row(cell_ref) {\n if (cell_ref.args.length === 0) {\n var row = +cell_ref.formula.name.replace(/^[A-Z]+/g, '');\n return row;\n } else 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 row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '');\n return row;\n } else if (cell_ref.args.length === 1 && cell_ref.args[0] instanceof Range) {\n var results = cell_ref.args[0].parse();\n var min_row = results.min_row;\n var max_row = results.max_row;\n var rows = [];\n for (var i = min_row; i <= max_row; i++) {\n rows.push(i);\n }\n return rows;\n }\n}\n\nfunction column(cell_ref) {\n if (cell_ref.args.length === 0) {\n var col = col_str_2_int(cell_ref.formula.name);\n return col + 1;\n } else 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);\n return col + 1;\n } else if (cell_ref.args.length === 1 && cell_ref.args[0] instanceof Range) {\n var results = cell_ref.args[0].parse();\n var min_col = results.min_col;\n var max_col = results.max_col;\n var cols = [];\n for (var i = min_col; i <= max_col; i++) {\n cols.push(i + 1);\n }\n return cols;\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 var condition_results;\n var then_results;\n var else_results;\n try {\n condition_results = condition.calc();\n } catch (e) {\n condition_results = e;\n }\n try {\n then_results = _then.calc();\n } catch (e) {\n then_results = e;\n }\n try {\n else_results = typeof _else === 'undefined' ? false : _else.calc();\n } catch (e) {\n else_results = e;\n }\n return dynamic_array_compatible(function (condition_result, then_result, else_result) {\n if (condition_result instanceof Error) {\n return condition_result;\n }\n return condition_result ? then_result : else_result;\n })(condition_results, then_results, else_results);\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 'ROW': row,\n 'COLUMN': column,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose,\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 'DATEDIF': datediff,\n 'EOMONTH': eomonth,\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] && 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 || !arguments[0]) {\n\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.getUTCDate();\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.getUTCMonth();\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.getUTCFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction datediff(date1, date2, unit) {\n date1 = new Date(date1);\n date2 = new Date(date2);\n\n if (!date1 || !date2 || date1 == 'Invalid Date' || date2 == 'Invalid Date') {\n throw Error('#VALUE!');\n }\n\n unit = unit.replace(/[^DMY]/ig, \"\");\n\n switch(unit) {\n case \"M\":\n return date2.getMonth() - date1.getMonth() + (12 * (date2.getFullYear() - date1.getFullYear()))\n case \"Y\":\n return Math.abs(date2.getUTCFullYear() - date1.getUTCFullYear());\n case \"D\": default: \n var timeDiff = Math.abs(date2 - date1);\n return Math.ceil(timeDiff / (1000 * 3600 * 24));\n }\n}\n\nfunction eomonth(date, months) {\n date = new Date(date);\n if (!date || date == 'Invalid Date') {\n throw Error('#VALUE!');\n }\n months = months || 0;\n var endofmonth = new Date(date.getUTCFullYear(), date.getUTCMonth()+months+1, 0);\n endofmonth.setUTCHours(0);\n endofmonth.setUTCMinutes(0);\n endofmonth.setUTCSeconds(0); \n return endofmonth;\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 = getMatrixValueForFilter(include, i, j) || getMatrixValueForFilter(include, 0, j) || getMatrixValueForFilter(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 getMatrixValueForFilter(matrix, i, j) {\n if (matrix[i]) {\n if (matrix[i][j] === false) {\n return 'FALSE'\n }\n return matrix[i][j]\n }\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","\"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","\"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 // https://github.com/fabiooshiro/xlsx-calc/issues/119\n if (formulas[i].status === 'done') {\n continue;\n }\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\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};","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 (buffer === 'FALSE') {\n return new RawValue(0);\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","const error = require('./errors')\n\nfunction 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}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(44);\n"],"names":["root","factory","exports","module","define","amd","a","i","this","RawValue","str_2_val","find_all_cells_with_formulas","constructor","workbook","exec_formula","expressions","variables","formulas","length","exp","build_expression","push","calcNames","setVar","var_name","value","variable","setValue","forEach","setVarOfExpression","getVars","vars","k","calc","Workbook","Names","item","val","getRef","Ref","Name","ref_name","Error","formula","formula_ref","wb","args","arg","name","execute","update_cell_value","MS_PER_DAY","col_str_2_int","int_2_col_str","dynamic_array_compatible","getErrorValueByMessage","exp_id","last_arg","self","applyCellError","cell","cellValueOrError","error","t","errorValue","message","undefined","w","v","applyCellValue","newCellType","getCellType","cellValue","isEmpty","checkVariable","obj","exec","op","fn","r","splice","b","e","toNegative","Array","isArray","map","id","array","colAndRow","match","colNumber","rowNumber","newCellNumber","j","newCellValue","destinationCellName","sheet","status","concat","getCurrentCellIndex","execNegativePow","Math","pow","Date","parse","exec_minus","string","getTime","toLowerCase","buffer","getSanitizedSheetName","str_expression","range_expression","sheet_name","indexOf","aux","split","Sheets","max_row","arr","min_row","parseInt","replace","str_max_row","includes","min_col","max_col","results","matrix","row","cell_name","cell_full_name","f","parseRef","resolved_ref","ref_cell","console","log","user_function","result","apply","col_str","colstr","charCodeAt","hasArray","parameters","numberOfRows","numberOfColumns","arguments","argument","parameter","maxNumberOfRows","max","maxNumberOfColumns","x","y","hasError","elements","element","xKey","yKey","na","nil","div0","ref","num","data","ERROR_MESSAGE_TO_VALUE","errorMessage","expression_builder","xlsx_Fx","xlsx_raw_Fx","import_raw_functions","functions","opts","key","import_functions","formulajs","prefix","override","my_assign","dest","source","JSON","stringify","set_fx","exec_fx","localizeFunctions","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","substr","exp_obj","was_string","fn_stack","char","state","start","single_quote","stack","o","trim_buffer","trim","special","special_raw","ini_parentheses","pop","add_operation","cells","Range","RefValue","cell_ref","rows","columns","height","width","ref_value","parsed_ref","col","end_range_col","cols","onerrorvalue","isNaN","Infinity","condition","_then","_else","condition_results","then_results","else_results","condition_result","then_result","else_result","expressionWithRange","colRow","matrixRow","destinationColumn","destinationRow","utils","floor","abs","sqrt","return_index","range_lookup","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","n","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","idx","match_exactly_string","match_exactly_non_string","indexValue","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","matrixArray","getRowCount","getColCount","rowCount","colCount","consistentSizeRanges","product","arrays","today","setHours","hours","minutes","seconds","date","getDate","day","getUTCDate","getMonth","month","getUTCMonth","getFullYear","year","getUTCFullYear","text","number","substring","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","s","sa","sb","elementToSum","sumResult","slice","call","elt","toString","option","old_text","new_text","occurrence","RegExp","significance","ceil","someFormula","include","if_empty","arrayWidth","arrayHeight","includeWidth","includeHeight","getMatrixValueForFilter","bool","parseBool","addEmptyValuesToArray","date1","date2","unit","timeDiff","months","endofmonth","setUTCHours","setUTCMinutes","setUTCSeconds","average","c","p","mu","sigma","quotedMatch","Calculator","mymodule","options","continue_after_error","log_error","calculator","XLSX_CALC","modulo","dividend","columnName","guard","String","fromCharCode","LazyValue","definedNames","getDefinedName","keys","Object","values","inner","requiredLength","requiredHeight","up","toUpperCase","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 691480a..da7e6b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xlsx-calc", - "version": "0.9.0", + "version": "0.9.1", "description": "A simple xlsx formula calculator.", "main": "src/index.js", "repository": "git@github.com:fabiooshiro/xlsx-calc.git", @@ -19,8 +19,8 @@ "nyc": "^15.1.0", "pre-commit": "^1.2.2", "typescript": "^4.9.4", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", + "webpack": "^5.93.0", + "webpack-cli": "^5.1.4", "xlsx": "^0.17.0" }, "tonicExampleFilename": "example_tonic.js", diff --git a/xlsx-calc.js b/xlsx-calc.js index a07ac87..2695d20 100644 --- a/xlsx-calc.js +++ b/xlsx-calc.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=9)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(5);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var l,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),l=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=l;w++){var A=[];v.push(A);for(var y=p;y<=g;y++){var m=o(y)+w,E=a+"!"+m,x=e.formula_ref[E];if(x){if("new"===x.status)e.exec_formula(x);else if("working"===x.status){if(x.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(x)}"e"===f[m].t?A.push(f[m]):A.push(f[m].v)}else f[m]?"e"===f[m].t?A.push(f[m]):A.push(f[m].v):A.push(null)}}return v}}},function(r,e){const t=new Error("#NULL!"),n=new Error("#DIV/0!"),o=new Error("#VALUE!"),i=new Error("#REF!"),a=new Error("#NAME?"),f=new Error("#NUM!"),u=new Error("#N/A"),l=new Error("#ERROR!"),s=new Error("#GETTING_DATA"),c=new Error("#CALC!"),h={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:t,div0:n,value:o,ref:i,name:a,num:f,na:u,error:l,data:s,calc:c,getErrorValueByMessage:function(r){return h[r]}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(7),i=t(13),a=t(3);let f,u;function l(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,l(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),l(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return l(e,t)?r(l(e,t),t):e}},function(r,e,t){"use strict";const n=t(5);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(10),a=t(8),f=t(19);var u=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(11);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function l(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){l(r).update_cell_value()}f(t(16)),a(t(18)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=l,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(12),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},l=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",y=A):h+=r}function w(r){"'"===r&&(y=A),h+=r}function A(e){var t,o;'"'===e?(y=v,h=""):"'"===e?(y=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=l[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var y=A,m=0;m0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),g(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),w("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),w("*",r,(function(r,e){return+r*+e})),w("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),w("&",r,(function(r,e){return""+r+e})),w("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),w(">=",r,(function(r,e){return r>=e})),w("<=",r,(function(r,e){return r<=e})),w("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!p(r)||!p(e))&&r!==e})),w("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!p(r)||!p(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";const{getErrorValueByMessage:n}=t(4);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";const n=t(17),o=t(4);let i={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":w,"_xlfn.NORM.INV":w,STDEV:function(){var r=p(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:v,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":g,"VAR.P":g,"_xlfn.COVARIANCE.P":h,"COVARIANCE.P":h,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:c,HLOOKUP:function(r,e,t,n){if(void 0===r||c(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(a=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&i>1&&(i===f&&1!==u||a===u&&1!==f))return o.na;if(a>1&&1===i&&(1!==f||1!==u&&u!==a))return o.na;const l=[];for(let t=0;t0&&l.push(o)}return 0===l.length?null!=t?n.addEmptyValuesToArray([[t]],i,a):n.addEmptyValuesToArray([[o.calc]],i,a):n.addEmptyValuesToArray(l,i,a)},function(){const r=a.apply(this,arguments);if(r instanceof Error)throw r;return r})};var a;function f(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function u(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function A(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function y(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=i},function(r,e){r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(()=>{return r={490:(r,e,t)=>{"use strict";const n=t(77),o=t(530),a=t(82);r.exports=class{constructor(r,e){this.workbook=r,this.expressions=[],this.exec_formula=e,this.variables={},this.formulas=a(r,e);for(let r=this.formulas.length-1;r>=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach((t=>{this.setVarOfExpression(t,r,e)}))}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach((r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach((e=>{this.setVarOfExpression(e,r.Name)}))}))}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()}))}}},755:(r,e,t)=>{"use strict";const n=t(77),o=(t(529),t(530)),a=864e5,i=t(161),l=t(217),s=t(948),{getErrorValueByMessage:f}=t(325);var u=0;r.exports=function(r){var e,t=this;function c(r,e){const t=e||{};r.t="e";const n=f(t.message);return void 0!==n&&(r.w=t.message,r.v=n,!0)}function h(r,e){if(e instanceof Error)c(r,e);else{const t=p(e);r.v=e,t&&(r.t=t)}}function p(r){return"string"==typeof r?"s":"number"==typeof r?"n":r instanceof Error?"e":void 0}function g(r){return null==r||""===r}function w(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function v(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),w(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/a,t/=a,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(m(t)))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(m(t)))}}}(r),v("/",r,s((function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e}))),v("*",r,s((function(r,e){return+r*+e}))),v("+",r,s((function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=a),+r+ +e}))),v("&",r,s((function(r,e){var t="";return null!==r&&(t+=r),null!==e&&(t+=e),t}))),v("<",r,s((function(r,e){return r",r,s((function(r,e){return r>e}))),v(">=",r,s((function(r,e){return r>=e}))),v("<=",r,s((function(r,e){return r<=e}))),v("<>",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():!(g(r)&&g(e)||r===e)}))),v("=",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!g(r)||!g(e))||null==r&&0===e||0===r&&null==e||"string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e}))),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var a=o(n,r);"="===a&&(">"==e||"<"==e)||"<"==e&&">"===a?t.args[t.args.length-1]+=a:t.args.push(a),e=a}}}},839:r=>{"use strict";r.exports=function(r){this.calc=function(){return r()}}},529:(r,e,t)=>{"use strict";const n=t(161),o=t(217),a=t(199);r.exports=function(r,e){this.parse=function(){var t,o,i;if(-1!=r.indexOf("!")){var l=r.split("!");o=a(l[0]),t=l[1]}else o=e.sheet_name,t=r;i=e.wb.Sheets[o];var s,f=t.split(":"),u=parseInt(f[0].replace(/^[A-Z]+/,""),10)||0,c=f[1].replace(/^[A-Z]+/,"");return""===c&&i["!ref"]&&(c=(i["!ref"].includes(":")?i["!ref"].split(":")[1]:i["!ref"]).replace(/^[A-Z]+/,"")),s=parseInt(""==c?"500000":c,10),{sheet_name:o,sheet:i,min_row:u,min_col:n(f[0]),max_row:s,max_col:n(f[1])}},this.calc=function(){for(var r=this.parse(),t=r.sheet_name,n=r.sheet,a=r.min_row,i=r.min_col,l=r.max_row,s=r.max_col,f=[],u=a;u<=l;u++){var c=[];f.push(c);for(var h=i;h<=s;h++){var p=o(h)+u,g=t+"!"+p,w=e.formula_ref[g];if(w){if("new"===w.status)e.exec_formula(w);else if("working"===w.status){if(w.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(w)}"e"===n[p].t?c.push(n[p]):c.push(n[p].v)}else n[p]?"e"===n[p].t?c.push(n[p]):c.push(n[p].v):c.push(null)}}return f}}},77:r=>{"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},596:(r,e,t)=>{"use strict";const n=t(199);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,a;if(-1!=r.indexOf("!")){var i=r.split("!");o=n(i[0]),t=e.wb.Sheets[o],a=i[1]}else t=e.sheet,o=e.sheet_name,a=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:a,cell_full_name:o+"!"+a}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,a=r.cell_full_name,i=n[o];if(!i)return null;var l=e.formula_ref[a];if(!l){if("e"===i.t)throw console.log("ref is an error with no formula",o),new Error(i.w);return i.v}if("new"===l.status){if(e.exec_formula(l),"e"===i.t)throw console.log("ref is an error with new formula",a,i.w),new Error(i.w);return i.v}if("working"===l.status){if(i.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(l),this.calc()}if("done"===l.status){if("e"===i.t)throw console.log("ref is an error after formula eval",a,i.w),new Error(i.w);return i.v}}}},120:(r,e,t)=>{"use strict";const{getErrorValueByMessage:n}=t(325);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{if((t=r.apply(e,e.args.map((r=>r.calc()))))instanceof Error)throw t}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},930:r=>{"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},161:r=>{"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},948:(r,e,t)=>{const n=t(325);r.exports=function(r){return function(){for(var e=!1,t=[],o=[],a=[],i=0,l=arguments.length;iArray.isArray(r)?r:[r])):[[s]];t[i]=u,o[i]=u.length,a[i]=u[0].length}for(var c=Math.max.apply(null,o),h=Math.max.apply(null,a),p=[],g=0;g{const e=new Error("#NULL!"),t=new Error("#DIV/0!"),n=new Error("#VALUE!"),o=new Error("#REF!"),a=new Error("#NAME?"),i=new Error("#NUM!"),l=new Error("#N/A"),s=new Error("#ERROR!"),f=new Error("#GETTING_DATA"),u=new Error("#CALC!"),c={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:e,div0:t,value:n,ref:o,name:a,num:i,na:l,error:s,data:f,calc:u,getErrorValueByMessage:function(r){return c[r]}}},534:(r,e,t)=>{"use strict";const n=t(940);let o={},a={};function i(r,e){for(var t in r)a[t]=r[t]}function l(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var a=r[n];"function"==typeof a?!e.override&&o[t+n]||(o[t+n]=a):"object"==typeof a&&l(a,s(e,{prefix:n+"."}))}}function s(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function f(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:a})}function u(r){f(r).update_cell_value()}l(t(649)),i(t(982)),u.set_fx=function(r,e){o[r]=e},u.exec_fx=function(r,e){return o[r].apply(this,e)},u.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),a[t]&&(a[e]=a[t])}},u.import_functions=l,u.import_raw_functions=i,u.build_expression=f,u.xlsx_Fx=o,r.exports=u},940:(r,e,t)=>{const n=t(755),o=t(77),a=t(120),i=t(930),l={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,s=e.xlsx_Fx||{},f=e.xlsx_raw_Fx||{},u=r.cell.f;"="==u[0]&&(u=u.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function w(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function v(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=w,h=""):"'"===e?(A=v,h="'"):"("===e?function(){var e,t=h.trim(),o=s[t],l=f[t];if(l)o=new i(l,r);else if(o)o=new a(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):l[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,E=0;E{"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let a=r.Sheets[o];for(let i in a)if(a[i]&&a[i].f){let l=t[o+"!"+i]={formula_ref:t,wb:r,sheet:a,sheet_name:o,cell:a[i],name:i,status:"new",exec_formula:e};n.push(l)}}return n}},982:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(948),i=t(77),l=t(529),s=t(596);r.exports={OFFSET:function(r,e,t,a,f){if(a=(a||new i(1)).calc(),f=(f||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var u=r.args[0],c=u.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),w=c.sheet_name+"!"+p+g;if(1===a&&1===f)return new s(w,u.formula).calc();var v=n(h+f-1);return new l(w+":"+(v+(g+a-1)),u.formula).calc()}},ROW:function(r){if(0===r.args.length)return+r.formula.name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&"RefValue"===r.args[0].name)return+r.args[0].parseRef().cell_name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&r.args[0]instanceof l){for(var e=r.args[0].parse(),t=e.min_row,n=e.max_row,o=[],a=t;a<=n;a++)o.push(a);return o}},COLUMN:function(r){if(0===r.args.length)return o(r.formula.name)+1;if(1===r.args.length&&"RefValue"===r.args[0].name){var e=r.args[0].parseRef();return o(e.cell_name)+1}if(1===r.args.length&&r.args[0]instanceof l){for(var t=r.args[0].parse(),n=t.min_col,a=t.max_col,i=[],s=n;s<=a;s++)i.push(s+1);return i}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){var n,o,i;try{n=r.calc()}catch(r){n=r}try{o=e.calc()}catch(r){o=r}try{i=void 0!==t&&t.calc()}catch(r){i=r}return a((function(r,e,t){return r instanceof Error?r:r?e:t}))(n,o,i)},AND:function(){for(var r=0;r{"use strict";const n=t(413),o=t(325);let a={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,a=0;aa[i])&&(r=a[i]);else(null==r||null!=a&&r>a)&&(r=a)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(a)),t=a):n=a,o++}while(Math.abs(i)>1e-6&&o<1e5);return a},"NORM.INV":h,"_xlfn.NORM.INV":h,STDEV:function(){var r=f(arguments),e=function(r){return r.reduce((function(r,e){return r+e}))/r.length}(r),t=r.map((function(r){return(r-e)*(r-e)}));return Math.sqrt(t.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:c,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":u,"VAR.P":u,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,a,i=e[0];if("string"==typeof r){for(a=r.toLowerCase(),o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}(e,r);if(-1===t)return function(r,e){for(var t,n,o=0;o0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))})),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,a=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++a===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(i=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&a>1&&(a===l&&1!==s||i===s&&1!==l))return o.na;if(i>1&&1===a&&(1!==l||1!==s&&s!==i))return o.na;const f=[];for(let t=0;t0&&f.push(o)}return 0===f.length?null!=t?n.addEmptyValuesToArray([[t]],a,i):n.addEmptyValuesToArray([[o.calc]],a,i):n.addEmptyValuesToArray(f,a,i)},function(){const r=i.apply(this,arguments);if(r instanceof Error)throw r;return r}),DATEDIF:function(r,e,t){if(r=new Date(r),e=new Date(e),!r||!e||"Invalid Date"==r||"Invalid Date"==e)throw Error("#VALUE!");switch(t=t.replace(/[^DMY]/gi,"")){case"M":return e.getMonth()-r.getMonth()+12*(e.getFullYear()-r.getFullYear());case"Y":return Math.abs(e.getUTCFullYear()-r.getUTCFullYear());default:var n=Math.abs(e-r);return Math.ceil(n/864e5)}},EOMONTH:function(r,e){if(!(r=new Date(r))||"Invalid Date"==r)throw Error("#VALUE!");e=e||0;var t=new Date(r.getUTCFullYear(),r.getUTCMonth()+e+1,0);return t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t}};var i;function l(r){return!r}function s(r,e){if(r=f(r),e=f(e),r.length!=e.length)return"N/D";for(var t=1/r.length,n=g.apply(this,r)/r.length,o=g.apply(this,e)/e.length,a=0,i=0;i1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?a=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,a=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(a=-a)),e+t*a);var n,o,a}function p(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)null!==n[o][a]&&void 0!==n[o][a]&&r++;else null!=t&&r++}return r}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)isNaN(n[o][a])||(r+=+n[o][a]);else r+=+t}return r}function w(r,e,t){if(r[e])return!1===r[e][t]?"FALSE":r[e][t]}r.exports=a},199:r=>{"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},44:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(534),i=t(82),l=t(490);var s=function(r,e){for(var t=i(r,a),n=t.length-1;n>=0;n--)try{if("done"===t[n].status)continue;a(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};s.calculator=function(r){return new l(r,a)},s.set_fx=a.set_fx,s.exec_fx=a.exec_fx,s.col_str_2_int=o,s.int_2_col_str=n,s.import_functions=a.import_functions,s.import_raw_functions=a.import_raw_functions,s.xlsx_Fx=a.xlsx_Fx,s.localizeFunctions=a.localizeFunctions,s.XLSX_CALC=s,r.exports=s},217:r=>{"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},530:(r,e,t)=>{const n=t(77),o=t(596),a=t(839),i=t(529);let l,s;function f(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(s!==e.wb)return s=e.wb,l=null,f(r,e);if(l)return l[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(l={},t.forEach((({Name:r,Ref:e})=>{r.includes(".")||(l[r]=e)})),f(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("FALSE"===e)return new n(0);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var l=r(e.substr(0,e.length-1),t);return new a((()=>l.calc()/100))}return f(e,t)?r(f(e,t),t):e}},413:(r,e,t)=>{const n=t(325);r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e 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":""} \ No newline at end of file +{"version":3,"file":"xlsx-calc.js","mappings":"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","sources":["webpack://xlsx-calc/webpack/universalModuleDefinition","webpack://xlsx-calc/./src/Calculator.js","webpack://xlsx-calc/./src/Exp.js","webpack://xlsx-calc/./src/LazyValue.js","webpack://xlsx-calc/./src/Range.js","webpack://xlsx-calc/./src/RawValue.js","webpack://xlsx-calc/./src/RefValue.js","webpack://xlsx-calc/./src/UserFnExecutor.js","webpack://xlsx-calc/./src/UserRawFnExecutor.js","webpack://xlsx-calc/./src/col_str_2_int.js","webpack://xlsx-calc/./src/dynamic_array_compatible.js","webpack://xlsx-calc/./src/errors.js","webpack://xlsx-calc/./src/exec_formula.js","webpack://xlsx-calc/./src/expression_builder.js","webpack://xlsx-calc/./src/find_all_cells_with_formulas.js","webpack://xlsx-calc/./src/formulas-raw.js","webpack://xlsx-calc/./src/formulas.js","webpack://xlsx-calc/./src/getSanitizedSheetName.js","webpack://xlsx-calc/./src/index.js","webpack://xlsx-calc/./src/int_2_col_str.js","webpack://xlsx-calc/./src/str_2_val.js","webpack://xlsx-calc/./src/utils.js","webpack://xlsx-calc/webpack/bootstrap","webpack://xlsx-calc/webpack/startup"],"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, () => {\nreturn ","\"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;","\"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 dynamic_array_compatible = require('./dynamic_array_compatible.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 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 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 (a instanceof Error) {\n throw a;\n }\n if (b instanceof Error) {\n throw b;\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 toNegative(value) {\n return Array.isArray(value) ? value.map(toNegative) : -value;\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(toNegative(b)));\n }\n else {\n if (typeof b === 'string') {\n throw new Error('#VALUE!');\n }\n args.splice(i, 2, new RawValue(toNegative(b)));\n }\n }\n }\n }\n\n\tfunction execNegativePow(args, fn) {\n for (var i = 0; i < args.length - 2; i++) {\n if ('^' === args[i] && '-' === args[i+1]) {\n try {\n\t\t\t\t\tcheckVariable(args[i - 1]);\n\t\t\t\t\tcheckVariable(args[i + 2]);\n\n\t\t\t\t\tlet a = args[i - 1].calc();\n\t\t\t\t\tlet b = args[i + 2].calc();\n\t\t\t\t\tif (Array.isArray(a)) {\n\t\t\t\t\t\ta = a[getCurrentCellIndex() - 1][0];\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(b)) {\n\t\t\t\t\t\tb = b[getCurrentCellIndex() - 1][0];\n\t\t\t\t\t}\n\n\t\t\t\t\tlet r = fn(a, b);\n\t\t\t\t\targs.splice(i - 1, 4, new RawValue(r));\n\t\t\t\t\ti--;\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 self.calc = function() {\n let args = self.args.concat();\n execNegativePow(args, function(a, b) {\n return Math.pow(+a, 0-b);\n });\n exec('^', args, dynamic_array_compatible(function(a, b) {\n return Math.pow(+a, +b);\n }));\n exec_minus(args);\n exec('/', args, dynamic_array_compatible(function(a, b) {\n if (b == 0) {\n throw Error('#DIV/0!');\n }\n return (+a) / (+b);\n }));\n exec('*', args, dynamic_array_compatible(function(a, b) {\n return (+a) * (+b);\n }));\n exec('+', args, dynamic_array_compatible(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, dynamic_array_compatible(function(a, b) {\n var string = '';\n if (a !== null) {\n string += a;\n }\n if (b !== null) {\n string += b;\n }\n return string;\n }));\n exec('<', args, dynamic_array_compatible(function(a, b) {\n return a < b;\n }));\n exec('>', args, dynamic_array_compatible(function(a, b) {\n return a > b;\n }));\n exec('>=', args, dynamic_array_compatible(function(a, b) {\n return a >= b;\n }));\n exec('<=', args, dynamic_array_compatible(function(a, b) {\n return a <= b;\n }));\n exec('<>', args, dynamic_array_compatible(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, dynamic_array_compatible(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 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.parse = 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'].includes(':') ? sheet['!ref'].split(':')[1] : sheet['!ref']).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 return {\n sheet_name: sheet_name,\n sheet: sheet,\n min_row: min_row,\n min_col: min_col,\n max_row: max_row,\n max_col: max_col,\n };\n };\n this.calc = function() {\n var results = this.parse();\n var sheet_name = results.sheet_name;\n var sheet = results.sheet;\n var min_row = results.min_row;\n var min_col = results.min_col;\n var max_row = results.max_row;\n var max_col = results.max_col;\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","\"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\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\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 if (result instanceof Error) {\n throw result;\n }\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\";\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};","const error = require('./errors');\n\nmodule.exports = function dynamic_array_compatible(fn) {\n return function () {\n var hasArray = false;\n var parameters = [];\n var numberOfRows = [];\n var numberOfColumns = [];\n for (var i = 0, length = arguments.length; i < length; i++) {\n var argument = arguments[i];\n var isArray = Array.isArray(argument);\n if (isArray) {\n hasArray = true;\n }\n var parameter = isArray ? argument.map(value => Array.isArray(value) ? value : [value]) : [[argument]];\n parameters[i] = parameter;\n numberOfRows[i] = parameter.length;\n numberOfColumns[i] = parameter[0].length;\n }\n var maxNumberOfRows = Math.max.apply(null, numberOfRows);\n var maxNumberOfColumns = Math.max.apply(null, numberOfColumns);\n var results = [];\n for (var x = 0; x < maxNumberOfRows; x++) {\n results[x] = [];\n for (var y = 0; y < maxNumberOfColumns; y++) {\n var hasError = false;\n var elements = [];\n for (var i = 0, length = parameters.length; i < length; i++) {\n var element = parameters[i];\n var xKey = numberOfRows[i] === 1 ? 0 : x;\n var yKey = numberOfColumns[i] === 1 ? 0 : y;\n if (xKey in element) {\n element = element[xKey];\n if (yKey in element) {\n element = element[yKey];\n } else {\n hasError = true;\n break;\n }\n } else {\n hasError = true;\n break;\n }\n elements[i] = element;\n }\n results[x][y] = hasError ? error.na : fn.apply(null, elements);\n }\n }\n return hasArray ? results : results[0][0];\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\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\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 dynamic_array_compatible = require('./dynamic_array_compatible.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 row(cell_ref) {\n if (cell_ref.args.length === 0) {\n var row = +cell_ref.formula.name.replace(/^[A-Z]+/g, '');\n return row;\n } else 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 row = +parsed_ref.cell_name.replace(/^[A-Z]+/g, '');\n return row;\n } else if (cell_ref.args.length === 1 && cell_ref.args[0] instanceof Range) {\n var results = cell_ref.args[0].parse();\n var min_row = results.min_row;\n var max_row = results.max_row;\n var rows = [];\n for (var i = min_row; i <= max_row; i++) {\n rows.push(i);\n }\n return rows;\n }\n}\n\nfunction column(cell_ref) {\n if (cell_ref.args.length === 0) {\n var col = col_str_2_int(cell_ref.formula.name);\n return col + 1;\n } else 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);\n return col + 1;\n } else if (cell_ref.args.length === 1 && cell_ref.args[0] instanceof Range) {\n var results = cell_ref.args[0].parse();\n var min_col = results.min_col;\n var max_col = results.max_col;\n var cols = [];\n for (var i = min_col; i <= max_col; i++) {\n cols.push(i + 1);\n }\n return cols;\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 var condition_results;\n var then_results;\n var else_results;\n try {\n condition_results = condition.calc();\n } catch (e) {\n condition_results = e;\n }\n try {\n then_results = _then.calc();\n } catch (e) {\n then_results = e;\n }\n try {\n else_results = typeof _else === 'undefined' ? false : _else.calc();\n } catch (e) {\n else_results = e;\n }\n return dynamic_array_compatible(function (condition_result, then_result, else_result) {\n if (condition_result instanceof Error) {\n return condition_result;\n }\n return condition_result ? then_result : else_result;\n })(condition_results, then_results, else_results);\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 'ROW': row,\n 'COLUMN': column,\n 'IFERROR': iferror,\n 'IF': _if,\n 'AND': and,\n 'OR': _or,\n 'TRANSPOSE': transpose,\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 'DATEDIF': datediff,\n 'EOMONTH': eomonth,\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] && 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 || !arguments[0]) {\n\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.getUTCDate();\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.getUTCMonth();\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.getUTCFullYear();\n if (isNaN(year)) {\n throw Error('#VALUE!');\n }\n return year;\n}\n\nfunction datediff(date1, date2, unit) {\n date1 = new Date(date1);\n date2 = new Date(date2);\n\n if (!date1 || !date2 || date1 == 'Invalid Date' || date2 == 'Invalid Date') {\n throw Error('#VALUE!');\n }\n\n unit = unit.replace(/[^DMY]/ig, \"\");\n\n switch(unit) {\n case \"M\":\n return date2.getMonth() - date1.getMonth() + (12 * (date2.getFullYear() - date1.getFullYear()))\n case \"Y\":\n return Math.abs(date2.getUTCFullYear() - date1.getUTCFullYear());\n case \"D\": default: \n var timeDiff = Math.abs(date2 - date1);\n return Math.ceil(timeDiff / (1000 * 3600 * 24));\n }\n}\n\nfunction eomonth(date, months) {\n date = new Date(date);\n if (!date || date == 'Invalid Date') {\n throw Error('#VALUE!');\n }\n months = months || 0;\n var endofmonth = new Date(date.getUTCFullYear(), date.getUTCMonth()+months+1, 0);\n endofmonth.setUTCHours(0);\n endofmonth.setUTCMinutes(0);\n endofmonth.setUTCSeconds(0); \n return endofmonth;\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 = getMatrixValueForFilter(include, i, j) || getMatrixValueForFilter(include, 0, j) || getMatrixValueForFilter(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 getMatrixValueForFilter(matrix, i, j) {\n if (matrix[i]) {\n if (matrix[i][j] === false) {\n return 'FALSE'\n }\n return matrix[i][j]\n }\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","\"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","\"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 // https://github.com/fabiooshiro/xlsx-calc/issues/119\n if (formulas[i].status === 'done') {\n continue;\n }\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\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};","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 (buffer === 'FALSE') {\n return new RawValue(0);\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","const error = require('./errors')\n\nfunction 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}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(44);\n"],"names":["root","factory","exports","module","define","amd","a","i","this","RawValue","str_2_val","find_all_cells_with_formulas","constructor","workbook","exec_formula","expressions","variables","formulas","length","exp","build_expression","push","calcNames","setVar","var_name","value","variable","setValue","forEach","setVarOfExpression","getVars","vars","k","calc","Workbook","Names","item","val","getRef","Ref","Name","ref_name","Error","formula","formula_ref","wb","args","arg","name","execute","update_cell_value","MS_PER_DAY","col_str_2_int","int_2_col_str","dynamic_array_compatible","getErrorValueByMessage","exp_id","last_arg","self","applyCellError","cell","cellValueOrError","error","t","errorValue","message","undefined","w","v","applyCellValue","newCellType","getCellType","cellValue","isEmpty","checkVariable","obj","exec","op","fn","r","splice","b","e","toNegative","Array","isArray","map","id","array","colAndRow","match","colNumber","rowNumber","newCellNumber","j","newCellValue","destinationCellName","sheet","status","concat","getCurrentCellIndex","execNegativePow","Math","pow","Date","parse","exec_minus","string","getTime","toLowerCase","buffer","getSanitizedSheetName","str_expression","range_expression","sheet_name","indexOf","aux","split","Sheets","max_row","arr","min_row","parseInt","replace","str_max_row","includes","min_col","max_col","results","matrix","row","cell_name","cell_full_name","f","parseRef","resolved_ref","ref_cell","console","log","user_function","result","apply","col_str","colstr","charCodeAt","hasArray","parameters","numberOfRows","numberOfColumns","arguments","argument","parameter","maxNumberOfRows","max","maxNumberOfColumns","x","y","hasError","elements","element","xKey","yKey","na","nil","div0","ref","num","data","ERROR_MESSAGE_TO_VALUE","errorMessage","expression_builder","xlsx_Fx","xlsx_raw_Fx","import_raw_functions","functions","opts","key","import_functions","formulajs","prefix","override","my_assign","dest","source","JSON","stringify","set_fx","exec_fx","localizeFunctions","dic","newName","oldName","Exp","UserFnExecutor","UserRawFnExecutor","common_operations","root_exp","str_formula","substr","exp_obj","was_string","fn_stack","char","state","start","single_quote","stack","o","trim_buffer","trim","special","special_raw","ini_parentheses","pop","add_operation","cells","Range","RefValue","cell_ref","rows","columns","height","width","ref_value","parsed_ref","col","end_range_col","cols","onerrorvalue","isNaN","Infinity","condition","_then","_else","condition_results","then_results","else_results","condition_result","then_result","else_result","expressionWithRange","colRow","matrixRow","destinationColumn","destinationRow","utils","floor","abs","sqrt","return_index","range_lookup","sum","min","rate_per_period","number_of_payments","present_value","future_value","type","q","counta","range","guess","n","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","idx","match_exactly_string","match_exactly_non_string","indexValue","match_less_than_or_equal","match_greater_than_or_equal","parseNumber","parseFloat","matrixArray","getRowCount","getColCount","rowCount","colCount","consistentSizeRanges","product","arrays","today","setHours","hours","minutes","seconds","date","getDate","day","getUTCDate","getMonth","month","getUTCMonth","getFullYear","year","getUTCFullYear","text","number","substring","decimalPlaces","round","roundMeasure","inv_n","avg_a","avg_b","s","sa","sb","elementToSum","sumResult","slice","call","elt","toString","option","old_text","new_text","occurrence","RegExp","significance","ceil","someFormula","include","if_empty","arrayWidth","arrayHeight","includeWidth","includeHeight","getMatrixValueForFilter","bool","parseBool","addEmptyValuesToArray","date1","date2","unit","timeDiff","months","endofmonth","setUTCHours","setUTCMinutes","setUTCSeconds","average","c","p","mu","sigma","quotedMatch","Calculator","mymodule","options","continue_after_error","log_error","calculator","XLSX_CALC","modulo","dividend","columnName","guard","String","fromCharCode","LazyValue","definedNames","getDefinedName","keys","Object","values","inner","requiredLength","requiredHeight","up","toUpperCase","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/xlsx-calc.min.js b/xlsx-calc.min.js index a07ac87..2695d20 100644 --- a/xlsx-calc.min.js +++ b/xlsx-calc.min.js @@ -1,2 +1,2 @@ -!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},t.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)t.d(n,o,function(e){return r[e]}.bind(null,o));return n},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p="",t(t.s=9)}([function(r,e,t){"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},function(r,e,t){"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},function(r,e,t){"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},function(r,e,t){"use strict";const n=t(2),o=t(1),i=t(5);r.exports=function(r,e){this.calc=function(){var t,a,f;if(-1!=r.indexOf("!")){var u=r.split("!");a=i(u[0]),t=u[1]}else a=e.sheet_name,t=r;f=e.wb.Sheets[a];var l,s=t.split(":"),c=parseInt(s[0].replace(/^[A-Z]+/,""),10)||0,h=s[1].replace(/^[A-Z]+/,"");""===h&&f["!ref"]&&(h=f["!ref"].split(":")[1].replace(/^[A-Z]+/,"")),l=parseInt(""==h?"500000":h,10);for(var p=n(s[0]),g=n(s[1]),v=[],w=c;w<=l;w++){var A=[];v.push(A);for(var y=p;y<=g;y++){var m=o(y)+w,E=a+"!"+m,x=e.formula_ref[E];if(x){if("new"===x.status)e.exec_formula(x);else if("working"===x.status){if(x.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(x)}"e"===f[m].t?A.push(f[m]):A.push(f[m].v)}else f[m]?"e"===f[m].t?A.push(f[m]):A.push(f[m].v):A.push(null)}}return v}}},function(r,e){const t=new Error("#NULL!"),n=new Error("#DIV/0!"),o=new Error("#VALUE!"),i=new Error("#REF!"),a=new Error("#NAME?"),f=new Error("#NUM!"),u=new Error("#N/A"),l=new Error("#ERROR!"),s=new Error("#GETTING_DATA"),c=new Error("#CALC!"),h={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:t,div0:n,value:o,ref:i,name:a,num:f,na:u,error:l,data:s,calc:c,getErrorValueByMessage:function(r){return h[r]}}},function(r,e,t){"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},function(r,e,t){const n=t(0),o=t(7),i=t(13),a=t(3);let f,u;function l(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(u!==e.wb)return u=e.wb,f=null,l(r,e);if(f)return f[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(f={},t.forEach(({Name:r,Ref:e})=>{r.includes(".")||(f[r]=e)}),l(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new a(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new a(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var f=r(e.substr(0,e.length-1),t);return new i(()=>f.calc()/100)}return l(e,t)?r(l(e,t),t):e}},function(r,e,t){"use strict";const n=t(5);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,i;if(-1!=r.indexOf("!")){var a=r.split("!");o=n(a[0]),t=e.wb.Sheets[o],i=a[1]}else t=e.sheet,o=e.sheet_name,i=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:i,cell_full_name:o+"!"+i}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,i=r.cell_full_name,a=n[o];if(!a)return null;var f=e.formula_ref[i];if(!f){if("e"===a.t)throw console.log("ref is an error with no formula",o),new Error(a.w);return a.v}if("new"===f.status){if(e.exec_formula(f),"e"===a.t)throw console.log("ref is an error with new formula",i,a.w),new Error(a.w);return a.v}if("working"===f.status){if(a.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(f),this.calc()}if("done"===f.status){if("e"===a.t)throw console.log("ref is an error after formula eval",i,a.w),new Error(a.w);return a.v}}}},function(r,e,t){"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let i=r.Sheets[o];for(let a in i)if(i[a]&&i[a].f){let f=t[o+"!"+a]={formula_ref:t,wb:r,sheet:i,sheet_name:o,cell:i[a],name:a,status:"new",exec_formula:e};n.push(f)}}return n}},function(r,e,t){"use strict";const n=t(1),o=t(2),i=t(10),a=t(8),f=t(19);var u=function(r,e){for(var t=a(r,i),n=t.length-1;n>=0;n--)try{i(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};u.calculator=function(r){return new f(r,i)},u.set_fx=i.set_fx,u.exec_fx=i.exec_fx,u.col_str_2_int=o,u.int_2_col_str=n,u.import_functions=i.import_functions,u.import_raw_functions=i.import_raw_functions,u.xlsx_Fx=i.xlsx_Fx,u.localizeFunctions=i.localizeFunctions,u.XLSX_CALC=u,r.exports=u},function(r,e,t){"use strict";const n=t(11);let o={},i={};function a(r,e){for(var t in r)i[t]=r[t]}function f(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var i=r[n];"function"==typeof i?!e.override&&o[t+n]||(o[t+n]=i):"object"==typeof i&&f(i,u(e,{prefix:n+"."}))}}function u(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function l(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:i})}function s(r){l(r).update_cell_value()}f(t(16)),a(t(18)),s.set_fx=function(r,e){o[r]=e},s.exec_fx=function(r,e){return o[r].apply(this,e)},s.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),i[t]&&(i[e]=i[t])}},s.import_functions=f,s.import_raw_functions=a,s.build_expression=l,s.xlsx_Fx=o,r.exports=s},function(r,e,t){const n=t(12),o=t(0),i=t(14),a=t(15),f={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,u=e.xlsx_Fx||{},l=e.xlsx_raw_Fx||{},s=r.cell.f;"="==s[0]&&(s=s.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function v(r){'"'===r?(c.push(new o(h)),p=!0,h="",y=A):h+=r}function w(r){"'"===r&&(y=A),h+=r}function A(e){var t,o;'"'===e?(y=v,h=""):"'"===e?(y=w,h="'"):"("===e?function(){var e,t=h.trim(),o=u[t],f=l[t];if(f)o=new a(f,r);else if(o)o=new i(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):f[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var y=A,m=0;m0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),g(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/864e5,t/=864e5,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(-t))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(-t))}}}(r),w("/",r,(function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e})),w("*",r,(function(r,e){return+r*+e})),w("+",r,(function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=864e5),+r+ +e})),w("&",r,(function(r,e){return""+r+e})),w("<",r,(function(r,e){return r",r,(function(r,e){return r>e})),w(">=",r,(function(r,e){return r>=e})),w("<=",r,(function(r,e){return r<=e})),w("<>",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():(!p(r)||!p(e))&&r!==e})),w("=",r,(function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!p(r)||!p(e))||(null==r&&0===e||0===r&&null==e||("string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e))})),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var o=i(n,r);"="===o&&(">"==e||"<"==e)||"<"==e&&">"===o?t.args[t.args.length-1]+=o:t.args.push(o),e=o}}}},function(r,e,t){"use strict";r.exports=function(r){this.calc=function(){return r()}}},function(r,e,t){"use strict";const{getErrorValueByMessage:n}=t(4);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{t=r.apply(e,e.args.map(r=>r.calc()))}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},function(r,e,t){"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},function(r,e,t){"use strict";const n=t(17),o=t(4);let i={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,i=0;ii[a])&&(r=i[a]);else(null==r||null!=i&&r>i)&&(r=i)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(i)),t=i):n=i,o++}while(Math.abs(a)>1e-6&&o<1e5);return i},"NORM.INV":w,"_xlfn.NORM.INV":w,STDEV:function(){var r=p(arguments);function e(r){return r.reduce((function(r,e){return r+e}))/r.length}var t=e(r),n=r.map((function(r){return(r-t)*(r-t)}));return Math.sqrt(n.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:v,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":g,"VAR.P":g,"_xlfn.COVARIANCE.P":h,"COVARIANCE.P":h,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:c,HLOOKUP:function(r,e,t,n){if(void 0===r||c(r))throw Error("#N/A");t=t||0;let o,i,a=e[0];if("string"==typeof r){for(i=r.toLowerCase(),o=0;o{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))}),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,i=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++i===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(a=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&i>1&&(i===f&&1!==u||a===u&&1!==f))return o.na;if(a>1&&1===i&&(1!==f||1!==u&&u!==a))return o.na;const l=[];for(let t=0;t0&&l.push(o)}return 0===l.length?null!=t?n.addEmptyValuesToArray([[t]],i,a):n.addEmptyValuesToArray([[o.calc]],i,a):n.addEmptyValuesToArray(l,i,a)},function(){const r=a.apply(this,arguments);if(r instanceof Error)throw r;return r})};var a;function f(r,e){for(var t,n,o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}function u(r,e){for(var t=0;t0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?i=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,i=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(i=-i)),e+t*i);var n,o,i}function A(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)null!==n[o][i]&&void 0!==n[o][i]&&r++;else null!=t&&r++}return r}function y(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var i=n[o].length;i--;)isNaN(n[o][i])||(r+=+n[o][i]);else r+=+t}return r}r.exports=i},function(r,e){r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach(t=>{this.setVarOfExpression(t,r,e)})}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach(r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach(e=>{this.setVarOfExpression(e,r.Name)})})}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()})}}}])})); +!function(r,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t=e();for(var n in t)("object"==typeof exports?exports:r)[n]=t[n]}}(this,(()=>{return r={490:(r,e,t)=>{"use strict";const n=t(77),o=t(530),a=t(82);r.exports=class{constructor(r,e){this.workbook=r,this.expressions=[],this.exec_formula=e,this.variables={},this.formulas=a(r,e);for(let r=this.formulas.length-1;r>=0;r--){let t=e.build_expression(this.formulas[r]);this.expressions.push(t)}this.calcNames()}setVar(r,e){let t=this.variables[r];t?t.setValue(e):this.expressions.forEach((t=>{this.setVarOfExpression(t,r,e)}))}getVars(){let r={};for(let e in this.variables)r[e]=this.variables[e].calc();return r}calcNames(){this.workbook&&this.workbook.Workbook&&this.workbook.Workbook.Names&&this.workbook.Workbook.Names.forEach((r=>{let e=this.getRef(r.Ref);this.variables[r.Name]=e,this.expressions.forEach((e=>{this.setVarOfExpression(e,r.Name)}))}))}getRef(r){if(!this.formulas.length)throw new Error("No formula found.");let e={formula_ref:this.formulas[0].formula_ref,wb:this.workbook,exec_formula:this.exec_formula};return o(r,e)}setVarOfExpression(r,e,t){for(let o=0;o{r.update_cell_value()}))}}},755:(r,e,t)=>{"use strict";const n=t(77),o=(t(529),t(530)),a=864e5,i=t(161),l=t(217),s=t(948),{getErrorValueByMessage:f}=t(325);var u=0;r.exports=function(r){var e,t=this;function c(r,e){const t=e||{};r.t="e";const n=f(t.message);return void 0!==n&&(r.w=t.message,r.v=n,!0)}function h(r,e){if(e instanceof Error)c(r,e);else{const t=p(e);r.v=e,t&&(r.t=t)}}function p(r){return"string"==typeof r?"s":"number"==typeof r?"n":r instanceof Error?"e":void 0}function g(r){return null==r||""===r}function w(r){if("function"!=typeof r.calc)throw new Error("Undefined "+r)}function v(r,e,t){for(var o=0;o0&&"string"!=typeof r[e-1]){if(r.splice(e,1,"+"),t instanceof Date){t=Date.parse(t),w(r[e-1]);var o=r[e-1].calc();o instanceof Date&&(o=Date.parse(o)/a,t/=a,r.splice(e-1,1,new n(o)))}r.splice(e+1,1,new n(m(t)))}else{if("string"==typeof t)throw new Error("#VALUE!");r.splice(e,2,new n(m(t)))}}}(r),v("/",r,s((function(r,e){if(0==e)throw Error("#DIV/0!");return+r/+e}))),v("*",r,s((function(r,e){return+r*+e}))),v("+",r,s((function(r,e){return r instanceof Date&&"number"==typeof e&&(e*=a),+r+ +e}))),v("&",r,s((function(r,e){var t="";return null!==r&&(t+=r),null!==e&&(t+=e),t}))),v("<",r,s((function(r,e){return r",r,s((function(r,e){return r>e}))),v(">=",r,s((function(r,e){return r>=e}))),v("<=",r,s((function(r,e){return r<=e}))),v("<>",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()!==e.getTime():!(g(r)&&g(e)||r===e)}))),v("=",r,s((function(r,e){return r instanceof Date&&e instanceof Date?r.getTime()===e.getTime():!(!g(r)||!g(e))||null==r&&0===e||0===r&&null==e||"string"==typeof r&&"string"==typeof e&&r.toLowerCase()===e.toLowerCase()||r===e}))),1==r.length)return"function"!=typeof r[0].calc?r[0]:r[0].calc()},t.push=function(n){if(n){var a=o(n,r);"="===a&&(">"==e||"<"==e)||"<"==e&&">"===a?t.args[t.args.length-1]+=a:t.args.push(a),e=a}}}},839:r=>{"use strict";r.exports=function(r){this.calc=function(){return r()}}},529:(r,e,t)=>{"use strict";const n=t(161),o=t(217),a=t(199);r.exports=function(r,e){this.parse=function(){var t,o,i;if(-1!=r.indexOf("!")){var l=r.split("!");o=a(l[0]),t=l[1]}else o=e.sheet_name,t=r;i=e.wb.Sheets[o];var s,f=t.split(":"),u=parseInt(f[0].replace(/^[A-Z]+/,""),10)||0,c=f[1].replace(/^[A-Z]+/,"");return""===c&&i["!ref"]&&(c=(i["!ref"].includes(":")?i["!ref"].split(":")[1]:i["!ref"]).replace(/^[A-Z]+/,"")),s=parseInt(""==c?"500000":c,10),{sheet_name:o,sheet:i,min_row:u,min_col:n(f[0]),max_row:s,max_col:n(f[1])}},this.calc=function(){for(var r=this.parse(),t=r.sheet_name,n=r.sheet,a=r.min_row,i=r.min_col,l=r.max_row,s=r.max_col,f=[],u=a;u<=l;u++){var c=[];f.push(c);for(var h=i;h<=s;h++){var p=o(h)+u,g=t+"!"+p,w=e.formula_ref[g];if(w){if("new"===w.status)e.exec_formula(w);else if("working"===w.status){if(w.cell.f.includes(e.name))throw new Error("Circular ref");e.exec_formula(w)}"e"===n[p].t?c.push(n[p]):c.push(n[p].v)}else n[p]?"e"===n[p].t?c.push(n[p]):c.push(n[p].v):c.push(null)}}return f}}},77:r=>{"use strict";r.exports=function(r){this.setValue=function(e){r=e},this.calc=function(){return r}}},596:(r,e,t)=>{"use strict";const n=t(199);r.exports=function(r,e){var t=this;this.name="RefValue",this.str_expression=r,this.formula=e,t.parseRef=function(){var t,o,a;if(-1!=r.indexOf("!")){var i=r.split("!");o=n(i[0]),t=e.wb.Sheets[o],a=i[1]}else t=e.sheet,o=e.sheet_name,a=r;if(!t)throw Error("Sheet "+o+" not found.");return{sheet:t,sheet_name:o,cell_name:a,cell_full_name:o+"!"+a}},this.calc=function(){var r=t.parseRef(),n=r.sheet,o=r.cell_name,a=r.cell_full_name,i=n[o];if(!i)return null;var l=e.formula_ref[a];if(!l){if("e"===i.t)throw console.log("ref is an error with no formula",o),new Error(i.w);return i.v}if("new"===l.status){if(e.exec_formula(l),"e"===i.t)throw console.log("ref is an error with new formula",a,i.w),new Error(i.w);return i.v}if("working"===l.status){if(i.f.includes(e.name))throw new Error("Circular ref");return e.exec_formula(l),this.calc()}if("done"===l.status){if("e"===i.t)throw console.log("ref is an error after formula eval",a,i.w),new Error(i.w);return i.v}}}},120:(r,e,t)=>{"use strict";const{getErrorValueByMessage:n}=t(325);r.exports=function(r){var e=this;e.name="UserFn",e.args=[],e.calc=function(){var t;try{if((t=r.apply(e,e.args.map((r=>r.calc()))))instanceof Error)throw t}catch(e){const o=n(e.message);if("is_blank"===r.name&&void 0!==o)t=0;else{if("iserror"!==r.name||void 0===o)throw e;t=!0}}return t},e.push=function(r){e.args.push(r)}}},930:r=>{"use strict";r.exports=function(r,e){var t=this;t.name="UserRawFn",t.args=[],t.calc=function(){try{return r.apply(t,t.args)}catch(r){throw r}},t.push=function(r){t.args.push(r)}}},161:r=>{"use strict";r.exports=function(r){for(var e=0,t=r.replace(/[0-9]+$/,""),n=t.length;n--;)e+=Math.pow(26,t.length-n-1)*(t.charCodeAt(n)-64);return e-1}},948:(r,e,t)=>{const n=t(325);r.exports=function(r){return function(){for(var e=!1,t=[],o=[],a=[],i=0,l=arguments.length;iArray.isArray(r)?r:[r])):[[s]];t[i]=u,o[i]=u.length,a[i]=u[0].length}for(var c=Math.max.apply(null,o),h=Math.max.apply(null,a),p=[],g=0;g{const e=new Error("#NULL!"),t=new Error("#DIV/0!"),n=new Error("#VALUE!"),o=new Error("#REF!"),a=new Error("#NAME?"),i=new Error("#NUM!"),l=new Error("#N/A"),s=new Error("#ERROR!"),f=new Error("#GETTING_DATA"),u=new Error("#CALC!"),c={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#CALC!":0};r.exports={nil:e,div0:t,value:n,ref:o,name:a,num:i,na:l,error:s,data:f,calc:u,getErrorValueByMessage:function(r){return c[r]}}},534:(r,e,t)=>{"use strict";const n=t(940);let o={},a={};function i(r,e){for(var t in r)a[t]=r[t]}function l(r,e){var t=(e=e||{}).prefix||"";for(var n in r){var a=r[n];"function"==typeof a?!e.override&&o[t+n]||(o[t+n]=a):"object"==typeof a&&l(a,s(e,{prefix:n+"."}))}}function s(r,e){var t=JSON.parse(JSON.stringify(r));for(var n in e)t[n]=e[n];return t}function f(r){return n(r,{xlsx_Fx:o,xlsx_raw_Fx:a})}function u(r){f(r).update_cell_value()}l(t(649)),i(t(982)),u.set_fx=function(r,e){o[r]=e},u.exec_fx=function(r,e){return o[r].apply(this,e)},u.localizeFunctions=function(r){for(let e in r){let t=r[e];o[t]&&(o[e]=o[t]),a[t]&&(a[e]=a[t])}},u.import_functions=l,u.import_raw_functions=i,u.build_expression=f,u.xlsx_Fx=o,r.exports=u},940:(r,e,t)=>{const n=t(755),o=t(77),a=t(120),i=t(930),l={"*":"multiply","+":"plus","-":"minus","/":"divide","^":"power","&":"concat","<":"lt",">":"gt","=":"eq"};r.exports=function(r,e){r.status="working";var t,s=e.xlsx_Fx||{},f=e.xlsx_raw_Fx||{},u=r.cell.f;"="==u[0]&&(u=u.substr(1));var c=t=new n(r),h="",p=!1,g=[{exp:c}];function w(r){'"'===r?(c.push(new o(h)),p=!0,h="",A=m):h+=r}function v(r){"'"===r&&(A=m),h+=r}function m(e){var t,o;'"'===e?(A=w,h=""):"'"===e?(A=v,h="'"):"("===e?function(){var e,t=h.trim(),o=s[t],l=f[t];if(l)o=new i(l,r);else if(o)o=new a(o,r);else if(t)throw new Error('"'+r.sheet_name+'"!'+r.name+": Function "+h+" not found");e=new n(r),g.push({exp:e,special:o}),c=e,h=""}():")"===e?(o=g.pop(),(c=o.exp).push(h),t=c,h="",c=g[g.length-1].exp,o.special?(o.special.push(t),c.push(o.special)):c.push(t)):l[e]?function(r){p||c.push(h),p=!1,c.push(r),h=""}(e):","===e&&g[g.length-1].special?(p=!1,g[g.length-1].exp.push(h),g[g.length-1].special.push(g[g.length-1].exp),g[g.length-1].exp=c=new n(r),h=""):" "!==e&&(h+=e)}for(var A=m,E=0;E{"use strict";r.exports=function(r,e){let t={},n=[];for(let o in r.Sheets){let a=r.Sheets[o];for(let i in a)if(a[i]&&a[i].f){let l=t[o+"!"+i]={formula_ref:t,wb:r,sheet:a,sheet_name:o,cell:a[i],name:i,status:"new",exec_formula:e};n.push(l)}}return n}},982:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(948),i=t(77),l=t(529),s=t(596);r.exports={OFFSET:function(r,e,t,a,f){if(a=(a||new i(1)).calc(),f=(f||new i(1)).calc(),1===r.args.length&&"RefValue"===r.args[0].name){var u=r.args[0],c=u.parseRef(),h=o(c.cell_name)+t.calc(),p=n(h),g=+c.cell_name.replace(/^[A-Z]+/g,"")+e.calc(),w=c.sheet_name+"!"+p+g;if(1===a&&1===f)return new s(w,u.formula).calc();var v=n(h+f-1);return new l(w+":"+(v+(g+a-1)),u.formula).calc()}},ROW:function(r){if(0===r.args.length)return+r.formula.name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&"RefValue"===r.args[0].name)return+r.args[0].parseRef().cell_name.replace(/^[A-Z]+/g,"");if(1===r.args.length&&r.args[0]instanceof l){for(var e=r.args[0].parse(),t=e.min_row,n=e.max_row,o=[],a=t;a<=n;a++)o.push(a);return o}},COLUMN:function(r){if(0===r.args.length)return o(r.formula.name)+1;if(1===r.args.length&&"RefValue"===r.args[0].name){var e=r.args[0].parseRef();return o(e.cell_name)+1}if(1===r.args.length&&r.args[0]instanceof l){for(var t=r.args[0].parse(),n=t.min_col,a=t.max_col,i=[],s=n;s<=a;s++)i.push(s+1);return i}},IFERROR:function(r,e){try{var t=r.calc();return"number"!=typeof t||!isNaN(t)&&t!==1/0&&t!==-1/0?t:e.calc()}catch(r){return e.calc()}},IF:function(r,e,t){var n,o,i;try{n=r.calc()}catch(r){n=r}try{o=e.calc()}catch(r){o=r}try{i=void 0!==t&&t.calc()}catch(r){i=r}return a((function(r,e,t){return r instanceof Error?r:r?e:t}))(n,o,i)},AND:function(){for(var r=0;r{"use strict";const n=t(413),o=t(325);let a={FLOOR:Math.floor,"_xlfn.FLOOR.MATH":Math.floor,"FLOOR.MATH":Math.floor,ABS:Math.abs,SQRT:Math.sqrt,VLOOKUP:function(r,e,t,n=!0){for(var o=null,a=0;aa[i])&&(r=a[i]);else(null==r||null!=a&&r>a)&&(r=a)}else!isNaN(t)&&(null==r||null!=t&&r>t)&&(r=t)}return r},CONCATENATE:function(){for(var r="",e=0;e0?(t===n&&(n+=Math.abs(a)),t=a):n=a,o++}while(Math.abs(i)>1e-6&&o<1e5);return a},"NORM.INV":h,"_xlfn.NORM.INV":h,STDEV:function(){var r=f(arguments),e=function(r){return r.reduce((function(r,e){return r+e}))/r.length}(r),t=r.map((function(r){return(r-e)*(r-e)}));return Math.sqrt(t.reduce((function(r,e){return r+e}))/(r.length-1))},AVERAGE:c,EXP:function(r){return Math.pow(Math.E,r)},LN:Math.log,"_xlfn.VAR.P":u,"VAR.P":u,"_xlfn.COVARIANCE.P":s,"COVARIANCE.P":s,TRIM:function(r){return(""+r).trim()},LEN:function(r){return(""+r).length},ISBLANK:l,HLOOKUP:function(r,e,t,n){if(void 0===r||l(r))throw Error("#N/A");t=t||0;let o,a,i=e[0];if("string"==typeof r){for(a=r.toLowerCase(),o=0;on&&(t=o+1,n=r[o]):(t=o+1,n=r[o]))}if(!t)throw Error("#N/A");return t}(e,r);if(-1===t)return function(r,e){for(var t,n,o=0;o0){if(r[o][0]===e)return o+1;r[o][0]>e&&(n?r[o][0]e&&(n?r[o]{null!==t&&(t=t.toString()).replace(/\'/g,"")===r&&(isNaN([].slice.call(arguments)[2][0][n])||(e+=[].slice.call(arguments)[2][0][n]))})),e},CHOOSE:function(r){return arguments[r]},SUBSTITUTE:function(r,e,t,n){if(n<=0)throw Error("#VALUE!");if(!r||!e||!t&&""!==t)return r;if(void 0===n)return r.replace(new RegExp(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),t);for(var o=0,a=0;r.indexOf(e,o)>0;)if(o=r.indexOf(e,o+1),++a===n)return r.substring(0,o)+t+r.substring(o+e.length)},CEILING:function(r,e){return Math.ceil(r/e)*e},FILTER:(i=function(r,e,t){if(!r||!e)return o.na;if(!(r instanceof Array))return o.na;if(!(e instanceof Array))return o.na;if(0===r.length)return o.na;if(0===e.length)return o.na;for(let e=0;e1&&a>1&&(a===l&&1!==s||i===s&&1!==l))return o.na;if(i>1&&1===a&&(1!==l||1!==s&&s!==i))return o.na;const f=[];for(let t=0;t0&&f.push(o)}return 0===f.length?null!=t?n.addEmptyValuesToArray([[t]],a,i):n.addEmptyValuesToArray([[o.calc]],a,i):n.addEmptyValuesToArray(f,a,i)},function(){const r=i.apply(this,arguments);if(r instanceof Error)throw r;return r}),DATEDIF:function(r,e,t){if(r=new Date(r),e=new Date(e),!r||!e||"Invalid Date"==r||"Invalid Date"==e)throw Error("#VALUE!");switch(t=t.replace(/[^DMY]/gi,"")){case"M":return e.getMonth()-r.getMonth()+12*(e.getFullYear()-r.getFullYear());case"Y":return Math.abs(e.getUTCFullYear()-r.getUTCFullYear());default:var n=Math.abs(e-r);return Math.ceil(n/864e5)}},EOMONTH:function(r,e){if(!(r=new Date(r))||"Invalid Date"==r)throw Error("#VALUE!");e=e||0;var t=new Date(r.getUTCFullYear(),r.getUTCMonth()+e+1,0);return t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t}};var i;function l(r){return!r}function s(r,e){if(r=f(r),e=f(e),r.length!=e.length)return"N/D";for(var t=1/r.length,n=g.apply(this,r)/r.length,o=g.apply(this,e)/e.length,a=0,i=0;i1)throw"The probality p must be bigger than 0 and smaller than 1";if(t<0)throw"The standard deviation sigma must be positive";return 0==r?-1/0:1==r?1/0:0==t?e:(n=r-.5,Math.abs(n)<=.425?a=n*(((((((2509.0809287301227*(o=.180625-n*n)+33430.57558358813)*o+67265.7709270087)*o+45921.95393154987)*o+13731.69376550946)*o+1971.5909503065513)*o+133.14166789178438)*o+3.3871328727963665)/(((((((5226.495278852854*o+28729.085735721943)*o+39307.89580009271)*o+21213.794301586597)*o+5394.196021424751)*o+687.1870074920579)*o+42.31333070160091)*o+1):(o=n>0?1-r:r,a=(o=Math.sqrt(-Math.log(o)))<=5?(((((((.0007745450142783414*(o+=-1.6)+.022723844989269184)*o+.2417807251774506)*o+1.2704582524523684)*o+3.6478483247632045)*o+5.769497221460691)*o+4.630337846156546)*o+1.4234371107496835)/(((((((1.0507500716444169e-9*o+.0005475938084995345)*o+.015198666563616457)*o+.14810397642748008)*o+.6897673349851)*o+1.6763848301838038)*o+2.053191626637759)*o+1):(((((((2.0103343992922881e-7*(o+=-5)+27115555687434876e-21)*o+.0012426609473880784)*o+.026532189526576124)*o+.29656057182850487)*o+1.7848265399172913)*o+5.463784911164114)*o+6.657904643501103)/(((((((20442631033899397e-31*o+1.421511758316446e-7)*o+18463183175100548e-21)*o+.0007868691311456133)*o+.014875361290850615)*o+.1369298809227358)*o+.599832206555888)*o+1),n<0&&(a=-a)),e+t*a);var n,o,a}function p(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)null!==n[o][a]&&void 0!==n[o][a]&&r++;else null!=t&&r++}return r}function g(){for(var r=0,e=arguments.length;e--;){var t=arguments[e];if(Array.isArray(t))for(var n=t,o=n.length;o--;)for(var a=n[o].length;a--;)isNaN(n[o][a])||(r+=+n[o][a]);else r+=+t}return r}function w(r,e,t){if(r[e])return!1===r[e][t]?"FALSE":r[e][t]}r.exports=a},199:r=>{"use strict";r.exports=function(r){var e=r.match(/^'(.*)'$/);return e?e[1]:r}},44:(r,e,t)=>{"use strict";const n=t(217),o=t(161),a=t(534),i=t(82),l=t(490);var s=function(r,e){for(var t=i(r,a),n=t.length-1;n>=0;n--)try{if("done"===t[n].status)continue;a(t[n])}catch(r){if(!e||!e.continue_after_error)throw r;e.log_error&&console.log("error executing formula","sheet",t[n].sheet_name,"cell",t[n].name,r)}};s.calculator=function(r){return new l(r,a)},s.set_fx=a.set_fx,s.exec_fx=a.exec_fx,s.col_str_2_int=o,s.int_2_col_str=n,s.import_functions=a.import_functions,s.import_raw_functions=a.import_raw_functions,s.xlsx_Fx=a.xlsx_Fx,s.localizeFunctions=a.localizeFunctions,s.XLSX_CALC=s,r.exports=s},217:r=>{"use strict";r.exports=function(r){for(var e,t=r+1,n="",o=10;t>0&&o--;)e=(t-1)%26,n=String.fromCharCode(e+65)+n,t=(t-e-1)/26;return n}},530:(r,e,t)=>{const n=t(77),o=t(596),a=t(839),i=t(529);let l,s;function f(r,e){if(!e.wb.Workbook||!e.wb.Workbook.Names)return null;if(s!==e.wb)return s=e.wb,l=null,f(r,e);if(l)return l[r];const t=Object.values(e.wb.Workbook.Names);return 0!==t.length?(l={},t.forEach((({Name:r,Ref:e})=>{r.includes(".")||(l[r]=e)})),f(r,e)):void 0}r.exports=function r(e,t){if(!isNaN(e))return new n(+e);if("TRUE"===e)return new n(1);if("FALSE"===e)return new n(0);if("string"!=typeof e)return e;if((e=e.trim().replace(/\$/g,"")).match(/^[A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+:[A-Z]+[0-9]+$/))return new i(e,t);if(e.match(/^[A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[^!]+![A-Z]+:[A-Z]+$/))return new i(e,t);if(e.match(/^[A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/^[^!]+![A-Z]+[0-9]+$/))return new o(e,t);if(e.match(/%$/)){var l=r(e.substr(0,e.length-1),t);return new a((()=>l.calc()/100))}return f(e,t)?r(f(e,t),t):e}},413:(r,e,t)=>{const n=t(325);r.exports={addEmptyValuesToArray:function(r,e,t){if(!r||!e||!t)return r;if(e<0||t<0)return r;if(!Array.isArray(r)||!r.length)return r;for(let e=0;e