UNPKG

@fortune-sheet/core

Version:

FortuneSheet is a drop-in javascript spreadsheet library that provides rich features like Excel and Google Sheets

1,801 lines (1,767 loc) 2.47 MB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _ = require('lodash'); var numeral = require('numeral'); var dayjs = require('dayjs'); var formulaParser = require('@fortune-sheet/formula-parser'); var uuid = require('uuid'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var ___default = /*#__PURE__*/_interopDefaultLegacy(_); var numeral__default = /*#__PURE__*/_interopDefaultLegacy(numeral); var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var en = { generalDialog: { partiallyError: "Cannot perform this operation on partially merged cells", readOnlyError: "Cannot perform this operation in read-only mode", dataNullError: "Cannot perform this operation on data that does not exist", noSeletionError: "The selection operation has not been performed yet", cannotSelectMultiple: "Cannot select multiple selections" }, functionlist: [{ n: "SUMIF", t: 0, d: "Returns a conditional sum across a range.", a: "A conditional sum across a range.", m: [2, 3], p: [{ name: "range", detail: "The range which is tested against `criterion`.", example: "A1:A10", require: "m", repeat: "n", type: "range" }, { name: "criterion", detail: "The pattern or test to apply to `range`.", example: '">20"', require: "m", repeat: "n", type: "rangeall" }, { name: "sum_range", detail: "The range to be summed, if different from `range`.", example: "B1:B10", require: "o", repeat: "n", type: "range" }] }, { n: "TAN", t: 0, d: "Returns the tangent of an angle provided in radians.", a: "Tangent of an angle provided in radians.", m: [1, 1], p: [{ name: "angle", detail: "The angle to find the tangent of, in radians.", example: "45*PI()/180", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "TANH", t: 0, d: "Returns the hyperbolic tangent of any real number.", a: "Hyperbolic tangent of any real number.", m: [1, 1], p: [{ name: "value", detail: "Any real value to calculate the hyperbolic tangent of.", example: "A2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "CEILING", t: 0, d: "Rounds a number up to the nearest integer multiple of specified significance `factor`.", a: "Rounds number up to nearest multiple of a factor.", m: [2, 2], p: [{ name: "value", detail: "The value to round up to the nearest integer multiple of `factor`.", example: "23.25", require: "m", repeat: "n", type: "rangenumber" }, { name: "factor", detail: "The number to whose multiples `value` will be rounded.", example: "0.1", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ATAN", t: 0, d: "Returns the inverse tangent of a value, in radians.", a: "Inverse tangent of a value, in radians.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse tangent.", example: "0", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ASINH", t: 0, d: "Returns the inverse hyperbolic sine of a number.", a: "Inverse hyperbolic sine of a number.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse hyperbolic sine.", example: "0.9", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ABS", t: 0, d: "Returns the absolute value of a number.", a: "Absolute value of a number.", m: [1, 1], p: [{ name: "value", detail: "The number of which to return the absolute value.", example: "-2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ACOS", t: 0, d: "Returns the inverse cosine of a value, in radians.", a: "Inverse cosine of a value, in radians.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse cosine. Must be between `-1` and `1`, inclusive.", example: "0", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ACOSH", t: 0, d: "Returns the inverse hyperbolic cosine of a number.", a: "Inverse hyperbolic cosine of a number.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse hyperbolic cosine. Must be greater than or equal to `1`.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "MULTINOMIAL", t: 0, d: "Returns the factorial of the sum of values divided by the product of the values' factorials.", a: "Multinomial distribution function.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider.", example: "1", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider.", example: "2", require: "o", repeat: "y", type: "rangeall" }] }, { n: "ATANH", t: 0, d: "Returns the inverse hyperbolic tangent of a number.", a: "Inverse hyperbolic tangent of a number.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse hyperbolic tangent. Must be between -1 and 1, exclusive.", example: "0.9", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ATAN2", t: 0, d: "Returns the angle between the x-axis and a line segment from the origin (0,0) to specified coordinate pair (`x`,`y`), in radians.", a: "Arctangent of a value.", m: [2, 2], p: [{ name: "x", detail: "The x coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "y", detail: "The y coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis.", example: "3", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "COUNTBLANK", t: 1, d: "Returns the number of empty values in a list of values and ranges.", a: "Number of empty values.", m: [1, 1], p: [{ name: "value1", detail: "The first value or range in which to count the number of blanks.", example: "A2:C100", require: "m", repeat: "n", type: "range" }] }, { n: "COSH", t: 0, d: "Returns the hyperbolic cosine of any real number.", a: "Hyperbolic cosine of any real number.", m: [1, 1], p: [{ name: "value", detail: "Any real value to calculate the hyperbolic cosine of.", example: "A2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "INT", t: 0, d: "Rounds a number down to the nearest integer that is less than or equal to it.", a: "Rounds number down to nearest integer.", m: [1, 1], p: [{ name: "value", detail: "The value to round down to the nearest integer.", example: "99.44", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ISEVEN", t: 0, d: "Checks whether the provided value is even.", a: "Whether the provided value is even.", m: [1, 1], p: [{ name: "value", detail: "The value to be verified as even.", example: "4", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ISODD", t: 0, d: "Checks whether the provided value is odd.", a: "Whether the provided value is odd.", m: [1, 1], p: [{ name: "value", detail: "The value to be verified as odd.", example: "4", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "LCM", t: 0, d: "Returns the least common multiple of one or more integers.", a: "Least common multiple of one or more integers.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range whose factors to consider in a calculation to find the least common multiple.", example: "A2:A5", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges whose factors to consider to find the least common multiple.", example: "3", require: "o", repeat: "y", type: "rangeall" }] }, { n: "LN", t: 0, d: "Returns the logarithm of a number, base e (Euler's number).", a: "The logarithm of a number, base e (euler's number).", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the logarithm, base e.", example: "100", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "LOG", t: 0, d: "Returns the logarithm of a number with respect to a base.", a: "The logarithm of a number with respect to a base.", m: [1, 2], p: [{ name: "value", detail: "The value for which to calculate the logarithm.", example: "128", require: "m", repeat: "n", type: "rangenumber" }, { name: "base", detail: "The base to use for calculation of the logarithm.", example: "2", require: "o", repeat: "n", type: "rangenumber" }] }, { n: "LOG10", t: 0, d: "Returns the logarithm of a number, base 10.", a: "The logarithm of a number, base 10.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the logarithm, base 10.", example: "100", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "MOD", t: 0, d: "Returns the result of the modulo operator, the remainder after a division operation.", a: "Modulo (remainder) operator.", m: [2, 2], p: [{ name: "dividend", detail: "The number to be divided to find the remainder.", example: "10", require: "m", repeat: "n", type: "rangenumber" }, { name: "divisor", detail: "The number to divide by.", example: "4", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "MROUND", t: 0, d: "Rounds one number to the nearest integer multiple of another.", a: "Rounds a number to the nearest integer multiple.", m: [2, 2], p: [{ name: "value", detail: "The number to round to the nearest integer multiple of another.", example: "21", require: "m", repeat: "n", type: "rangenumber" }, { name: "factor", detail: "The number to whose multiples `value` will be rounded.", example: "14", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ODD", t: 0, d: "Rounds a number up to the nearest odd integer.", a: "Rounds a number up to the nearest odd integer.", m: [1, 1], p: [{ name: "value", detail: "The value to round to the next greatest odd number.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SUMSQ", t: 0, d: "Returns the sum of the squares of a series of numbers and/or cells.", a: "Sum of squares.", m: [1, 255], p: [{ name: "value1", detail: "The first number or range whose squares to add together.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional numbers or ranges whose squares to add to the square(s) of `value1`.", example: "2", require: "o", repeat: "y", type: "rangeall" }] }, { n: "COMBIN", t: 0, d: "Returns the number of ways to choose some number of objects from a pool of a given size of objects.", a: "Number of combinations from a set of objects.", m: [2, 2], p: [{ name: "n", detail: "The size of the pool of objects to choose from.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "k", detail: "The number of objects to choose.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SUM", t: 0, d: "Returns the sum of a series of numbers and/or cells.", a: "Sum of a series of numbers and/or cells.", m: [1, 255], p: [{ name: "value1", detail: "The first number or range to add together.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional numbers or ranges to add to `value1`.", example: "2", require: "o", repeat: "y", type: "rangeall" }] }, { n: "SUBTOTAL", t: 0, d: "Returns a subtotal for a vertical range of cells using a specified aggregation function.", a: "Subtotal for a range using a specific function.", m: [2, 256], p: [{ name: "function_code", detail: "The function to use in subtotal aggregation.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "range1", detail: "The first range over which to calculate a subtotal.", example: "A2:A5", require: "m", repeat: "n", type: "range" }, { name: "range2", detail: "Additional ranges over which to calculate subtotals.", example: "B2:B8", require: "o", repeat: "y", type: "range" }] }, { n: "ASIN", t: 0, d: "Returns the inverse sine of a value, in radians.", a: "Inverse sine of a value, in radians.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse sine. Must be between `-1` and `1`, inclusive.", example: "0", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "COUNTIF", t: 1, d: "Returns a conditional count across a range.", a: "A conditional count across a range.", m: [2, 2], p: [{ name: "range", detail: "The range that is tested against `criterion`.", example: "A1:A10", require: "m", repeat: "n", type: "range" }, { name: "criterion", detail: "The pattern or test to apply to `range`.", example: '">20"', require: "m", repeat: "n", type: "rangeall" }] }, { n: "RADIANS", t: 0, d: "Converts an angle value in degrees to radians.", a: "Converts an angle value in degrees to radians.", m: [1, 1], p: [{ name: "angle", detail: "The angle to convert from degrees to radians.", example: "180", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "RAND", t: 0, d: "Returns a random number between 0 inclusive and 1 exclusive.", a: "A random number between 0 inclusive and 1 exclusive.", m: [0, 0], p: [] }, { n: "COUNTUNIQUE", t: 0, d: "Counts the number of unique values in a list of specified values and ranges.", a: "Counts number of unique values in a range.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider for uniqueness.", example: "A1:C100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider for uniqueness.", example: "1", require: "o", repeat: "n", type: "rangeall" }] }, { n: "DEGREES", t: 0, d: "Converts an angle value in radians to degrees.", a: "Converts an angle value in radians to degrees.", m: [1, 1], p: [{ name: "angle", detail: "The angle to convert from radians to degrees.", example: "PI()", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ERFC", t: 9, d: "Returns the complementary Gauss error function of a value.", a: "Complementary gauss error function of a value.", m: [1, 1], p: [{ name: "z", detail: "The number for which to calculate the complementary Gauss error function.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "EVEN", t: 0, d: "Rounds a number up to the nearest even integer.", a: "Rounds a number up to the nearest even integer.", m: [1, 1], p: [{ name: "value", detail: "The value to round to the next greatest even number.", example: "3", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "EXP", t: 0, d: "Returns Euler's number, e (~2.718) raised to a power.", a: "Euler's number, e (~2.718) raised to a power.", m: [1, 1], p: [{ name: "exponent", detail: "The exponent to raise e to.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "FACT", t: 0, d: "Returns the factorial of a number.", a: "Factorial of a number.", m: [1, 1], p: [{ name: "value", detail: "The number or reference to a number whose factorial will be calculated and returned.", example: "3", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "FACTDOUBLE", t: 0, d: 'Returns the "double factorial" of a number.', a: '"double factorial" of a number.', m: [1, 1], p: [{ name: "value", detail: "The number or reference to a number whose double factorial will be calculated and returned.", example: "6", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "PI", t: 0, d: "Returns the value of Pi to 14 decimal places.", a: "The number pi.", m: [0, 0], p: [] }, { n: "FLOOR", t: 0, d: "Rounds a number down to the nearest integer multiple of specified significance `factor`.", a: "Rounds number down to nearest multiple of a factor.", m: [2, 2], p: [{ name: "value", detail: "The value to round down to the nearest integer multiple of `factor`.", example: "23.25", require: "m", repeat: "n", type: "rangenumber" }, { name: "factor", detail: "The number to whose multiples `value` will be rounded.", example: "0.1", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "GCD", t: 0, d: "Returns the greatest common divisor of one or more integers.", a: "Greatest common divisor of one or more integers.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range whose factors to consider in a calculation to find the greatest common divisor.", example: "A2:A5", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges whose factors to consider to find the greatest common divisor.", example: "96", require: "o", repeat: "y", type: "rangeall" }] }, { n: "RANDBETWEEN", t: 0, d: "Returns a uniformly random integer between two values, inclusive.", a: "Random integer between two values, inclusive.", m: [2, 2], p: [{ name: "low", detail: "The low end of the random range.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "high", detail: "The high end of the random range.", example: "10", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ROUND", t: 0, d: "Rounds a number to a certain number of decimal places according to standard rules.", a: "Rounds a number according to standard rules.", m: [2, 2], p: [{ name: "value", detail: "The value to round to `places` number of places.", example: "99.44", require: "m", repeat: "n", type: "rangenumber" }, { name: "places", detail: "The number of decimal places to which to round.", example: "1", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ROUNDDOWN", t: 0, d: "Rounds a number to a certain number of decimal places, always rounding down to the next valid increment.", a: "Rounds down a number.", m: [2, 2], p: [{ name: "value", detail: "The value to round to `places` number of places, always rounding down.", example: "99.44", require: "m", repeat: "n", type: "rangenumber" }, { name: "places", detail: "The number of decimal places to which to round.", example: "1", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "ROUNDUP", t: 0, d: "Rounds a number to a certain number of decimal places, always rounding up to the next valid increment.", a: "Rounds up a number.", m: [2, 2], p: [{ name: "value", detail: "The value to round to `places` number of places, always rounding up.", example: "99.44", require: "m", repeat: "n", type: "rangenumber" }, { name: "places", detail: "The number of decimal places to which to round.", example: "1", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SERIESSUM", t: 0, d: "Given parameters `x`, `n`, `m`, and `a`, returns the power series sum a", a: "Sum of a power series.", m: [4, 4], p: [{ name: "x", detail: "The input to the power series. Varies depending on the type of approximation, may be angle, exponent, or some other value.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "n", detail: "The initial power to which to raise `x` in the power series.", example: "0", require: "m", repeat: "n", type: "rangenumber" }, { name: "m", detail: "The additive increment by which to increase `x`.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "a", detail: "The array or range containing the coefficients of the power series.", example: "{FACT(0)", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SIGN", t: 0, d: "Given an input number, returns `-1` if it is negative, `1` if positive, and `0` if it is zero.", a: "Sign of a provided number (+/-/0).", m: [1, 1], p: [{ name: "value", detail: "The value whose sign will be evaluated.", example: "-42", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SIN", t: 0, d: "Returns the sine of an angle provided in radians.", a: "Sine of an angle provided in radians.", m: [1, 1], p: [{ name: "angle", detail: "The angle to find the sine of, in radians.", example: "PI()", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SINH", t: 0, d: "Returns the hyperbolic sine of any real number.", a: "Hyperbolic sine of any real number.", m: [1, 1], p: [{ name: "value", detail: "Any real value to calculate the hyperbolic sine of.", example: "A2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SQRT", t: 0, d: "Returns the positive square root of a positive number.", a: "Positive square root of a positive number.", m: [1, 1], p: [{ name: "value", detail: "The number for which to calculate the positive square root.", example: "9", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SQRTPI", t: 0, d: "Returns the positive square root of the product of Pi and the given positive number.", a: "Square root of the product of pi and number.", m: [1, 1], p: [{ name: "value", detail: "The number which will be multiplied by Pi and have the product's square root returned", example: "9", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "GAMMALN", t: 1, d: "Returns the logarithm of a specified Gamma function, base e (Euler's number).", a: "Logarithm of gamma function.", m: [1, 1], p: [{ name: "value", detail: "The input to the Gamma function. The natural logarithm of Gamma(`value`) will be returned.", example: "4", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "COS", t: 0, d: "Returns the cosine of an angle provided in radians.", a: "Cosine of an angle provided in radians.", m: [1, 1], p: [{ name: "angle", detail: "The angle to find the cosine of, in radians.", example: "PI()", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "TRUNC", t: 0, d: "Truncates a number to a certain number of significant digits by omitting less significant digits.", a: "Truncates a number.", m: [1, 2], p: [{ name: "value", detail: "The value to be truncated.", example: "3.141592654", require: "m", repeat: "n", type: "rangenumber" }, { name: "places", detail: "The number of significant digits to the right of the decimal point to retain.", example: "2", require: "o", repeat: "n", type: "rangenumber" }] }, { n: "QUOTIENT", t: 0, d: "Returns one number divided by another.", a: "One number divided by another.", m: [2, 2], p: [{ name: "dividend", detail: "The number to be divided.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "divisor", detail: "The number to divide by.", example: "2", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "POWER", t: 0, d: "Returns a number raised to a power.", a: "A number raised to a power.", m: [2, 2], p: [{ name: "base", detail: "The number to raise to the `exponent` power.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "exponent", detail: "The exponent to raise `base` to.", example: "0.5", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "SUMIFS", t: 0, d: "Returns the sum of a range depending on multiple criteria.", a: "Sums a range depending on multiple criteria.", m: [3, 257], p: [{ name: "sum_range", detail: "The range to sum.", example: "A1:A10", require: "m", repeat: "n", type: "range" }, { name: "criteria_range1", detail: "The range to check against criterion1.", example: " B1:B10", require: "m", repeat: "n", type: "range" }, { name: "criterion1", detail: "The pattern or test to apply to criteria_range1.", example: ' ">20"', require: "m", repeat: "n", type: "rangeall" }, { name: "criteria_range2", detail: "Additional ranges to check.", example: " C1:C10", require: "o", repeat: "y", type: "rangeall" }] }, { n: "COUNTIFS", t: 1, d: "Returns the count of a range depending on multiple criteria.", a: "Count values depending on multiple criteria.", m: [2, 256], p: [{ name: "criteria_range1", detail: "The range to check against `criterion1`.", example: "A1:A10", require: "m", repeat: "n", type: "range" }, { name: "criterion1", detail: "The pattern or test to apply to `criteria_range1`.", example: ' ">20"', require: "m", repeat: "n", type: "rangeall" }, { name: "criteria_range2", detail: "Additional ranges to check.", example: " B1:B10", require: "o", repeat: "y", type: "rangeall" }] }, { n: "PRODUCT", t: 0, d: "Returns the result of multiplying a series of numbers together.", a: "Result of multiplying a series of numbers together.", m: [1, 255], p: [{ name: "factor1", detail: "The first number or range to calculate for the product.", example: "A2:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "factor2", detail: "More numbers or ranges to calculate for the product.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "HARMEAN", t: 1, d: "Calculates the harmonic mean of a dataset.", a: "The harmonic mean of a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the population.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to include in the population.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "HYPGEOMDIST", t: 1, d: "Calculates the probability of drawing a certain number of successes in a certain number of tries given a population of a certain size containing a certain number of successes, without replacement of draws.", a: "Hypergeometric distribution probability.", m: [5, 5], p: [{ name: "num_successes", detail: "The desired number of successes.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "num_draws", detail: "The number of permitted draws.", example: "12", require: "m", repeat: "n", type: "rangenumber" }, { name: "successes_in_pop", detail: "The total number of successes in the population.", example: "20", require: "m", repeat: "n", type: "rangenumber" }, { name: "pop_size", detail: "The total size of the population", example: "40", require: "m", repeat: "n", type: "rangenumber" }, { name: "cumulative", detail: "Determine the logical value of the function form. \n\nIf cumulative is TRUE(), HYPGEOM.DIST returns the cumulative distribution function;\n\nif FALSE(), it returns the probability density function.", example: "TRUE()", require: "m", repeat: "n", type: "rangeall" }] }, { n: "INTERCEPT", t: 1, d: "Calculates the y-value at which the line resulting from linear regression of a dataset will intersect the y-axis (x=0).", a: "Y-intercept of line derived via linear regression.", m: [2, 2], p: [{ name: "data_y", detail: "The range representing the array or matrix of dependent data.", example: "A2:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "data_x", detail: "The range representing the array or matrix of independent data.", example: "B2:B100", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "KURT", t: 1, d: 'Calculates the kurtosis of a dataset, which describes the shape, and in particular the "peakedness" of that dataset.', a: "Kurtosis of a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the dataset.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to include in the dataset.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "LARGE", t: 1, d: "Returns the nth largest element from a data set, where n is user-defined.", a: "Nth largest element from a data set.", m: [2, 2], p: [{ name: "data", detail: "Array or range containing the dataset to consider.", example: "A2:B100", require: "m", repeat: "n", type: "rangenumber" }, { name: "n", detail: "The rank from largest to smallest of the element to return.", example: "4", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "STDEVA", t: 1, d: "Calculates the standard deviation based on a sample, setting text to the value `0`.", a: "Standard deviation of sample (text as 0).", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the sample.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to include in the sample.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "STDEVP", t: 1, d: "Calculates the standard deviation based on an entire population.", a: "Standard deviation of an entire population.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the population.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to include in the population.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "GEOMEAN", t: 1, d: "Calculates the geometric mean of a dataset.", a: "The geometric mean of a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the population.", example: "1", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to include in the population.", example: "2", require: "o", repeat: "y", type: "rangeall" }] }, { n: "RANK_EQ", t: 1, d: "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the top rank of the entries will be returned.", a: "Top rank of a specified value in a dataset.", m: [2, 3], p: [{ name: "value", detail: "The value whose rank will be determined.", example: "A10", require: "m", repeat: "n", type: "rangenumber" }, { name: "data", detail: "The array or range containing the dataset to consider.", example: "A1:A100", require: "m", repeat: "n", type: "range" }, { name: "is_ascending", detail: "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE).", example: "TRUE()", require: "o", repeat: "n", type: "rangeall" }] }, { n: "RANK_AVG", t: 1, d: "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the average rank of the entries will be returned.", a: "Average rank of a specified value in a dataset.", m: [2, 3], p: [{ name: "value", detail: "The value whose rank will be determined.", example: "A10", require: "m", repeat: "n", type: "rangenumber" }, { name: "data", detail: "The array or range containing the dataset to consider.", example: "A1:A100", require: "m", repeat: "n", type: "range" }, { name: "is_ascending", detail: "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE).", example: "TRUE()", require: "o", repeat: "n", type: "rangeall" }] }, { n: "PERCENTRANK_EXC", t: 1, d: "Returns the percentage rank (percentile) from 0 to 1 exclusive of a specified value in a dataset.", a: "Percentage rank (percentile) from 0 to 1 exclusive.", m: [2, 3], p: [{ name: "data", detail: "The array or range containing the dataset to consider.", example: "A1:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "value", detail: "The value whose percentage rank will be determined.", example: "A2", require: "m", repeat: "n", type: "rangenumber" }, { name: "significant_digits", detail: "The number of significant figures to use in the calculation. Default is 3.", example: "4", require: "o", repeat: "n", type: "rangenumber" }] }, { n: "PERCENTRANK_INC", t: 1, d: "Returns the percentage rank (percentile) from 0 to 1 inclusive of a specified value in a dataset.", a: "Percentage rank (percentile) from 0 to 1 inclusive.", m: [2, 3], p: [{ name: "data", detail: "The array or range containing the dataset to consider.", example: "A1:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "value", detail: "The value whose percentage rank will be determined.", example: " A2", require: "m", repeat: "n", type: "rangenumber" }, { name: "significant_digits", detail: "The number of significant figures to use in the calculation. Default is 3.", example: "4", require: "o", repeat: "n", type: "rangenumber" }] }, { n: "FORECAST", t: 1, d: "Calculates the expected y-value for a specified x based on a linear regression of a dataset.", a: "Expected y-value based of linear regression.", m: [3, 3], p: [{ name: "x", detail: "The value on the x-axis to forecast.", example: "A1", require: "m", repeat: "n", type: "rangenumber" }, { name: "data_y", detail: "The range representing the array or matrix of dependent data.", example: "A2:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "data_x", detail: "The range representing the array or matrix of independent data.", example: "B2:B100", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "FISHERINV", t: 1, d: "Returns the inverse Fisher transformation of a specified value.", a: "Inverse fisher transformation of a specified value.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the inverse Fisher transformation.", example: "0.962", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "FISHER", t: 1, d: "Returns the Fisher transformation of a specified value.", a: "Fisher transformation of a specified value.", m: [1, 1], p: [{ name: "value", detail: "The value for which to calculate the Fisher transformation.", example: "0.962", require: "m", repeat: "n", type: "rangenumber" }] }, { n: "MODE_SNGL", t: 1, d: "Returns the most commonly occurring value in a dataset.", a: "Most commonly occurring value in a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider when calculating mode.", example: "A2:A100", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to consider when calculating mode.", example: "B2:B100", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "WEIBULL_DIST", t: 1, d: "Returns the value of the Weibull distribution function (or Weibull cumulative distribution function) for a specified shape and scale.", a: "Weibull distribution function.", m: [4, 4], p: [{ name: "x", detail: "The input to the Weibull distribution function.", example: "2.4", require: "m", repeat: "n", type: "rangenumber" }, { name: "shape", detail: "The shape parameter of the Weibull distribution function.", example: "2", require: "m", repeat: "n", type: "rangenumber" }, { name: "scale", detail: "The scale parameter of the Weibull distribution function.", example: "3", require: "m", repeat: "n", type: "rangenumber" }, { name: "cumulative", detail: "Whether to use the cumulative distribution function.", example: "TRUE()", require: "m", repeat: "n", type: "rangeall" }] }, { n: "COUNT", t: 1, d: "Returns the number of numeric values in a dataset.", a: "The number of numeric values in dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider when counting.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider when counting.", example: "B2:B100", require: "o", repeat: "y", type: "rangeall" }] }, { n: "COUNTA", t: 1, d: "Returns the number of values in a dataset.", a: "The number of values in a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider when counting.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider when counting.", example: "B2:B100", require: "o", repeat: "y", type: "rangeall" }] }, { n: "AVEDEV", t: 1, d: "Calculates the average of the magnitudes of deviations of data from a dataset's mean.", a: "Average magnitude of deviations from mean.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range of the sample.", example: "1", require: "m", repeat: "n", type: "rangenumber" }, { name: "value2", detail: "Additional values or ranges to include in the sample.", example: "2", require: "o", repeat: "y", type: "rangenumber" }] }, { n: "AVERAGE", t: 1, d: "Returns the numerical average value in a dataset, ignoring text.", a: "Numerical average value in a dataset, ignoring text.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider when calculating the average value.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider when calculating the average value.", example: "B2:B100", require: "o", repeat: "y", type: "rangeall" }] }, { n: "AVERAGEA", t: 1, d: "Returns the numerical average value in a dataset.", a: "Numerical average value in a dataset.", m: [1, 255], p: [{ name: "value1", detail: "The first value or range to consider when calculating the average value.", example: "A2:A100", require: "m", repeat: "n", type: "rangeall" }, { name: "value2", detail: "Additional values or ranges to consider when calculating the average value.", example: "B2:B100", require: "o", repeat: "y", type: "rangeall" }] }, { n: "BINOM_DIST", t: 1, d: "Calculates the probability of drawing a certain number of successes (or a maximum number of successes) in a certain number of tries given a population of a certain size containing a certain number of successes, with replacement of draws.", a: "Binomial distribution probability.", m: [4, 4], p: [{ name: "num_successes", detail: "The number of successes for which to calculate the probability in `num_trials` trials.", example: "4", require: "m", repeat: "n", type: "rangenumber" }, { name: "num_trials", detail: "The number of independent trials.", example: "100", require: "m", repeat: "n", type: "rangenumber" }, { name: "prob_success", detail: "The probability of success in any given trial.", example: "0.005", require: "m", repeat: "n", type: "rangenumber" }, { name: "cumulative", detail: "Whether to use the binomial cumulative distribution.", example: "FALSE()", require: "m", repeat: "n", type: "rangeall" }] }, { n: "BINOM_INV", t: 1, d: "Calculates the smallest value for which the cumulative binomial distribution is greater than or equal to a specified criteria.", a: "Inverse cumulative binomial distribution function.", m: [3, 3], p: [{ name: "num_trials", deta