@odoo/o-spreadsheet 15.0.22 → 15.0.24

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.
@@ -8308,16 +8308,7 @@ class DateTimeCell extends NumberCell {
8308
8308
  }
8309
8309
  class LinkCell extends AbstractCell {
8310
8310
  constructor(id, content, properties = {}) {
8311
- var _a;
8312
8311
  const link = parseMarkdownLink(content);
8313
- properties = {
8314
- ...properties,
8315
- style: {
8316
- ...properties.style,
8317
- textColor: ((_a = properties.style) === null || _a === void 0 ? void 0 : _a.textColor) || LINK_COLOR,
8318
- underline: true,
8319
- },
8320
- };
8321
8312
  super(id, { value: link.label, type: CellValueType.text }, properties);
8322
8313
  this.link = link;
8323
8314
  this.content = content;
@@ -9262,6 +9253,22 @@ class BordersPlugin extends CorePlugin {
9262
9253
  return [];
9263
9254
  return Object.keys(sheetBorders).map((index) => parseInt(index, 10));
9264
9255
  }
9256
+ /**
9257
+ * Get all the rows which contains at least a border
9258
+ */
9259
+ getRowsWithBorders(sheetId) {
9260
+ var _a;
9261
+ const sheetBorders = (_a = this.borders[sheetId]) === null || _a === void 0 ? void 0 : _a.filter(isDefined);
9262
+ if (!sheetBorders)
9263
+ return [];
9264
+ const rowsWithBorders = new Set();
9265
+ for (const rowBorders of sheetBorders) {
9266
+ for (const rowBorder in rowBorders) {
9267
+ rowsWithBorders.add(parseInt(rowBorder, 10));
9268
+ }
9269
+ }
9270
+ return Array.from(rowsWithBorders);
9271
+ }
9265
9272
  /**
9266
9273
  * Get the range of all the rows in the sheet
9267
9274
  */
@@ -9312,7 +9319,7 @@ class BordersPlugin extends CorePlugin {
9312
9319
  destructive: false,
9313
9320
  });
9314
9321
  }
9315
- this.getRowsRange(sheetId)
9322
+ this.getRowsWithBorders(sheetId)
9316
9323
  .filter((row) => row >= start)
9317
9324
  .sort((a, b) => (delta < 0 ? a - b : b - a)) // start by the end when moving up
