@univerjs/engine-formula 0.4.0-alpha.2 → 0.4.0-experimental.20241017-da434a2

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/lib/es/index.js CHANGED
@@ -263,7 +263,7 @@ function deserializeRangeWithSheet(refString) {
263
263
  }
264
264
  };
265
265
  }
266
- const refStartString = refBody.substring(0, colonIndex), refEndString = refBody.substring(colonIndex + 1), startGrid = singleReferenceToGrid(refStartString), endGrid = singleReferenceToGrid(refEndString), startRow = startGrid.row, startColumn = startGrid.column, endRow = endGrid.row, endColumn = endGrid.column;
266
+ const refStartString = refBody.substring(0, colonIndex), refEndString = refBody.substring(colonIndex + 1), startGrid = singleReferenceToGrid(refStartString), endGrid = singleReferenceToGrid(refEndString), startRow = startGrid.row > endGrid.row ? endGrid.row : startGrid.row, startColumn = startGrid.column > endGrid.column ? endGrid.column : startGrid.column, endRow = startGrid.row > endGrid.row ? startGrid.row : endGrid.row, endColumn = startGrid.column > endGrid.column ? startGrid.column : endGrid.column;
267
267
  let rangeType = RANGE_TYPE.NORMAL;
268
268
  return Number.isNaN(startRow) && Number.isNaN(endRow) ? rangeType = RANGE_TYPE.COLUMN : Number.isNaN(startColumn) && Number.isNaN(endColumn) && (rangeType = RANGE_TYPE.ROW), {
269
269
  unitId,
@@ -4353,16 +4353,21 @@ const NUMBER_CACHE_LRU_COUNT = 2e5, NumberValueObjectCache = new FormulaAstLRU(N
4353
4353
  pow(valueObject) {
4354
4354
  if (valueObject.isArray())
4355
4355
  return valueObject.powInverse(this);
4356
- const currentValue = this.getValue(), value = valueObject.getValue();
4357
- if (typeof value == "string")
4356
+ if (this.isError())
4357
+ return this;
4358
+ const currentValue = this.getValue();
4359
+ let _valueObject = valueObject;
4360
+ if (valueObject.isString() && (_valueObject = valueObject.convertToNumberObjectValue()), _valueObject.isError())
4361
+ return _valueObject;
4362
+ const value = +_valueObject.getValue();
4363
+ if (Number.isNaN(value))
4358
4364
  return ErrorValueObject.create(ErrorType$1.VALUE);
4359
- if (typeof value == "number") {
4360
- if (!Number.isFinite(currentValue) || !Number.isFinite(value))
4361
- return ErrorValueObject.create(ErrorType$1.NUM);
4362
- const result = pow(currentValue, value);
4363
- return Number.isFinite(result) ? _NumberValueObject.create(result) : ErrorValueObject.create(ErrorType$1.NUM);
4364
- }
4365
- return typeof value == "boolean" ? _NumberValueObject.create(pow(currentValue, value ? 1 : 0)) : this;
4365
+ if (!Number.isFinite(currentValue) || !Number.isFinite(value))
4366
+ return ErrorValueObject.create(ErrorType$1.NUM);
4367
+ if (currentValue === 0)
4368
+ return value < 0 ? ErrorValueObject.create(ErrorType$1.DIV_BY_ZERO) : value === 0 ? ErrorValueObject.create(ErrorType$1.NUM) : _NumberValueObject.create(0);
4369
+ const result = pow(currentValue, value);
4370
+ return Number.isFinite(result) ? _NumberValueObject.create(result) : ErrorValueObject.create(ErrorType$1.NUM);
4366
4371
  }
4367
4372
  sqrt() {
4368
4373
  const currentValue = this.getValue();
@@ -6081,7 +6086,13 @@ let FormulaRuntimeService = (_a5 = class extends Disposable {
6081
6086
  const objectValueRefOrArray = functionVariant, { startRow, startColumn, endRow, endColumn } = objectValueRefOrArray.getRangePosition();
6082
6087
  if (startRow === endRow && startColumn === endColumn) {
6083
6088
  const firstCell = objectValueRefOrArray.getFirstCell(), valueObject = objectValueToCellValue(firstCell);
6084
- sheetData.setValue(row, column, valueObject), clearArrayUnitData.setValue(row, column, valueObject);
6089
+ sheetData.setValue(row, column, valueObject), clearArrayUnitData.setValue(row, column, valueObject), CELL_INVERTED_INDEX_CACHE.set(
6090
+ unitId,
6091
+ sheetId,
6092
+ column,
6093
+ firstCell.getValue(),
6094
+ row
6095
+ );
6085
6096
  return;
6086
6097
  }
6087
6098
  const arrayRange = {
@@ -6092,7 +6103,13 @@ let FormulaRuntimeService = (_a5 = class extends Disposable {
6092
6103
  };
6093
6104
  if (arrayData.setValue(row, column, arrayRange), arrayFormulaRange[sheetId] = arrayData.getData(), this._checkIfArrayFormulaRangeHasData(unitId, sheetId, row, column, arrayRange) || this._checkIfArrayFormulaExceeded(rowCount, columnCount, arrayRange)) {
6094
6105
  const errorObject = objectValueToCellValue(ErrorValueObject.create(ErrorType$1.SPILL));
6095
- sheetData.setValue(row, column, errorObject), clearArrayUnitData.setValue(row, column, errorObject);
6106
+ sheetData.setValue(row, column, errorObject), clearArrayUnitData.setValue(row, column, errorObject), CELL_INVERTED_INDEX_CACHE.set(
6107
+ unitId,
6108
+ sheetId,
6109
+ column,
6110
+ ErrorType$1.SPILL,
6111
+ row
6112
+ );
6096
6113
  const unitData2 = this._currentConfigService.getUnitData();
6097
6114
  objectValueRefOrArray.iterator((_, rowIndex, columnIndex) => {
6098
6115
  var _a27, _b;
@@ -6110,6 +6127,13 @@ let FormulaRuntimeService = (_a5 = class extends Disposable {
6110
6127
  } else {
6111
6128
  const spillError = ErrorValueObject.create(ErrorType$1.SPILL);
6112
6129
  objectValueRefOrArray.iterator((valueObject, rowIndex, columnIndex) => {
6130
+ CELL_INVERTED_INDEX_CACHE.set(
6131
+ unitId,
6132
+ sheetId,
6133
+ column - startColumn + columnIndex,
6134
+ valueObject ? valueObject.getValue() : 0,
6135
+ row - startRow + rowIndex
6136
+ );
6113
6137
  const value = objectValueToCellValue(valueObject);
6114
6138
  if (rowIndex === startRow && columnIndex === startColumn) {
6115
6139
  if (valueObject != null && valueObject.isError() && valueObject.isEqualType(spillError))
@@ -6122,7 +6146,13 @@ let FormulaRuntimeService = (_a5 = class extends Disposable {
6122
6146
  }
6123
6147
  } else {
6124
6148
  const valueObject = objectValueToCellValue(functionVariant);
6125
- sheetData.setValue(row, column, valueObject), clearArrayUnitData.setValue(row, column, valueObject);
6149
+ sheetData.setValue(row, column, valueObject), CELL_INVERTED_INDEX_CACHE.set(
6150
+ unitId,
6151
+ sheetId,
6152
+ column,
6153
+ functionVariant.getValue(),
6154
+ row
6155
+ ), clearArrayUnitData.setValue(row, column, valueObject);
6126
6156
  }
6127
6157
  }
6128
6158
  getUnitData() {
@@ -1,5 +1,5 @@
1
- import { compareToken } from '../../basics/token';
2
1
  import { FormulaAstLRU } from '../../basics/cache-lru';
2
+ import { compareToken } from '../../basics/token';
3
3
  import { BaseValueObject, ErrorValueObject } from './base-value-object';
4
4
  export type PrimitiveValueType = string | boolean | number | null;
5
5
  export declare class NullValueObject extends BaseValueObject {