@fortune-sheet/core
Version:
FortuneSheet is a drop-in javascript spreadsheet library that provides rich features like Excel and Google Sheets
1,805 lines (1,775 loc) • 2.43 MB
JavaScript
import _, { isPlainObject } from 'lodash';
import numeral from 'numeral';
import dayjs from 'dayjs';
import { Parser, ERROR_REF } from '@fortune-sheet/formula-parser';
import { v4 } from 'uuid';
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",
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: "target_prob",
detail: "T