9318
9325
  .forEach((row) => {
@@ -9542,6 +9549,7 @@ class BordersPlugin extends CorePlugin {
9542
9549
  BordersPlugin.getters = ["getCellBorder"];
9543
9550
 
9544
9551
  const nbspRegexp = new RegExp(String.fromCharCode(160), "g");
9552
+ const LINK_STYLE = { textColor: LINK_COLOR, underline: true };
9545
9553
  /**
9546
9554
  * Core Plugin
9547
9555
  *
@@ -9788,7 +9796,8 @@ class CellPlugin extends CorePlugin {
9788
9796
  return this.buildFormulaContent(sheetId, cell.normalizedText, cell.dependencies);
9789
9797
  }
9790
9798
  getCellStyle(cell) {
9791
- return cell.style || {};
9799
+ const linkStyle = cell.isLink() ? LINK_STYLE : {};
9800
+ return { ...linkStyle, ...cell.style };
9792
9801
  }
9793
9802
  /**
9794
9803
  * Converts a zone to a XC coordinate system
@@ -24154,6 +24163,8 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24154
24163
  "BITOR",
24155
24164
  "BITRSHIFT",
24156
24165
  "BITXOR",
24166
+ "BYCOL",
24167
+ "BYROW",
24157
24168
  "CEILING.MATH",
24158
24169
  "CEILING.PRECISE",
24159
24170
  "CHISQ.DIST",
@@ -24161,6 +24172,8 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24161
24172
  "CHISQ.INV",
24162
24173
  "CHISQ.INV.RT",
24163
24174
  "CHISQ.TEST",
24175
+ "CHOOSECOLS",
24176
+ "CHOOSEROWS",
24164
24177
  "COMBINA",
24165
24178
  "CONCAT",
24166
24179
  "CONFIDENCE.NORM",
@@ -24173,14 +24186,17 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24173
24186
  "CSCH",
24174
24187
  "DAYS",
24175
24188
  "DECIMAL",
24189
+ "DROP",
24176
24190
  "ERF.PRECISE",
24177
24191
  "ERFC.PRECISE",
24192
+ "EXPAND",
24178
24193
  "EXPON.DIST",
24179
24194
  "F.DIST",
24180
24195
  "F.DIST.RT",
24181
24196
  "F.INV",
24182
24197
  "F.INV.RT",
24183
24198
  "F.TEST",
24199
+ "FIELDVALUE",
24184
24200
  "FILTERXML",
24185
24201
  "FLOOR.MATH",
24186
24202
  "FLOOR.PRECISE",
@@ -24195,6 +24211,7 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24195
24211
  "GAMMA.INV",
24196
24212
  "GAMMALN.PRECISE",
24197
24213
  "GAUSS",
24214
+ "HSTACK",
24198
24215
  "HYPGEOM.DIST",
24199
24216
  "IFNA",
24200
24217
  "IFS",
@@ -24207,9 +24224,14 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24207
24224
  "IMSINH",
24208
24225
  "IMTAN",
24209
24226
  "ISFORMULA",
24227
+ "ISOMITTED",
24210
24228
  "ISOWEEKNUM",
24229
+ "LAMBDA",
24230
+ "LET",
24211
24231
  "LOGNORM.DIST",
24212
24232
  "LOGNORM.INV",
24233
+ "MAKEARRAY",
24234
+ "MAP",
24213
24235
  "MAXIFS",
24214
24236
  "MINIFS",
24215
24237
  "MODE.MULT",
@@ -24229,17 +24251,26 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24229
24251
  "PERMUTATIONA",
24230
24252
  "PHI",
24231
24253
  "POISSON.DIST",
24254
+ "PQSOURCE",
24255
+ "PYTHON_STR",
24256
+ "PYTHON_TYPE",
24257
+ "PYTHON_TYPENAME",
24232
24258
  "QUARTILE.EXC",
24233
24259
  "QUARTILE.INC",
24234
24260
  "QUERYSTRING",
24261
+ "RANDARRAY",
24235
24262
  "RANK.AVG",
24236
24263
  "RANK.EQ",
24264
+ "REDUCE",
24237
24265
  "RRI",
24266
+ "SCAN",
24238
24267
  "SEC",
24239
24268
  "SECH",
24269
+ "SEQUENCE",
24240
24270
  "SHEET",
24241
24271
  "SHEETS",
24242
24272
  "SKEW.P",
24273
+ "SORTBY",
24243
24274
  "STDEV.P",
24244
24275
  "STDEV.S",
24245
24276
  "SWITCH",
@@ -24249,13 +24280,24 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24249
24280
  "T.INV",
24250
24281
  "T.INV.2T",
24251
24282
  "T.TEST",
24283
+ "TAKE",
24284
+ "TEXTAFTER",
24285
+ "TEXTBEFORE",
24252
24286
  "TEXTJOIN",
24287
+ "TEXTSPLIT",
24288
+ "TOCOL",
24289
+ "TOROW",
24253
24290
  "UNICHAR",
24254
24291
  "UNICODE",
24292
+ "UNIQUE",
24255
24293
  "VAR.P",
24256
24294
  "VAR.S",
24295
+ "VSTACK",
24257
24296
  "WEBSERVICE",
24258
24297
  "WEIBULL.DIST",
24298
+ "WRAPCOLS",
24299
+ "WRAPROWS",
24300
+ "XLOOKUP",
24259
24301
  "XOR",
24260
24302
  "Z.TEST",
24261
24303
  ];
@@ -24900,6 +24942,12 @@ function addFormula(cell) {
24900
24942
  else {
24901
24943
  // Shouldn't we always output the value then ?
24902
24944
  const value = cell.value;
24945
+ // If the cell contains a non-exported formula and that is evaluates to
24946
+ // nothing* ,we don't export it.
24947
+ // * non-falsy value are relevant and so are 0 and FALSE, which only leaves
24948
+ // the empty string.
24949
+ if (value === "")
24950
+ return undefined;
24903
24951
  const type = getCellType(value);
24904
24952
  attrs.push(["t", type]);
24905
24953
  node = escapeXml /*xml*/ `<v>${value}</v>`;
@@ -25559,7 +25607,11 @@ function addRows(construct, data, sheet) {
25559
25607
  let cellNode = escapeXml ``;
25560
25608
  // Either formula or static value inside the cell
25561
25609
  if (cell.isFormula) {
25562
- ({ attrs: additionalAttrs, node: cellNode } = addFormula(cell));
25610
+ const res = addFormula(cell);
25611
+ if (!res) {
25612
+ continue;
25613
+ }
25614
+ ({ attrs: additionalAttrs, node: cellNode } = res);
25563
25615
  }
25564
25616
  else if (cell.content && isMarkdownLink(cell.content)) {
25565
25617
  const { label } = parseMarkdownLink(cell.content);
@@ -31523,6 +31575,6 @@ exports.registries = registries;
31523
31575
  exports.setTranslationMethod = setTranslationMethod;
31524
31576
 
31525
31577
 
31526
- __info__.version = '15.0.22';
31527
- __info__.date = '2024-05-15T09:09:48.401Z';
31528
- __info__.hash = '431bca3';
31578
+ __info__.version = '15.0.24';
31579
+ __info__.date = '2024-07-02T08:44:51.424Z';
31580
+ __info__.hash = 'd1f2791';
@@ -2211,6 +2211,10 @@ declare class BordersPlugin extends CorePlugin<BordersPluginState> implements Bo
2211
2211
  * Get all the columns which contains at least a border
2212
2212
  */
2213
2213
  private getColumnsWithBorders;
2214
+ /**
2215
+ * Get all the rows which contains at least a border
2216
+ */
2217
+ private getRowsWithBorders;
2214
2218
  /**
2215
2219
  * Get the range of all the rows in the sheet
2216
2220
  */
@@ -8285,16 +8285,7 @@ class DateTimeCell extends NumberCell {
8285
8285
  }
8286
8286
  class LinkCell extends AbstractCell {
8287
8287
  constructor(id, content, properties = {}) {
8288
- var _a;
8289
8288
  const link = parseMarkdownLink(content);
8290
- properties = {
8291
- ...properties,
8292
- style: {
8293
- ...properties.style,
8294
- textColor: ((_a = properties.style) === null || _a === void 0 ? void 0 : _a.textColor) || LINK_COLOR,
8295
- underline: true,
8296
- },
8297
- };
8298
8289
  super(id, { value: link.label, type: CellValueType.text }, properties);
8299
8290
  this.link = link;
8300
8291
  this.content = content;
@@ -9239,6 +9230,22 @@ class BordersPlugin extends CorePlugin {
9239
9230
  return [];
9240
9231
  return Object.keys(sheetBorders).map((index) => parseInt(index, 10));
9241
9232
  }
9233
+ /**
9234
+ * Get all the rows which contains at least a border
9235
+ */
9236
+ getRowsWithBorders(sheetId) {
9237
+ var _a;
9238
+ const sheetBorders = (_a = this.borders[sheetId]) === null || _a === void 0 ? void 0 : _a.filter(isDefined);
9239
+ if (!sheetBorders)
9240
+ return [];
9241
+ const rowsWithBorders = new Set();
9242
+ for (const rowBorders of sheetBorders) {
9243
+ for (const rowBorder in rowBorders) {
9244
+ rowsWithBorders.add(parseInt(rowBorder, 10));
9245
+ }
9246
+ }
9247
+ return Array.from(rowsWithBorders);
9248
+ }
9242
9249
  /**
9243
9250
  * Get the range of all the rows in the sheet
9244
9251
  */
@@ -9289,7 +9296,7 @@ class BordersPlugin extends CorePlugin {
9289
9296
  destructive: false,
9290
9297
  });
9291
9298
  }
9292
- this.getRowsRange(sheetId)
9299
+ this.getRowsWithBorders(sheetId)
9293
9300
  .filter((row) => row >= start)
9294
9301
  .sort((a, b) => (delta < 0 ? a - b : b - a)) // start by the end when moving up
9295
9302
  .forEach((row) => {
@@ -9519,6 +9526,7 @@ class BordersPlugin extends CorePlugin {
9519
9526
  BordersPlugin.getters = ["getCellBorder"];
9520
9527
 
9521
9528
  const nbspRegexp = new RegExp(String.fromCharCode(160), "g");
9529
+ const LINK_STYLE = { textColor: LINK_COLOR, underline: true };
9522
9530
  /**
9523
9531
  * Core Plugin
9524
9532
  *
@@ -9765,7 +9773,8 @@ class CellPlugin extends CorePlugin {
9765
9773
  return this.buildFormulaContent(sheetId, cell.normalizedText, cell.dependencies);
9766
9774
  }
9767
9775
  getCellStyle(cell) {
9768
- return cell.style || {};
9776
+ const linkStyle = cell.isLink() ? LINK_STYLE : {};
9777
+ return { ...linkStyle, ...cell.style };
9769
9778
  }
9770
9779
  /**
9771
9780
  * Converts a zone to a XC coordinate system
@@ -24131,6 +24140,8 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24131
24140
  "BITOR",
24132
24141
  "BITRSHIFT",
24133
24142
  "BITXOR",
24143
+ "BYCOL",
24144
+ "BYROW",
24134
24145
  "CEILING.MATH",
24135
24146
  "CEILING.PRECISE",
24136
24147
  "CHISQ.DIST",
@@ -24138,6 +24149,8 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24138
24149
  "CHISQ.INV",
24139
24150
  "CHISQ.INV.RT",
24140
24151
  "CHISQ.TEST",
24152
+ "CHOOSECOLS",
24153
+ "CHOOSEROWS",
24141
24154
  "COMBINA",
24142
24155
  "CONCAT",
24143
24156
  "CONFIDENCE.NORM",
@@ -24150,14 +24163,17 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24150
24163
  "CSCH",
24151
24164
  "DAYS",
24152
24165
  "DECIMAL",
24166
+ "DROP",
24153
24167
  "ERF.PRECISE",
24154
24168
  "ERFC.PRECISE",
24169
+ "EXPAND",
24155
24170
  "EXPON.DIST",
24156
24171
  "F.DIST",
24157
24172
  "F.DIST.RT",
24158
24173
  "F.INV",
24159
24174
  "F.INV.RT",
24160
24175
  "F.TEST",
24176
+ "FIELDVALUE",
24161
24177
  "FILTERXML",
24162
24178
  "FLOOR.MATH",
24163
24179
  "FLOOR.PRECISE",
@@ -24172,6 +24188,7 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24172
24188
  "GAMMA.INV",
24173
24189
  "GAMMALN.PRECISE",
24174
24190
  "GAUSS",
24191
+ "HSTACK",
24175
24192
  "HYPGEOM.DIST",
24176
24193
  "IFNA",
24177
24194
  "IFS",
@@ -24184,9 +24201,14 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24184
24201
  "IMSINH",
24185
24202
  "IMTAN",
24186
24203
  "ISFORMULA",
24204
+ "ISOMITTED",
24187
24205
  "ISOWEEKNUM",
24206
+ "LAMBDA",
24207
+ "LET",
24188
24208
  "LOGNORM.DIST",
24189
24209
  "LOGNORM.INV",
24210
+ "MAKEARRAY",
24211
+ "MAP",
24190
24212
  "MAXIFS",
24191
24213
  "MINIFS",
24192
24214
  "MODE.MULT",
@@ -24206,17 +24228,26 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24206
24228
  "PERMUTATIONA",
24207
24229
  "PHI",
24208
24230
  "POISSON.DIST",
24231
+ "PQSOURCE",
24232
+ "PYTHON_STR",
24233
+ "PYTHON_TYPE",
24234
+ "PYTHON_TYPENAME",
24209
24235
  "QUARTILE.EXC",
24210
24236
  "QUARTILE.INC",
24211
24237
  "QUERYSTRING",
24238
+ "RANDARRAY",
24212
24239
  "RANK.AVG",
24213
24240
  "RANK.EQ",
24241
+ "REDUCE",
24214
24242
  "RRI",
24243
+ "SCAN",
24215
24244
  "SEC",
24216
24245
  "SECH",
24246
+ "SEQUENCE",
24217
24247
  "SHEET",
24218
24248
  "SHEETS",
24219
24249
  "SKEW.P",
24250
+ "SORTBY",
24220
24251
  "STDEV.P",
24221
24252
  "STDEV.S",
24222
24253
  "SWITCH",
@@ -24226,13 +24257,24 @@ const NON_RETROCOMPATIBLE_FUNCTIONS = [
24226
24257
  "T.INV",
24227
24258
  "T.INV.2T",
24228
24259
  "T.TEST",
24260
+ "TAKE",
24261
+ "TEXTAFTER",
24262
+ "TEXTBEFORE",
24229
24263
  "TEXTJOIN",
24264
+ "TEXTSPLIT",
24265
+ "TOCOL",
24266
+ "TOROW",
24230
24267
  "UNICHAR",
24231
24268
  "UNICODE",
24269
+ "UNIQUE",
24232
24270
  "VAR.P",
24233
24271
  "VAR.S",
24272
+ "VSTACK",
24234
24273
  "WEBSERVICE",
24235
24274
  "WEIBULL.DIST",
24275
+ "WRAPCOLS",
24276
+ "WRAPROWS",
24277
+ "XLOOKUP",
24236
24278
  "XOR",
24237
24279
  "Z.TEST",
24238
24280
  ];
@@ -24877,6 +24919,12 @@ function addFormula(cell) {
24877
24919
  else {
24878
24920
  // Shouldn't we always output the value then ?
24879
24921
  const value = cell.value;
24922
+ // If the cell contains a non-exported formula and that is evaluates to
24923
+ // nothing* ,we don't export it.
24924
+ // * non-falsy value are relevant and so are 0 and FALSE, which only leaves
24925
+ // the empty string.
24926
+ if (value === "")
24927
+ return undefined;
24880
24928
  const type = getCellType(value);
24881
24929
  attrs.push(["t", type]);
24882
24930
  node = escapeXml /*xml*/ `<v>${value}</v>`;
@@ -25536,7 +25584,11 @@ function addRows(construct, data, sheet) {
25536
25584
  let cellNode = escapeXml ``;
25537
25585
  // Either formula or static value inside the cell
25538
25586
  if (cell.isFormula) {
25539
- ({ attrs: additionalAttrs, node: cellNode } = addFormula(cell));
25587
+ const res = addFormula(cell);
25588
+ if (!res) {
25589
+ continue;
25590
+ }
25591
+ ({ attrs: additionalAttrs, node: cellNode } = res);
25540
25592
  }
25541
25593
  else if (cell.content && isMarkdownLink(cell.content)) {
25542
25594
  const { label } = parseMarkdownLink(cell.content);
@@ -31478,6 +31530,6 @@ const helpers = {
31478
31530
  export { CommandResult, CorePlugin, DATETIME_FORMAT, DataSource, DispatchResult, Model, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, DEBUG as __DEBUG__, __info__, astToFormula, cellTypes, convertAstNodes, coreTypes, functionCache, helpers, invalidateEvaluationCommands, normalize, parse, readonlyAllowedCommands, registries, setTranslationMethod };
31479
31531
 
31480
31532
 
31481
- __info__.version = '15.0.22';
31482
- __info__.date = '2024-05-15T09:09:48.401Z';
31483
- __info__.hash = '431bca3';
31533
+ __info__.version = '15.0.24';
31534
+ __info__.date = '2024-07-02T08:44:51.424Z';
31535
+ __info__.hash = 'd1f2791';
@@ -8305,16 +8305,7 @@
8305
8305
  }
8306
8306
  class LinkCell extends AbstractCell {
8307
8307
  constructor(id, content, properties = {}) {
8308
- var _a;
8309
8308
  const link = parseMarkdownLink(content);
8310
- properties = {
8311
- ...properties,
8312
- style: {
8313
- ...properties.style,
8314
- textColor: ((_a = properties.style) === null || _a === void 0 ? void 0 : _a.textColor) || LINK_COLOR,
8315
- underline: true,
8316
- },
8317
- };
8318
8309
  super(id, { value: link.label, type: CellValueType.text }, properties);
8319
8310
  this.link = link;
8320
8311
  this.content = content;
@@ -9259,6 +9250,22 @@
9259
9250
  return [];
9260
9251
  return Object.keys(sheetBorders).map((index) => parseInt(index, 10));
9261
9252
  }
9253
+ /**
9254
+ * Get all the rows which contains at least a border
9255
+ */
9256
+ getRowsWithBorders(sheetId) {
9257
+ var _a;
9258
+ const sheetBorders = (_a = this.borders[sheetId]) === null || _a === void 0 ? void 0 : _a.filter(isDefined);
9259
+ if (!sheetBorders)
9260
+ return [];
9261
+ const rowsWithBorders = new Set();
9262
+ for (const rowBorders of sheetBorders) {
9263
+ for (const rowBorder in rowBorders) {
9264
+ rowsWithBorders.add(parseInt(rowBorder, 10));
9265
+ }
9266
+ }
9267
+ return Array.from(rowsWithBorders);
9268
+ }
9262
9269
  /**
9263
9270
  * Get the range of all the rows in the sheet
9264
9271
  */
@@ -9309,7 +9316,7 @@
9309
9316
  destructive: false,
9310
9317
  });
9311
9318
  }
9312
- this.getRowsRange(sheetId)
9319
+ this.getRowsWithBorders(sheetId)
9313
9320
  .filter((row) => row >= start)
9314
9321
  .sort((a, b) => (delta < 0 ? a - b : b - a)) // start by the end when moving up
9315
9322
  .forEach((row) => {
@@ -9539,6 +9546,7 @@
9539
9546
  BordersPlugin.getters = ["getCellBorder"];
9540
9547
 
9541
9548
  const nbspRegexp = new RegExp(String.fromCharCode(160), "g");
9549
+ const LINK_STYLE = { textColor: LINK_COLOR, underline: true };
9542
9550
  /**
9543
9551
  * Core Plugin
9544
9552
  *
@@ -9785,7 +9793,8 @@
9785
9793
  return this.buildFormulaContent(sheetId, cell.normalizedText, cell.dependencies);
9786
9794
  }
9787
9795
  getCellStyle(cell) {
9788
- return cell.style || {};
9796
+ const linkStyle = cell.isLink() ? LINK_STYLE : {};
9797
+ return { ...linkStyle, ...cell.style };
9789
9798
  }
9790
9799
  /**
9791
9800
  * Converts a zone to a XC coordinate system
@@ -24151,6 +24160,8 @@
24151
24160
  "BITOR",
24152
24161
  "BITRSHIFT",
24153
24162
  "BITXOR",
24163
+ "BYCOL",
24164
+ "BYROW",
24154
24165
  "CEILING.MATH",
24155
24166
  "CEILING.PRECISE",
24156
24167
  "CHISQ.DIST",
@@ -24158,6 +24169,8 @@
24158
24169
  "CHISQ.INV",
24159
24170
  "CHISQ.INV.RT",
24160
24171
  "CHISQ.TEST",
24172
+ "CHOOSECOLS",
24173
+ "CHOOSEROWS",
24161
24174
  "COMBINA",
24162
24175
  "CONCAT",
24163
24176
  "CONFIDENCE.NORM",
@@ -24170,14 +24183,17 @@
24170
24183
  "CSCH",
24171
24184
  "DAYS",
24172
24185
  "DECIMAL",
24186
+ "DROP",
24173
24187
  "ERF.PRECISE",
24174
24188
  "ERFC.PRECISE",
24189
+ "EXPAND",
24175
24190
  "EXPON.DIST",
24176
24191
  "F.DIST",
24177
24192
  "F.DIST.RT",
24178
24193
  "F.INV",
24179
24194
  "F.INV.RT",
24180
24195
  "F.TEST",
24196
+ "FIELDVALUE",
24181
24197
  "FILTERXML",
24182
24198
  "FLOOR.MATH",
24183
24199
  "FLOOR.PRECISE",
@@ -24192,6 +24208,7 @@
24192
24208
  "GAMMA.INV",
24193
24209
  "GAMMALN.PRECISE",
24194
24210
  "GAUSS",
24211
+ "HSTACK",
24195
24212
  "HYPGEOM.DIST",
24196
24213
  "IFNA",
24197
24214
  "IFS",
@@ -24204,9 +24221,14 @@
24204
24221
  "IMSINH",
24205
24222
  "IMTAN",
24206
24223
  "ISFORMULA",
24224
+ "ISOMITTED",
24207
24225
  "ISOWEEKNUM",
24226
+ "LAMBDA",
24227
+ "LET",
24208
24228
  "LOGNORM.DIST",
24209
24229
  "LOGNORM.INV",
24230
+ "MAKEARRAY",
24231
+ "MAP",
24210
24232
  "MAXIFS",
24211
24233
  "MINIFS",
24212
24234
  "MODE.MULT",
@@ -24226,17 +24248,26 @@
24226
24248
  "PERMUTATIONA",
24227
24249
  "PHI",
24228
24250
  "POISSON.DIST",
24251
+ "PQSOURCE",
24252
+ "PYTHON_STR",
24253
+ "PYTHON_TYPE",
24254
+ "PYTHON_TYPENAME",
24229
24255
  "QUARTILE.EXC",
24230
24256
  "QUARTILE.INC",
24231
24257
  "QUERYSTRING",
24258
+ "RANDARRAY",
24232
24259
  "RANK.AVG",
24233
24260
  "RANK.EQ",
24261
+ "REDUCE",
24234
24262
  "RRI",
24263
+ "SCAN",
24235
24264
  "SEC",
24236
24265
  "SECH",
24266
+ "SEQUENCE",
24237
24267
  "SHEET",
24238
24268
  "SHEETS",
24239
24269
  "SKEW.P",
24270
+ "SORTBY",
24240
24271
  "STDEV.P",
24241
24272
  "STDEV.S",
24242
24273
  "SWITCH",
@@ -24246,13 +24277,24 @@
24246
24277
  "T.INV",
24247
24278
  "T.INV.2T",
24248
24279
  "T.TEST",
24280
+ "TAKE",
24281
+ "TEXTAFTER",
24282
+ "TEXTBEFORE",
24249
24283
  "TEXTJOIN",
24284
+ "TEXTSPLIT",
24285
+ "TOCOL",
24286
+ "TOROW",
24250
24287
  "UNICHAR",
24251
24288
  "UNICODE",
24289
+ "UNIQUE",
24252
24290
  "VAR.P",
24253
24291
  "VAR.S",
24292
+ "VSTACK",
24254
24293
  "WEBSERVICE",
24255
24294
  "WEIBULL.DIST",
24295
+ "WRAPCOLS",
24296
+ "WRAPROWS",
24297
+ "XLOOKUP",
24256
24298
  "XOR",
24257
24299
  "Z.TEST",
24258
24300
  ];
@@ -24897,6 +24939,12 @@
24897
24939
  else {
24898
24940
  // Shouldn't we always output the value then ?
24899
24941
  const value = cell.value;
24942
+ // If the cell contains a non-exported formula and that is evaluates to
24943
+ // nothing* ,we don't export it.
24944
+ // * non-falsy value are relevant and so are 0 and FALSE, which only leaves
24945
+ // the empty string.
24946
+ if (value === "")
24947
+ return undefined;
24900
24948
  const type = getCellType(value);
24901
24949
  attrs.push(["t", type]);
24902
24950
  node = escapeXml /*xml*/ `<v>${value}</v>`;
@@ -25556,7 +25604,11 @@
25556
25604
  let cellNode = escapeXml ``;
25557
25605
  // Either formula or static value inside the cell
25558
25606
  if (cell.isFormula) {
25559
- ({ attrs: additionalAttrs, node: cellNode } = addFormula(cell));
25607
+ const res = addFormula(cell);
25608
+ if (!res) {
25609
+ continue;
25610
+ }
25611
+ ({ attrs: additionalAttrs, node: cellNode } = res);
25560
25612
  }
25561
25613
  else if (cell.content && isMarkdownLink(cell.content)) {
25562
25614
  const { label } = parseMarkdownLink(cell.content);
@@ -31522,9 +31574,9 @@
31522
31574
  Object.defineProperty(exports, '__esModule', { value: true });
31523
31575
 
31524
31576
 
31525
- __info__.version = '15.0.22';
31526
- __info__.date = '2024-05-15T09:09:48.401Z';
31527
- __info__.hash = '431bca3';
31577
+ __info__.version = '15.0.24';
31578
+ __info__.date = '2024-07-02T08:44:51.424Z';
31579
+ __info__.hash = 'd1f2791';
31528
31580
 
31529
31581
 
31530
31582
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);