@odoo/o-spreadsheet 14.0.1 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/o_spreadsheet.cjs.js +31302 -0
- package/dist/o_spreadsheet.d.ts +6604 -0
- package/dist/o_spreadsheet.esm.js +31257 -0
- package/dist/o_spreadsheet.iife.js +31304 -0
- package/dist/o_spreadsheet.iife.min.js +3071 -0
- package/package.json +57 -15
- package/.eslintrc.json +0 -20
- package/.husky/post-checkout +0 -9
- package/.husky/pre-commit +0 -39
- package/.prettierignore +0 -1
- package/astToFormula.patch +0 -0
- package/demo/data.js +0 -255
- package/demo/index.html +0 -9
- package/demo/libs/Chart.bundle.js +0 -20755
- package/demo/main.js +0 -101
- package/doc/readme.md +0 -46
- package/rollup.config.js +0 -23
- package/src/base_plugin.ts +0 -102
- package/src/components/autofill.ts +0 -146
- package/src/components/bottom_bar.ts +0 -199
- package/src/components/color_picker.ts +0 -150
- package/src/components/composer/autocomplete_dropdown.ts +0 -135
- package/src/components/composer/composer.ts +0 -487
- package/src/components/composer/content_editable_helper.ts +0 -146
- package/src/components/figures/chart.ts +0 -70
- package/src/components/figures/container.ts +0 -268
- package/src/components/figures/text_figure.ts +0 -36
- package/src/components/grid.ts +0 -635
- package/src/components/helpers/dom_helpers.ts +0 -7
- package/src/components/helpers/drag_and_drop.ts +0 -17
- package/src/components/icons.ts +0 -36
- package/src/components/index.ts +0 -1
- package/src/components/menu.ts +0 -288
- package/src/components/overlay.ts +0 -457
- package/src/components/scrollbar.ts +0 -22
- package/src/components/selection_input.ts +0 -168
- package/src/components/side_panel/cell_is_rule_editor.ts +0 -169
- package/src/components/side_panel/chart_panel.ts +0 -104
- package/src/components/side_panel/color_scale_rule_editor.ts +0 -145
- package/src/components/side_panel/conditional_formatting.ts +0 -396
- package/src/components/side_panel/side_panel.ts +0 -127
- package/src/components/side_panel/translations_terms.ts +0 -45
- package/src/components/spreadsheet.ts +0 -198
- package/src/components/top_bar.ts +0 -535
- package/src/constants.ts +0 -26
- package/src/data.ts +0 -149
- package/src/fonts.ts +0 -41
- package/src/formulas/compiler.ts +0 -258
- package/src/formulas/composer_tokenizer.ts +0 -70
- package/src/formulas/index.ts +0 -15
- package/src/formulas/normalize.ts +0 -52
- package/src/formulas/parser.ts +0 -280
- package/src/formulas/range_tokenizer.ts +0 -97
- package/src/formulas/tokenizer.ts +0 -242
- package/src/functions/arguments.ts +0 -114
- package/src/functions/dates.ts +0 -302
- package/src/functions/helpers.ts +0 -592
- package/src/functions/index.ts +0 -52
- package/src/functions/module_database.ts +0 -282
- package/src/functions/module_date.ts +0 -743
- package/src/functions/module_info.ts +0 -69
- package/src/functions/module_logical.ts +0 -208
- package/src/functions/module_lookup.ts +0 -185
- package/src/functions/module_math.ts +0 -1252
- package/src/functions/module_operators.ts +0 -291
- package/src/functions/module_statistical.ts +0 -882
- package/src/functions/module_text.ts +0 -370
- package/src/helpers/color.ts +0 -30
- package/src/helpers/coordinates.ts +0 -71
- package/src/helpers/grid_manipulation.ts +0 -68
- package/src/helpers/index.ts +0 -7
- package/src/helpers/misc.ts +0 -76
- package/src/helpers/numbers.ts +0 -117
- package/src/helpers/uuid.ts +0 -19
- package/src/helpers/zones.ts +0 -263
- package/src/history.ts +0 -186
- package/src/index.ts +0 -84
- package/src/model.ts +0 -261
- package/src/plugins/autofill.ts +0 -412
- package/src/plugins/chart.ts +0 -404
- package/src/plugins/clipboard.ts +0 -461
- package/src/plugins/conditional_format.ts +0 -445
- package/src/plugins/core.ts +0 -1502
- package/src/plugins/edition.ts +0 -157
- package/src/plugins/evaluation.ts +0 -428
- package/src/plugins/figures.ts +0 -123
- package/src/plugins/formatting.ts +0 -630
- package/src/plugins/highlight.ts +0 -187
- package/src/plugins/index.ts +0 -32
- package/src/plugins/merge.ts +0 -524
- package/src/plugins/renderer.ts +0 -571
- package/src/plugins/selection.ts +0 -562
- package/src/plugins/selection_inputs.ts +0 -326
- package/src/registries/autofill_modifiers.ts +0 -76
- package/src/registries/autofill_rules.ts +0 -98
- package/src/registries/figure_registry.ts +0 -30
- package/src/registries/index.ts +0 -7
- package/src/registries/menu_items_registry.ts +0 -110
- package/src/registries/menus/cell_menu_registry.ts +0 -79
- package/src/registries/menus/col_menu_registry.ts +0 -63
- package/src/registries/menus/index.ts +0 -6
- package/src/registries/menus/menu_items_actions.ts +0 -425
- package/src/registries/menus/row_menu_registry.ts +0 -63
- package/src/registries/menus/sheet_menu_registry.ts +0 -75
- package/src/registries/menus/topbar_menu_registry.ts +0 -204
- package/src/registries/side_panel_registry.ts +0 -26
- package/src/registries/topbar_component_registry.ts +0 -12
- package/src/registry.ts +0 -51
- package/src/translation.ts +0 -44
- package/src/types/autofill.ts +0 -48
- package/src/types/chart.ts +0 -26
- package/src/types/commands.ts +0 -716
- package/src/types/conditional_formatting.ts +0 -124
- package/src/types/env.ts +0 -13
- package/src/types/functions.ts +0 -35
- package/src/types/getters.ts +0 -103
- package/src/types/index.ts +0 -20
- package/src/types/misc.ts +0 -143
- package/src/types/rendering.ts +0 -41
- package/src/types/workbook_data.ts +0 -62
- package/tests/__mocks__/uuid.ts +0 -7
- package/tests/canvas.mock.ts +0 -34
- package/tests/components/__mocks__/content_editable_helper.ts +0 -79
- package/tests/components/__mocks__/scrollbar.ts +0 -18
- package/tests/components/__snapshots__/autocomplete_dropdown_test.ts.snap +0 -29
- package/tests/components/__snapshots__/bottom_bar_test.ts.snap +0 -75
- package/tests/components/__snapshots__/context_menu_test.ts.snap +0 -88
- package/tests/components/__snapshots__/grid_test.ts.snap +0 -60
- package/tests/components/__snapshots__/spreadsheet_test.ts.snap +0 -455
- package/tests/components/__snapshots__/top_bar_test.ts.snap +0 -705
- package/tests/components/autocomplete_dropdown_test.ts +0 -315
- package/tests/components/autofill_test.ts +0 -167
- package/tests/components/bottom_bar_test.ts +0 -262
- package/tests/components/chart_side_panel_test.ts +0 -123
- package/tests/components/composer_test.ts +0 -400
- package/tests/components/context_menu_test.ts +0 -825
- package/tests/components/grid_manipulation_test.ts +0 -163
- package/tests/components/grid_test.ts +0 -581
- package/tests/components/overlay_test.ts +0 -541
- package/tests/components/selection_input_test.ts +0 -259
- package/tests/components/side_panel_test.ts +0 -148
- package/tests/components/spreadsheet_test.ts +0 -194
- package/tests/components/top_bar_test.ts +0 -427
- package/tests/data_test.ts +0 -175
- package/tests/dom_helper.ts +0 -42
- package/tests/formulas/__snapshots__/compiler_test.ts.snap +0 -302
- package/tests/formulas/compiler_test.ts +0 -266
- package/tests/formulas/composer_tokenizer_test.ts +0 -137
- package/tests/formulas/expressions_test.ts +0 -57
- package/tests/formulas/formulas_test.ts +0 -80
- package/tests/formulas/normalize_test.ts +0 -82
- package/tests/formulas/parser_test.ts +0 -224
- package/tests/formulas/range_tokenizer_test.ts +0 -187
- package/tests/formulas/tokenizer_test.ts +0 -164
- package/tests/functions/arguments_test.ts +0 -141
- package/tests/functions/dates_test.ts +0 -1081
- package/tests/functions/functions_test.ts +0 -53
- package/tests/functions/helper_test.ts +0 -98
- package/tests/functions/module_database_test.ts +0 -311
- package/tests/functions/module_date_test.ts +0 -941
- package/tests/functions/module_info_test.ts +0 -139
- package/tests/functions/module_logical_test.ts +0 -369
- package/tests/functions/module_lookup_test.ts +0 -541
- package/tests/functions/module_math_test.ts +0 -2482
- package/tests/functions/module_operators_test.ts +0 -955
- package/tests/functions/module_statistical_test.ts +0 -2014
- package/tests/functions/module_text_test.ts +0 -667
- package/tests/helpers/coordinates_test.ts +0 -25
- package/tests/helpers/misc_test.ts +0 -95
- package/tests/helpers/numbers_test.ts +0 -196
- package/tests/helpers/zones_test.ts +0 -97
- package/tests/helpers.ts +0 -384
- package/tests/menu_items_registry_test.ts +0 -540
- package/tests/model/plugins/__snapshots__/chart_test.ts.snap +0 -90
- package/tests/model/plugins/chart_test.ts +0 -562
- package/tests/model_test.ts +0 -82
- package/tests/plugins/__snapshots__/conditional_formatting_test.ts.snap +0 -131
- package/tests/plugins/__snapshots__/renderer_test.ts.snap +0 -371
- package/tests/plugins/autofill_test.ts +0 -457
- package/tests/plugins/borders_test.ts +0 -295
- package/tests/plugins/clipboard_test.ts +0 -1180
- package/tests/plugins/conditional_formatting_test.ts +0 -1253
- package/tests/plugins/core_test.ts +0 -614
- package/tests/plugins/edition_test.ts +0 -100
- package/tests/plugins/evaluation_async_test.ts +0 -332
- package/tests/plugins/evaluation_dates_test.ts +0 -79
- package/tests/plugins/evaluation_test.ts +0 -901
- package/tests/plugins/figures_test.ts +0 -327
- package/tests/plugins/formatting_test.ts +0 -391
- package/tests/plugins/grid_manipulation_test.ts +0 -1366
- package/tests/plugins/highlight_test.ts +0 -413
- package/tests/plugins/history_test.ts +0 -142
- package/tests/plugins/import_export_test.ts +0 -276
- package/tests/plugins/merges_test.ts +0 -490
- package/tests/plugins/navigation_test.ts +0 -181
- package/tests/plugins/plugins/evaluation_test.ts +0 -111
- package/tests/plugins/renderer_test.ts +0 -598
- package/tests/plugins/resizing_test.ts +0 -152
- package/tests/plugins/selection_input_test.ts +0 -409
- package/tests/plugins/selection_test.ts +0 -442
- package/tests/plugins/sheets_test.ts +0 -643
- package/tests/plugins/style_test.ts +0 -90
- package/tsconfig.json +0 -22
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { _lt } from "../translation";
|
|
2
|
-
import { FunctionDescription } from "../types";
|
|
3
|
-
import { args } from "./arguments";
|
|
4
|
-
import { toString, visitMatchingRanges } from "./helpers";
|
|
5
|
-
import { PRODUCT, SUM } from "./module_math";
|
|
6
|
-
import { AVERAGE, COUNT, COUNTA, MAX, MIN, STDEV, STDEVP, VAR, VARP } from "./module_statistical";
|
|
7
|
-
|
|
8
|
-
function getMatchingCells(database: any, field: any, criteria: any): any[] {
|
|
9
|
-
// Exemple :
|
|
10
|
-
//
|
|
11
|
-
// # DATABASE # CRITERIA # field = "C"
|
|
12
|
-
//
|
|
13
|
-
// | A | B | C | | A | C |
|
|
14
|
-
// |===========| |=======|
|
|
15
|
-
// | 1 | x | j | |<2 | j |
|
|
16
|
-
// | 1 | Z | k | | | 7 |
|
|
17
|
-
// | 5 | y | 7 |
|
|
18
|
-
|
|
19
|
-
// 1 - Select coordinates of database columns
|
|
20
|
-
const indexColNameDB = new Map();
|
|
21
|
-
const dimRowDB = database.length;
|
|
22
|
-
for (let indexCol = dimRowDB - 1; indexCol >= 0; indexCol--) {
|
|
23
|
-
indexColNameDB.set(toString(database[indexCol][0]).toUpperCase(), indexCol);
|
|
24
|
-
} // Ex: indexColNameDB = {A => 0, B => 1, C => 2}
|
|
25
|
-
|
|
26
|
-
// 2 - Check if the field parameter exists in the column names of the database
|
|
27
|
-
const typeofField = typeof field;
|
|
28
|
-
let index;
|
|
29
|
-
if (typeofField === "number") {
|
|
30
|
-
// field may either be a text label corresponding to a column header in the
|
|
31
|
-
// first row of database or a numeric index indicating which column to consider,
|
|
32
|
-
// where the first column has the value 1.
|
|
33
|
-
index = Math.trunc(field) - 1;
|
|
34
|
-
if (index < 0 || index > dimRowDB - 1) {
|
|
35
|
-
throw new Error(
|
|
36
|
-
_lt(
|
|
37
|
-
"Function [[FUNCTION_NAME]] parameter 2 value is %s. Valid values are between 1 and %s inclusive.",
|
|
38
|
-
field,
|
|
39
|
-
dimRowDB
|
|
40
|
-
)
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
const colName = typeofField === "string" ? field.toUpperCase() : field;
|
|
45
|
-
index = indexColNameDB.get(colName);
|
|
46
|
-
if (index === undefined) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
_lt(
|
|
49
|
-
"Function [[FUNCTION_NAME]] parameter 2 value is %s. It should be one of: %s.",
|
|
50
|
-
field,
|
|
51
|
-
[...indexColNameDB.keys()].map((v) => "'" + v + "'").join(", ")
|
|
52
|
-
)
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
} // Ex: index = 2
|
|
56
|
-
|
|
57
|
-
// 3 - For each criteria row, find database row that correspond
|
|
58
|
-
const dimColCriteria = criteria[0].length;
|
|
59
|
-
|
|
60
|
-
if (dimColCriteria < 2) {
|
|
61
|
-
throw new Error(_lt(`[[FUNCTION_NAME]] criteria range must be at least 2 rows.`));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let matchingRows: Set<number> = new Set();
|
|
65
|
-
const dimColDB = database[0].length;
|
|
66
|
-
for (let indexRow = 1; indexRow < dimColCriteria; indexRow++) {
|
|
67
|
-
let args: any[] = [];
|
|
68
|
-
let existColNameDB = true;
|
|
69
|
-
for (let indexCol = 0; indexCol < criteria.length; indexCol++) {
|
|
70
|
-
const curentName = toString(criteria[indexCol][0]).toUpperCase();
|
|
71
|
-
const indexColDB = indexColNameDB.get(curentName);
|
|
72
|
-
const criter = criteria[indexCol][indexRow];
|
|
73
|
-
if (criter !== undefined) {
|
|
74
|
-
if (indexColDB !== undefined) {
|
|
75
|
-
args.push([database[indexColDB].slice(1, dimColDB)]);
|
|
76
|
-
args.push(criter);
|
|
77
|
-
} else {
|
|
78
|
-
existColNameDB = false;
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Ex: args1 = [[1,1,5], "<2", ["j","k",7], "j"]
|
|
84
|
-
// Ex: args2 = [["j","k",7], "7"]
|
|
85
|
-
|
|
86
|
-
if (existColNameDB) {
|
|
87
|
-
if (args.length > 0) {
|
|
88
|
-
visitMatchingRanges(
|
|
89
|
-
args,
|
|
90
|
-
(i, j) => {
|
|
91
|
-
matchingRows.add(j);
|
|
92
|
-
},
|
|
93
|
-
true
|
|
94
|
-
);
|
|
95
|
-
} else {
|
|
96
|
-
// return indices of each database row when a criteria table row is void
|
|
97
|
-
matchingRows = new Set(Array(dimColDB - 1).keys());
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
} // Ex: matchingRows = {0, 2}
|
|
102
|
-
|
|
103
|
-
// 4 - return for each database row corresponding, the cells corresponding to
|
|
104
|
-
// the field parameter
|
|
105
|
-
const fieldCol: any[] = database[index];
|
|
106
|
-
// Ex: fieldCol = ["C", "j", "k", 7]
|
|
107
|
-
const matchingCells = [...matchingRows].map((x) => fieldCol[x + 1]);
|
|
108
|
-
// Ex: matchingCells = ["j", 7]
|
|
109
|
-
|
|
110
|
-
return matchingCells;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const databaseArgs = args(`
|
|
114
|
-
database (range) ${_lt(
|
|
115
|
-
"The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
|
|
116
|
-
)}
|
|
117
|
-
field (any) ${_lt(
|
|
118
|
-
"Indicates which column in database contains the values to be extracted and operated on."
|
|
119
|
-
)}
|
|
120
|
-
criteria (range) ${_lt(
|
|
121
|
-
"An array or range containing zero or more criteria to filter the database values by before operating."
|
|
122
|
-
)}
|
|
123
|
-
`);
|
|
124
|
-
|
|
125
|
-
// -----------------------------------------------------------------------------
|
|
126
|
-
// DAVERAGE
|
|
127
|
-
// -----------------------------------------------------------------------------
|
|
128
|
-
export const DAVERAGE: FunctionDescription = {
|
|
129
|
-
description: _lt("Average of a set of values from a table-like range."),
|
|
130
|
-
args: databaseArgs,
|
|
131
|
-
returns: ["NUMBER"],
|
|
132
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
133
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
134
|
-
return AVERAGE.compute([cells]);
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// -----------------------------------------------------------------------------
|
|
139
|
-
// DCOUNT
|
|
140
|
-
// -----------------------------------------------------------------------------
|
|
141
|
-
export const DCOUNT: FunctionDescription = {
|
|
142
|
-
description: _lt("Counts values from a table-like range."),
|
|
143
|
-
args: databaseArgs,
|
|
144
|
-
returns: ["NUMBER"],
|
|
145
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
146
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
147
|
-
return COUNT.compute([cells]);
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
// -----------------------------------------------------------------------------
|
|
152
|
-
// DCOUNTA
|
|
153
|
-
// -----------------------------------------------------------------------------
|
|
154
|
-
export const DCOUNTA: FunctionDescription = {
|
|
155
|
-
description: _lt("Counts values and text from a table-like range."),
|
|
156
|
-
args: databaseArgs,
|
|
157
|
-
returns: ["NUMBER"],
|
|
158
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
159
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
160
|
-
return COUNTA.compute([cells]);
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// -----------------------------------------------------------------------------
|
|
165
|
-
// DGET
|
|
166
|
-
// -----------------------------------------------------------------------------
|
|
167
|
-
export const DGET: FunctionDescription = {
|
|
168
|
-
description: _lt("Single value from a table-like range."),
|
|
169
|
-
args: databaseArgs,
|
|
170
|
-
returns: ["NUMBER"],
|
|
171
|
-
compute: function (database: any, field: any, criteria: any): any {
|
|
172
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
173
|
-
if (cells.length > 1) {
|
|
174
|
-
throw new Error(_lt(`More than one match found in DGET evaluation.`));
|
|
175
|
-
}
|
|
176
|
-
return cells[0];
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
// -----------------------------------------------------------------------------
|
|
181
|
-
// DMAX
|
|
182
|
-
// -----------------------------------------------------------------------------
|
|
183
|
-
export const DMAX: FunctionDescription = {
|
|
184
|
-
description: _lt("Maximum of values from a table-like range."),
|
|
185
|
-
args: databaseArgs,
|
|
186
|
-
returns: ["NUMBER"],
|
|
187
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
188
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
189
|
-
return MAX.compute([cells]);
|
|
190
|
-
},
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
// -----------------------------------------------------------------------------
|
|
194
|
-
// DMIN
|
|
195
|
-
// -----------------------------------------------------------------------------
|
|
196
|
-
export const DMIN: FunctionDescription = {
|
|
197
|
-
description: _lt("Minimum of values from a table-like range."),
|
|
198
|
-
args: databaseArgs,
|
|
199
|
-
returns: ["NUMBER"],
|
|
200
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
201
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
202
|
-
return MIN.compute([cells]);
|
|
203
|
-
},
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
// -----------------------------------------------------------------------------
|
|
207
|
-
// DPRODUCT
|
|
208
|
-
// -----------------------------------------------------------------------------
|
|
209
|
-
export const DPRODUCT: FunctionDescription = {
|
|
210
|
-
description: _lt("Product of values from a table-like range."),
|
|
211
|
-
args: databaseArgs,
|
|
212
|
-
returns: ["NUMBER"],
|
|
213
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
214
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
215
|
-
return PRODUCT.compute([cells]);
|
|
216
|
-
},
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
// -----------------------------------------------------------------------------
|
|
220
|
-
// DSTDEV
|
|
221
|
-
// -----------------------------------------------------------------------------
|
|
222
|
-
export const DSTDEV: FunctionDescription = {
|
|
223
|
-
description: _lt("Standard deviation of population sample from table."),
|
|
224
|
-
args: databaseArgs,
|
|
225
|
-
returns: ["NUMBER"],
|
|
226
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
227
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
228
|
-
return STDEV.compute([cells]);
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
// -----------------------------------------------------------------------------
|
|
233
|
-
// DSTDEVP
|
|
234
|
-
// -----------------------------------------------------------------------------
|
|
235
|
-
export const DSTDEVP: FunctionDescription = {
|
|
236
|
-
description: _lt("Standard deviation of entire population from table."),
|
|
237
|
-
args: databaseArgs,
|
|
238
|
-
returns: ["NUMBER"],
|
|
239
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
240
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
241
|
-
return STDEVP.compute([cells]);
|
|
242
|
-
},
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
// -----------------------------------------------------------------------------
|
|
246
|
-
// DSUM
|
|
247
|
-
// -----------------------------------------------------------------------------
|
|
248
|
-
export const DSUM: FunctionDescription = {
|
|
249
|
-
description: _lt("Sum of values from a table-like range."),
|
|
250
|
-
args: databaseArgs,
|
|
251
|
-
returns: ["NUMBER"],
|
|
252
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
253
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
254
|
-
return SUM.compute([cells]);
|
|
255
|
-
},
|
|
256
|
-
};
|
|
257
|
-
|
|
258
|
-
// -----------------------------------------------------------------------------
|
|
259
|
-
// DVAR
|
|
260
|
-
// -----------------------------------------------------------------------------
|
|
261
|
-
export const DVAR: FunctionDescription = {
|
|
262
|
-
description: _lt("Variance of population sample from table-like range."),
|
|
263
|
-
args: databaseArgs,
|
|
264
|
-
returns: ["NUMBER"],
|
|
265
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
266
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
267
|
-
return VAR.compute([cells]);
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
// -----------------------------------------------------------------------------
|
|
272
|
-
// DVARP
|
|
273
|
-
// -----------------------------------------------------------------------------
|
|
274
|
-
export const DVARP: FunctionDescription = {
|
|
275
|
-
description: _lt("Variance of a population from a table-like range."),
|
|
276
|
-
args: databaseArgs,
|
|
277
|
-
returns: ["NUMBER"],
|
|
278
|
-
compute: function (database: any, field: any, criteria: any): number {
|
|
279
|
-
const cells = getMatchingCells(database, field, criteria);
|
|
280
|
-
return VARP.compute([cells]);
|
|
281
|
-
},
|
|
282
|
-
};
|