# HyperFormula Documentation > Full documentation corpus for LLM consumption. > Each page below is also served as clean Markdown — append `.md` to a docs page URL. --- ## / URL: https://hyperformula.handsontable.com/docs/

HyperFormula - A headless spreadsheet, a parser and evaluator of Excel formulas

An open-source headless spreadsheet for business web apps

npm total downloads npm monthly downloads GitHub contributors Known Vulnerabilities
FOSSA Status GitHub Workflow Status codecov

--- HyperFormula is a headless spreadsheet built in TypeScript, serving as both a parser and evaluator of spreadsheet formulas. It can be integrated into your browser or utilized as a service with Node.js as your back-end technology. ## What HyperFormula can be used for? HyperFormula doesn't assume any existing user interface, making it a general-purpose library that can be used in various business applications. Here are some examples: - Deterministic compute layer for AI & LLMs - Calculated fields in CRM and ERP software - Custom spreadsheet-like app - Business logic builder - Forms and form builder - Educational app - Online calculator ## Features - [Function syntax compatible with Microsoft Excel](https://hyperformula.handsontable.com/docs/guide/compatibility-with-microsoft-excel.md) and [Google Sheets](https://hyperformula.handsontable.com/docs/guide/compatibility-with-google-sheets.md) - High-speed parsing and evaluation of spreadsheet formulas - [A library of ~400 built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) - [Support for custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) - [Support for Node.js](https://hyperformula.handsontable.com/docs/guide/server-side-installation.md#install-with-npm-or-yarn) - [Support for undo/redo](https://hyperformula.handsontable.com/docs/guide/undo-redo.md) - [Support for CRUD operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) - [Support for clipboard](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md) - [Support for named expressions](https://hyperformula.handsontable.com/docs/guide/named-expressions.md) - [Support for data sorting](https://hyperformula.handsontable.com/docs/guide/sorting-data.md) - [Support for formula localization with 17 built-in languages](https://hyperformula.handsontable.com/docs/guide/i18n-features.md) - Easy integration with any front-end or back-end application - GPLv3 or a [commercial license](https://handsontable.com/get-a-quote) - Maintained by the team that stands behind the [Handsontable](https://handsontable.com/) data grid ## Documentation - [Client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) - [Server-side installation](https://hyperformula.handsontable.com/docs/guide/server-side-installation.md) - [Basic usage](https://hyperformula.handsontable.com/docs/guide/basic-usage.md) - [Configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) - [List of built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) - [API Reference](https://hyperformula.handsontable.com/docs/api/) ## Integrations - [Integration with React](https://hyperformula.handsontable.com/docs/guide/integration-with-react.md#demo) - [Integration with Angular](https://hyperformula.handsontable.com/docs/guide/integration-with-angular.md#demo) - [Integration with Vue](https://hyperformula.handsontable.com/docs/guide/integration-with-vue.md#demo) - [Integration with Svelte](https://hyperformula.handsontable.com/docs/guide/integration-with-svelte.md#demo) ## Installation and usage Install the library from [npm](https://www.npmjs.com/package/hyperformula) like so: ```bash npm install hyperformula ``` Once installed, you can use it to develop applications tailored to your specific business needs. Here, we've used it to craft a form that calculates mortgage payments using the `PMT` formula. ```js import { HyperFormula } from 'hyperformula'; // Create a HyperFormula instance const hf = HyperFormula.buildEmpty({ licenseKey: 'gpl-v3' }); // Add an empty sheet const sheetName = hf.addSheet('Mortgage Calculator'); const sheetId = hf.getSheetId(sheetName); // Enter the mortgage parameters hf.addNamedExpression('AnnualInterestRate', '8%'); hf.addNamedExpression('NumberOfMonths', 360); hf.addNamedExpression('LoanAmount', 800000); // Use the PMT function to calculate the monthly payment hf.setCellContents({ sheet: sheetId, row: 0, col: 0 }, [['Monthly Payment', '=PMT(AnnualInterestRate/12, NumberOfMonths, -LoanAmount)']]); // Display the result console.log(`${hf.getCellValue({ sheet: sheetId, row: 0, col: 0 })}: ${hf.getCellValue({ sheet: sheetId, row: 0, col: 1 })}`); ``` [Run this code in StackBlitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/mortgage-calculator) ## Contributing Contributions are welcome, but before you make them, please read the [Contributing Guide](https://hyperformula.handsontable.com/docs/guide/contributing.md) and accept the [Contributor License Agreement](https://goo.gl/forms/yuutGuN0RjsikVpM2). ## License HyperFormula is available under two different licenses: GPLv3 and proprietary. The proprietary license can be purchased by [contacting our team](https://handsontable.com/get-a-quote) at Handsontable. Copyright (c) Handsoncode --- ## /api-ref-readme.html URL: https://hyperformula.handsontable.com/docs/api-ref-readme Welcome to the HyperFormula `v3.4.0` API! The API reference documentation provides detailed information for methods, error types, event types, and all the configuration options available in HyperFormula. Current build: 10/08/2026 16:11:58 ### API reference index The following sections explain shortly what can be found in the left sidebar navigation menu. #### HyperFormula This section contains information about the class for creating HyperFormula instance. It enlists all available public methods alongside their descriptions, parameter types, and examples. The snippet shows an example how to use `buildFromArray` which is one of [three static methods](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#factories) for creating an instance of HyperFormula: ```javascript const sheetData = [ ['0', '=SUM(1, 2, 3)', '52'], ['=SUM(A1:C1)', '', '=A1'], ['2', '=SUM(A1:C1)', '91'], ]; const hfInstance = HyperFormula.buildFromArray(sheetData, options); ``` #### ConfigParams This section contains information about options that allow you to configure the instance of HyperFormula. An example set of options: ```javascript const options = { licenseKey: 'gpl-v3', nullDate: { year: 1900, month: 1, day: 1 }, functionArgSeparator: '.' }; ``` #### Listeners In this section, you can find information about all events you can subscribe to. For example, subscribing to `sheetAdded` event: ```javascript const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); const handler = ( ) => { console.log('baz') } hfInstance.on('sheetAdded', handler); const nameProvided = hfInstance.addSheet('MySheet3'); ``` --- ## API Reference Overview URL: https://hyperformula.handsontable.com/docs/api/ # API Reference Overview Welcome to the HyperFormula `v3.4.0` API! The API reference documentation provides detailed information for methods, error types, event types, and all the configuration options available in HyperFormula. Current build: 10/08/2026 16:11:58 ### API reference index The following sections explain shortly what can be found in the left sidebar navigation menu. #### HyperFormula This section contains information about the class for creating HyperFormula instance. It enlists all available public methods alongside their descriptions, parameter types, and examples. The snippet shows an example how to use `buildFromArray` which is one of [three static methods](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#factories) for creating an instance of HyperFormula: ```javascript const sheetData = [ ['0', '=SUM(1, 2, 3)', '52'], ['=SUM(A1:C1)', '', '=A1'], ['2', '=SUM(A1:C1)', '91'], ]; const hfInstance = HyperFormula.buildFromArray(sheetData, options); ``` #### ConfigParams This section contains information about options that allow you to configure the instance of HyperFormula. An example set of options: ```javascript const options = { licenseKey: 'gpl-v3', nullDate: { year: 1900, month: 1, day: 1 }, functionArgSeparator: '.' }; ``` #### Listeners In this section, you can find information about all events you can subscribe to. For example, subscribing to `sheetAdded` event: ```javascript const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); const handler = ( ) => { console.log('baz') } hfInstance.on('sheetAdded', handler); const nameProvided = hfInstance.addSheet('MySheet3'); ``` --- ## AbsoluteCellRange URL: https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange # AbsoluteCellRange ## Constructors ### constructor \+ **new AbsoluteCellRange**(`start`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L47)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `end` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ## Properties ### end • **end**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L47)* ___ ### start • **start**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L46)* ## Accessors ### sheet • **get sheet**(): *number* *Defined in [src/AbsoluteCellRange.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L60)* **Returns:** *number* ## Methods ### addressInRange ▸ **addressInRange**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:157](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L157)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *boolean* ___ ### addresses ▸ **addresses**(`dependencyGraph`: DependencyGraph): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* *Defined in [src/AbsoluteCellRange.ts:315](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L315)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* ___ ### addressesArrayMap ▸ **addressesArrayMap**‹**T**›(`dependencyGraph`: DependencyGraph, `op`: function): *T[][]* *Defined in [src/AbsoluteCellRange.ts:299](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L299)* **Type parameters:** ▪ **T** **Parameters:** ▪ **dependencyGraph**: *DependencyGraph* ▪ **op**: *function* ▸ (`arg`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *T* **Parameters:** Name | Type | ------ | ------ | `arg` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *T[][]* ___ ### addressesWithDirection ▸ **addressesWithDirection**(`right`: number, `bottom`: number, `dependencyGraph`: DependencyGraph): *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* *Defined in [src/AbsoluteCellRange.ts:331](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L331)* **Parameters:** Name | Type | ------ | ------ | `right` | number | `bottom` | number | `dependencyGraph` | DependencyGraph | **Returns:** *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* ___ ### arrayOfAddressesInRange ▸ **arrayOfAddressesInRange**(): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* *Defined in [src/AbsoluteCellRange.ts:275](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L275)* **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* ___ ### columnInRange ▸ **columnInRange**(`address`: [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L168)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md) | **Returns:** *boolean* ___ ### containsRange ▸ **containsRange**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:182](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L182)* **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### doesOverlap ▸ **doesOverlap**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:144](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L144)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### effectiveEndColumn ▸ **effectiveEndColumn**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L390)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveEndRow ▸ **effectiveEndRow**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:394](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L394)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveHeight ▸ **effectiveHeight**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:402](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L402)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveWidth ▸ **effectiveWidth**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:398](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L398)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### exceedsSheetSizeLimits ▸ **exceedsSheetSizeLimits**(`maxColumns`: number, `maxRows`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:386](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L386)* **Parameters:** Name | Type | ------ | ------ | `maxColumns` | number | `maxRows` | number | **Returns:** *boolean* ___ ### expandByColumns ▸ **expandByColumns**(`numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:230](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L230)* **Parameters:** Name | Type | ------ | ------ | `numberOfColumns` | number | **Returns:** *void* ___ ### expandByRows ▸ **expandByRows**(`numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:217](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L217)* **Parameters:** Name | Type | ------ | ------ | `numberOfRows` | number | **Returns:** *void* ___ ### getAddress ▸ **getAddress**(`col`: number, `row`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:379](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L379)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### height ▸ **height**(): *number* *Defined in [src/AbsoluteCellRange.ts:267](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L267)* **Returns:** *number* ___ ### includesColumn ▸ **includesColumn**(`column`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:208](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L208)* **Parameters:** Name | Type | ------ | ------ | `column` | number | **Returns:** *boolean* ___ ### includesRow ▸ **includesRow**(`row`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L204)* **Parameters:** Name | Type | ------ | ------ | `row` | number | **Returns:** *boolean* ___ ### intersectionWith ▸ **intersectionWith**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L186)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### isFinite ▸ **isFinite**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L140)* **Returns:** *boolean* ___ ### moveToSheet ▸ **moveToSheet**(`toSheet`: number): *void* *Defined in [src/AbsoluteCellRange.ts:234](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L234)* **Parameters:** Name | Type | ------ | ------ | `toSheet` | number | **Returns:** *void* ___ ### rangeWithSameHeight ▸ **rangeWithSameHeight**(`startColumn`: number, `numberOfColumns`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:255](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L255)* **Parameters:** Name | Type | ------ | ------ | `startColumn` | number | `numberOfColumns` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### rangeWithSameWidth ▸ **rangeWithSameWidth**(`startRow`: number, `numberOfRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:251](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L251)* **Parameters:** Name | Type | ------ | ------ | `startRow` | number | `numberOfRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### removeSpan ▸ **removeSpan**(`span`: [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span)): *void* *Defined in [src/AbsoluteCellRange.ts:239](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L239)* **Parameters:** Name | Type | ------ | ------ | `span` | [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span) | **Returns:** *void* ___ ### rowInRange ▸ **rowInRange**(`address`: [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:175](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L175)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md) | **Returns:** *boolean* ___ ### sameAs ▸ **sameAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:295](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L295)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### sameDimensionsAs ▸ **sameDimensionsAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:291](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L291)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### shiftByColumns ▸ **shiftByColumns**(`numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:221](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L221)* **Parameters:** Name | Type | ------ | ------ | `numberOfColumns` | number | **Returns:** *void* ___ ### shiftByRows ▸ **shiftByRows**(`numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:212](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L212)* **Parameters:** Name | Type | ------ | ------ | `numberOfRows` | number | **Returns:** *void* ___ ### shifted ▸ **shifted**(`byCols`: number, `byRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:226](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L226)* **Parameters:** Name | Type | ------ | ------ | `byCols` | number | `byRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### shouldBeRemoved ▸ **shouldBeRemoved**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:247](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L247)* **Returns:** *boolean* ___ ### size ▸ **size**(): *number* *Defined in [src/AbsoluteCellRange.ts:271](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L271)* **Returns:** *number* ___ ### toString ▸ **toString**(): *string* *Defined in [src/AbsoluteCellRange.ts:259](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L259)* **Returns:** *string* ___ ### width ▸ **width**(): *number* *Defined in [src/AbsoluteCellRange.ts:263](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L263)* **Returns:** *number* ___ ### withStart ▸ **withStart**(`newStart`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:287](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L287)* **Parameters:** Name | Type | ------ | ------ | `newStart` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAst ▸ **fromAst**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L83)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAstOrUndef ▸ **fromAstOrUndef**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:93](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L93)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### fromCellRange ▸ **fromCellRange**(`x`: [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md), `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `x` | [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md) | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromCoordinates ▸ **fromCoordinates**(`sheet`: number, `x1`: number, `y1`: number, `x2`: number, `y2`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L136)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `x1` | number | `y1` | number | `x2` | number | `y2` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromSimpleCellAddresses ▸ **fromSimpleCellAddresses**(`start`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `end` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFrom ▸ **spanFrom**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L108)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFromOrUndef ▸ **spanFromOrUndef**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:116](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L116)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* --- ## AbsoluteColumnRange URL: https://hyperformula.handsontable.com/docs/api/classes/absolutecolumnrange # AbsoluteColumnRange ## Constructors ### constructor \+ **new AbsoluteColumnRange**(`sheet`: number, `columnStart`: number, `columnEnd`: number): *[AbsoluteColumnRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecolumnrange.md)* *Defined in [src/AbsoluteCellRange.ts:441](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L441)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `columnStart` | number | `columnEnd` | number | **Returns:** *[AbsoluteColumnRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecolumnrange.md)* ## Properties ### end • **end**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L47)* ___ ### start • **start**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L46)* ## Accessors ### sheet • **get sheet**(): *number* *Defined in [src/AbsoluteCellRange.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L60)* **Returns:** *number* ## Methods ### addressInRange ▸ **addressInRange**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:157](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L157)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *boolean* ___ ### addresses ▸ **addresses**(`dependencyGraph`: DependencyGraph): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* *Defined in [src/AbsoluteCellRange.ts:315](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L315)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* ___ ### addressesArrayMap ▸ **addressesArrayMap**‹**T**›(`dependencyGraph`: DependencyGraph, `op`: function): *T[][]* *Defined in [src/AbsoluteCellRange.ts:299](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L299)* **Type parameters:** ▪ **T** **Parameters:** ▪ **dependencyGraph**: *DependencyGraph* ▪ **op**: *function* ▸ (`arg`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *T* **Parameters:** Name | Type | ------ | ------ | `arg` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *T[][]* ___ ### addressesWithDirection ▸ **addressesWithDirection**(`right`: number, `bottom`: number, `dependencyGraph`: DependencyGraph): *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* *Defined in [src/AbsoluteCellRange.ts:331](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L331)* **Parameters:** Name | Type | ------ | ------ | `right` | number | `bottom` | number | `dependencyGraph` | DependencyGraph | **Returns:** *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* ___ ### arrayOfAddressesInRange ▸ **arrayOfAddressesInRange**(): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* *Defined in [src/AbsoluteCellRange.ts:275](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L275)* **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* ___ ### columnInRange ▸ **columnInRange**(`address`: [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L168)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md) | **Returns:** *boolean* ___ ### containsRange ▸ **containsRange**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:182](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L182)* **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### doesOverlap ▸ **doesOverlap**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:144](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L144)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### effectiveEndColumn ▸ **effectiveEndColumn**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L390)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveEndRow ▸ **effectiveEndRow**(`dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:482](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L482)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveHeight ▸ **effectiveHeight**(`dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:486](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L486)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveWidth ▸ **effectiveWidth**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:398](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L398)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### exceedsSheetSizeLimits ▸ **exceedsSheetSizeLimits**(`maxColumns`: number, `_maxRows`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:478](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L478)* **Parameters:** Name | Type | ------ | ------ | `maxColumns` | number | `_maxRows` | number | **Returns:** *boolean* ___ ### expandByColumns ▸ **expandByColumns**(`numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:230](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L230)* **Parameters:** Name | Type | ------ | ------ | `numberOfColumns` | number | **Returns:** *void* ___ ### expandByRows ▸ **expandByRows**(`_numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:466](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L466)* **Parameters:** Name | Type | ------ | ------ | `_numberOfRows` | number | **Returns:** *void* ___ ### getAddress ▸ **getAddress**(`col`: number, `row`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:379](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L379)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### height ▸ **height**(): *number* *Defined in [src/AbsoluteCellRange.ts:267](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L267)* **Returns:** *number* ___ ### includesColumn ▸ **includesColumn**(`column`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:208](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L208)* **Parameters:** Name | Type | ------ | ------ | `column` | number | **Returns:** *boolean* ___ ### includesRow ▸ **includesRow**(`row`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L204)* **Parameters:** Name | Type | ------ | ------ | `row` | number | **Returns:** *boolean* ___ ### intersectionWith ▸ **intersectionWith**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L186)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### isFinite ▸ **isFinite**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L140)* **Returns:** *boolean* ___ ### moveToSheet ▸ **moveToSheet**(`toSheet`: number): *void* *Defined in [src/AbsoluteCellRange.ts:234](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L234)* **Parameters:** Name | Type | ------ | ------ | `toSheet` | number | **Returns:** *void* ___ ### rangeWithSameHeight ▸ **rangeWithSameHeight**(`startColumn`: number, `numberOfColumns`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:474](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L474)* **Parameters:** Name | Type | ------ | ------ | `startColumn` | number | `numberOfColumns` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### rangeWithSameWidth ▸ **rangeWithSameWidth**(`startRow`: number, `numberOfRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:251](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L251)* **Parameters:** Name | Type | ------ | ------ | `startRow` | number | `numberOfRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### removeSpan ▸ **removeSpan**(`span`: [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span)): *void* *Defined in [src/AbsoluteCellRange.ts:239](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L239)* **Parameters:** Name | Type | ------ | ------ | `span` | [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span) | **Returns:** *void* ___ ### rowInRange ▸ **rowInRange**(`address`: [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:175](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L175)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md) | **Returns:** *boolean* ___ ### sameAs ▸ **sameAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:295](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L295)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### sameDimensionsAs ▸ **sameDimensionsAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:291](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L291)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### shiftByColumns ▸ **shiftByColumns**(`numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:221](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L221)* **Parameters:** Name | Type | ------ | ------ | `numberOfColumns` | number | **Returns:** *void* ___ ### shiftByRows ▸ **shiftByRows**(`_numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:462](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L462)* **Parameters:** Name | Type | ------ | ------ | `_numberOfRows` | number | **Returns:** *void* ___ ### shifted ▸ **shifted**(`byCols`: number, `_byRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:470](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L470)* **Parameters:** Name | Type | ------ | ------ | `byCols` | number | `_byRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### shouldBeRemoved ▸ **shouldBeRemoved**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:458](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L458)* **Returns:** *boolean* ___ ### size ▸ **size**(): *number* *Defined in [src/AbsoluteCellRange.ts:271](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L271)* **Returns:** *number* ___ ### toString ▸ **toString**(): *string* *Defined in [src/AbsoluteCellRange.ts:259](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L259)* **Returns:** *string* ___ ### width ▸ **width**(): *number* *Defined in [src/AbsoluteCellRange.ts:263](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L263)* **Returns:** *number* ___ ### withStart ▸ **withStart**(`newStart`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:287](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L287)* **Parameters:** Name | Type | ------ | ------ | `newStart` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAst ▸ **fromAst**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L83)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAstOrUndef ▸ **fromAstOrUndef**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:93](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L93)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### fromCellRange ▸ **fromCellRange**(`x`: [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md), `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `x` | [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md) | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromColumnRange ▸ **fromColumnRange**(`x`: ColumnRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteColumnRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecolumnrange.md)* *Defined in [src/AbsoluteCellRange.ts:449](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L449)* **Parameters:** Name | Type | ------ | ------ | `x` | ColumnRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteColumnRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecolumnrange.md)* ___ ### fromCoordinates ▸ **fromCoordinates**(`sheet`: number, `x1`: number, `y1`: number, `x2`: number, `y2`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L136)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `x1` | number | `y1` | number | `x2` | number | `y2` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromSimpleCellAddresses ▸ **fromSimpleCellAddresses**(`start`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `end` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFrom ▸ **spanFrom**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L108)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFromOrUndef ▸ **spanFromOrUndef**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:116](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L116)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* --- ## AbsoluteRowRange URL: https://hyperformula.handsontable.com/docs/api/classes/absoluterowrange # AbsoluteRowRange ## Constructors ### constructor \+ **new AbsoluteRowRange**(`sheet`: number, `rowStart`: number, `rowEnd`: number): *[AbsoluteRowRange](https://hyperformula.handsontable.com/docs/api/classes/absoluterowrange.md)* *Defined in [src/AbsoluteCellRange.ts:495](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L495)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `rowStart` | number | `rowEnd` | number | **Returns:** *[AbsoluteRowRange](https://hyperformula.handsontable.com/docs/api/classes/absoluterowrange.md)* ## Properties ### end • **end**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L47)* ___ ### start • **start**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L46)* ## Accessors ### sheet • **get sheet**(): *number* *Defined in [src/AbsoluteCellRange.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L60)* **Returns:** *number* ## Methods ### addressInRange ▸ **addressInRange**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:157](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L157)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *boolean* ___ ### addresses ▸ **addresses**(`dependencyGraph`: DependencyGraph): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* *Defined in [src/AbsoluteCellRange.ts:315](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L315)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[]* ___ ### addressesArrayMap ▸ **addressesArrayMap**‹**T**›(`dependencyGraph`: DependencyGraph, `op`: function): *T[][]* *Defined in [src/AbsoluteCellRange.ts:299](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L299)* **Type parameters:** ▪ **T** **Parameters:** ▪ **dependencyGraph**: *DependencyGraph* ▪ **op**: *function* ▸ (`arg`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *T* **Parameters:** Name | Type | ------ | ------ | `arg` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *T[][]* ___ ### addressesWithDirection ▸ **addressesWithDirection**(`right`: number, `bottom`: number, `dependencyGraph`: DependencyGraph): *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* *Defined in [src/AbsoluteCellRange.ts:331](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L331)* **Parameters:** Name | Type | ------ | ------ | `right` | number | `bottom` | number | `dependencyGraph` | DependencyGraph | **Returns:** *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* ___ ### arrayOfAddressesInRange ▸ **arrayOfAddressesInRange**(): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* *Defined in [src/AbsoluteCellRange.ts:275](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L275)* **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)[][]* ___ ### columnInRange ▸ **columnInRange**(`address`: [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L168)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md) | **Returns:** *boolean* ___ ### containsRange ▸ **containsRange**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:182](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L182)* **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### doesOverlap ▸ **doesOverlap**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:144](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L144)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### effectiveEndColumn ▸ **effectiveEndColumn**(`dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:536](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L536)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveEndRow ▸ **effectiveEndRow**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:394](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L394)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveHeight ▸ **effectiveHeight**(`_dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:402](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L402)* **Parameters:** Name | Type | ------ | ------ | `_dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### effectiveWidth ▸ **effectiveWidth**(`dependencyGraph`: DependencyGraph): *number* *Defined in [src/AbsoluteCellRange.ts:540](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L540)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *number* ___ ### exceedsSheetSizeLimits ▸ **exceedsSheetSizeLimits**(`_maxColumns`: number, `maxRows`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:532](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L532)* **Parameters:** Name | Type | ------ | ------ | `_maxColumns` | number | `maxRows` | number | **Returns:** *boolean* ___ ### expandByColumns ▸ **expandByColumns**(`_numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:520](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L520)* **Parameters:** Name | Type | ------ | ------ | `_numberOfColumns` | number | **Returns:** *void* ___ ### expandByRows ▸ **expandByRows**(`numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:217](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L217)* **Parameters:** Name | Type | ------ | ------ | `numberOfRows` | number | **Returns:** *void* ___ ### getAddress ▸ **getAddress**(`col`: number, `row`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:379](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L379)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### height ▸ **height**(): *number* *Defined in [src/AbsoluteCellRange.ts:267](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L267)* **Returns:** *number* ___ ### includesColumn ▸ **includesColumn**(`column`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:208](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L208)* **Parameters:** Name | Type | ------ | ------ | `column` | number | **Returns:** *boolean* ___ ### includesRow ▸ **includesRow**(`row`: number): *boolean* *Defined in [src/AbsoluteCellRange.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L204)* **Parameters:** Name | Type | ------ | ------ | `row` | number | **Returns:** *boolean* ___ ### intersectionWith ▸ **intersectionWith**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L186)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### isFinite ▸ **isFinite**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L140)* **Returns:** *boolean* ___ ### moveToSheet ▸ **moveToSheet**(`toSheet`: number): *void* *Defined in [src/AbsoluteCellRange.ts:234](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L234)* **Parameters:** Name | Type | ------ | ------ | `toSheet` | number | **Returns:** *void* ___ ### rangeWithSameHeight ▸ **rangeWithSameHeight**(`startColumn`: number, `numberOfColumns`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:255](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L255)* **Parameters:** Name | Type | ------ | ------ | `startColumn` | number | `numberOfColumns` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### rangeWithSameWidth ▸ **rangeWithSameWidth**(`startRow`: number, `numberOfRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:528](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L528)* **Parameters:** Name | Type | ------ | ------ | `startRow` | number | `numberOfRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### removeSpan ▸ **removeSpan**(`span`: [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span)): *void* *Defined in [src/AbsoluteCellRange.ts:239](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L239)* **Parameters:** Name | Type | ------ | ------ | `span` | [Span](https://hyperformula.handsontable.com/docs/api/globals.md#span) | **Returns:** *void* ___ ### rowInRange ▸ **rowInRange**(`address`: [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:175](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L175)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md) | **Returns:** *boolean* ___ ### sameAs ▸ **sameAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:295](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L295)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### sameDimensionsAs ▸ **sameDimensionsAs**(`other`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *boolean* *Defined in [src/AbsoluteCellRange.ts:291](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L291)* **Parameters:** Name | Type | ------ | ------ | `other` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *boolean* ___ ### shiftByColumns ▸ **shiftByColumns**(`_numberOfColumns`: number): *void* *Defined in [src/AbsoluteCellRange.ts:516](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L516)* **Parameters:** Name | Type | ------ | ------ | `_numberOfColumns` | number | **Returns:** *void* ___ ### shiftByRows ▸ **shiftByRows**(`numberOfRows`: number): *void* *Defined in [src/AbsoluteCellRange.ts:212](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L212)* **Parameters:** Name | Type | ------ | ------ | `numberOfRows` | number | **Returns:** *void* ___ ### shifted ▸ **shifted**(`byCols`: number, `byRows`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:524](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L524)* **Parameters:** Name | Type | ------ | ------ | `byCols` | number | `byRows` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### shouldBeRemoved ▸ **shouldBeRemoved**(): *boolean* *Defined in [src/AbsoluteCellRange.ts:512](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L512)* **Returns:** *boolean* ___ ### size ▸ **size**(): *number* *Defined in [src/AbsoluteCellRange.ts:271](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L271)* **Returns:** *number* ___ ### toString ▸ **toString**(): *string* *Defined in [src/AbsoluteCellRange.ts:259](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L259)* **Returns:** *string* ___ ### width ▸ **width**(): *number* *Defined in [src/AbsoluteCellRange.ts:263](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L263)* **Returns:** *number* ___ ### withStart ▸ **withStart**(`newStart`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:287](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L287)* **Parameters:** Name | Type | ------ | ------ | `newStart` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAst ▸ **fromAst**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L83)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromAstOrUndef ▸ **fromAstOrUndef**(`ast`: CellRangeAst | ColumnRangeAst | RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:93](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L93)* **Parameters:** Name | Type | ------ | ------ | `ast` | CellRangeAst | ColumnRangeAst | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* ___ ### fromCellRange ▸ **fromCellRange**(`x`: [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md), `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `x` | [CellRange](https://hyperformula.handsontable.com/docs/api/interfaces/cellrange.md) | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromCoordinates ▸ **fromCoordinates**(`sheet`: number, `x1`: number, `y1`: number, `x2`: number, `y2`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L136)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `x1` | number | `y1` | number | `x2` | number | `y2` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### fromRowRangeAst ▸ **fromRowRangeAst**(`x`: RowRangeAst, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteRowRange](https://hyperformula.handsontable.com/docs/api/classes/absoluterowrange.md)* *Defined in [src/AbsoluteCellRange.ts:503](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L503)* **Parameters:** Name | Type | ------ | ------ | `x` | RowRangeAst | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteRowRange](https://hyperformula.handsontable.com/docs/api/classes/absoluterowrange.md)* ___ ### fromSimpleCellAddresses ▸ **fromSimpleCellAddresses**(`start`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `end` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFrom ▸ **spanFrom**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/AbsoluteCellRange.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L108)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* ___ ### spanFromOrUndef ▸ **spanFromOrUndef**(`topLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* *Defined in [src/AbsoluteCellRange.ts:116](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L116)* **Parameters:** Name | Type | ------ | ------ | `topLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)›* --- ## AddColumnsCommand URL: https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand # AddColumnsCommand ## Constructors ### constructor \+ **new AddColumnsCommand**(`sheet`: number, `indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md)* *Defined in [src/Operations.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L96)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md)* ## Properties ### indexes • **indexes**: *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:99](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L99)* ___ ### sheet • **sheet**: *number* *Defined in [src/Operations.ts:98](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L98)* ## Methods ### columnsSpans ▸ **columnsSpans**(): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)[]* *Defined in [src/Operations.ts:107](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L107)* **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)[]* ___ ### normalizedIndexes ▸ **normalizedIndexes**(): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:103](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L103)* **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* --- ## AddColumnsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry # AddColumnsUndoEntry ## Constructors ### constructor \+ **new AddColumnsUndoEntry**(`command`: [AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md)): *[AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md)* *Defined in [src/UndoRedo.ts:222](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L222)* **Parameters:** Name | Type | ------ | ------ | `command` | [AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md) | **Returns:** *[AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md)* ## Properties ### command • **command**: *[AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md)* *Defined in [src/UndoRedo.ts:224](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L224)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:233](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L233)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:229](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L229)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## AddNamedExpressionUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry # AddNamedExpressionUndoEntry ## Constructors ### constructor \+ **new AddNamedExpressionUndoEntry**(`name`: string, `newContent`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md)* *Defined in [src/UndoRedo.ts:385](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L385)* **Parameters:** Name | Type | ------ | ------ | `name` | string | `newContent` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `scope?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *[AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md)* ## Properties ### name • **name**: *string* *Defined in [src/UndoRedo.ts:387](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L387)* ___ ### newContent • **newContent**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/UndoRedo.ts:388](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L388)* ___ ### options • **options**? : *[NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)* *Defined in [src/UndoRedo.ts:390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L390)* ___ ### scope • **scope**? : *undefined | number* *Defined in [src/UndoRedo.ts:389](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L389)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:399](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L399)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:395](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L395)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## AddRowsCommand URL: https://hyperformula.handsontable.com/docs/api/classes/addrowscommand # AddRowsCommand ## Constructors ### constructor \+ **new AddRowsCommand**(`sheet`: number, `indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md)* *Defined in [src/Operations.ts:78](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L78)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md)* ## Properties ### indexes • **indexes**: *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L81)* ___ ### sheet • **sheet**: *number* *Defined in [src/Operations.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L80)* ## Methods ### normalizedIndexes ▸ **normalizedIndexes**(): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:85](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L85)* **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* ___ ### rowsSpans ▸ **rowsSpans**(): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)[]* *Defined in [src/Operations.ts:89](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L89)* **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)[]* --- ## AddRowsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry # AddRowsUndoEntry ## Constructors ### constructor \+ **new AddRowsUndoEntry**(`command`: [AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md)): *[AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md)* *Defined in [src/UndoRedo.ts:94](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L94)* **Parameters:** Name | Type | ------ | ------ | `command` | [AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md) | **Returns:** *[AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md)* ## Properties ### command • **command**: *[AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md)* *Defined in [src/UndoRedo.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L96)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L105)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## AddSheetUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry # AddSheetUndoEntry ## Constructors ### constructor \+ **new AddSheetUndoEntry**(`sheetName`: string, `sheetId`: number): *[AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md)* *Defined in [src/UndoRedo.ts:259](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L259)* **Parameters:** Name | Type | ------ | ------ | `sheetName` | string | `sheetId` | number | **Returns:** *[AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md)* ## Properties ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:262](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L262)* ___ ### sheetName • **sheetName**: *string* *Defined in [src/UndoRedo.ts:261](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L261)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:271](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L271)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:267](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L267)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## AdvancedFind URL: https://hyperformula.handsontable.com/docs/api/classes/advancedfind # AdvancedFind ## Methods ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `__namedParameters`: object): *number* *Defined in [src/Lookup/AdvancedFind.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/AdvancedFind.ts#L27)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **rangeValue**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪`Default value` **__namedParameters**: *object*= { returnOccurrence: 'first' } Name | Type | ------ | ------ | `returnOccurrence` | undefined | "first" | "last" | **Returns:** *number* --- ## AliasAlreadyExisting URL: https://hyperformula.handsontable.com/docs/api/classes/aliasalreadyexisting # AliasAlreadyExisting Error thrown when alias to a function is already defined. **`see`** [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunctionplugin) **`see`** [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunction) ## Constructors ### constructor \+ **new AliasAlreadyExisting**(`name`: string, `pluginName`: string): *[AliasAlreadyExisting](https://hyperformula.handsontable.com/docs/api/classes/aliasalreadyexisting.md)* *Defined in [src/errors.ts:390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L390)* **Parameters:** Name | Type | ------ | ------ | `name` | string | `pluginName` | string | **Returns:** *[AliasAlreadyExisting](https://hyperformula.handsontable.com/docs/api/classes/aliasalreadyexisting.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ArraySize URL: https://hyperformula.handsontable.com/docs/api/classes/arraysize # ArraySize ## Constructors ### constructor \+ **new ArraySize**(`width`: number, `height`: number, `isRef`: boolean): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArraySize.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L14)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `width` | number | - | `height` | number | - | `isRef` | boolean | false | **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* ## Properties ### height • **height**: *number* *Defined in [src/ArraySize.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L17)* ___ ### isRef • **isRef**: *boolean* *Defined in [src/ArraySize.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L18)* ___ ### width • **width**: *number* *Defined in [src/ArraySize.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L16)* ## Methods ### isScalar ▸ **isScalar**(): *boolean* *Defined in [src/ArraySize.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L29)* **Returns:** *boolean* ___ ### error ▸ **error**(): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)‹›* *Defined in [src/ArraySize.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L21)* **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)‹›* ___ ### scalar ▸ **scalar**(): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)‹›* *Defined in [src/ArraySize.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L25)* **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)‹›* --- ## ArraySizePredictor URL: https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor # ArraySizePredictor ## Constructors ### constructor \+ **new ArraySizePredictor**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `functionRegistry`: FunctionRegistry): *[ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md)* *Defined in [src/ArraySize.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L42)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `functionRegistry` | FunctionRegistry | **Returns:** *[ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md)* ## Methods ### checkArraySize ▸ **checkArraySize**(`ast`: Ast, `formulaAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArraySize.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L49)* **Parameters:** Name | Type | ------ | ------ | `ast` | Ast | `formulaAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* ___ ### checkArraySizeForAst ▸ **checkArraySizeForAst**(`ast`: Ast, `state`: InterpreterState): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArraySize.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L53)* **Parameters:** Name | Type | ------ | ------ | `ast` | Ast | `state` | InterpreterState | **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* --- ## BaseUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/baseundoentry # BaseUndoEntry ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L36)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L34)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## ArrayValue URL: https://hyperformula.handsontable.com/docs/api/classes/arrayvalue # ArrayValue ## Constructors ### constructor \+ **new ArrayValue**(`array`: InternalScalarValue[][]): *[ArrayValue](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md)* *Defined in [src/ArrayValue.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L47)* **Parameters:** Name | Type | ------ | ------ | `array` | InternalScalarValue[][] | **Returns:** *[ArrayValue](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md)* ## Properties ### size • **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArrayValue.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L46)* ## Methods ### addColumns ▸ **addColumns**(`aboveColumn`: number, `numberOfColumns`: number): *void* *Defined in [src/ArrayValue.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L75)* **Parameters:** Name | Type | ------ | ------ | `aboveColumn` | number | `numberOfColumns` | number | **Returns:** *void* ___ ### addRows ▸ **addRows**(`aboveRow`: number, `numberOfRows`: number): *void* *Defined in [src/ArrayValue.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L70)* **Parameters:** Name | Type | ------ | ------ | `aboveRow` | number | `numberOfRows` | number | **Returns:** *void* ___ ### get ▸ **get**(`col`: number, `row`: number): *InternalScalarValue* *Defined in [src/ArrayValue.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L110)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *InternalScalarValue* ___ ### height ▸ **height**(): *number* *Defined in [src/ArrayValue.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L128)* **Returns:** *number* ___ ### nullArrays ▸ **nullArrays**(`count`: number, `size`: number): *any[][]* *Defined in [src/ArrayValue.ts:102](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L102)* **Parameters:** Name | Type | ------ | ------ | `count` | number | `size` | number | **Returns:** *any[][]* ___ ### raw ▸ **raw**(): *InternalScalarValue[][]* *Defined in [src/ArrayValue.ts:132](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L132)* **Returns:** *InternalScalarValue[][]* ___ ### removeColumns ▸ **removeColumns**(`leftmostColumn`: number, `rightmostColumn`: number): *void* *Defined in [src/ArrayValue.ts:91](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L91)* **Parameters:** Name | Type | ------ | ------ | `leftmostColumn` | number | `rightmostColumn` | number | **Returns:** *void* ___ ### removeRows ▸ **removeRows**(`startRow`: number, `endRow`: number): *void* *Defined in [src/ArrayValue.ts:82](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L82)* **Parameters:** Name | Type | ------ | ------ | `startRow` | number | `endRow` | number | **Returns:** *void* ___ ### resize ▸ **resize**(`newSize`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)): *void* *Defined in [src/ArrayValue.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L136)* **Parameters:** Name | Type | ------ | ------ | `newSize` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | **Returns:** *void* ___ ### set ▸ **set**(`col`: number, `row`: number, `value`: number): *void* *Defined in [src/ArrayValue.ts:117](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L117)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | `value` | number | **Returns:** *void* ___ ### simpleRangeValue ▸ **simpleRangeValue**(): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/ArrayValue.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L66)* **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### width ▸ **width**(): *number* *Defined in [src/ArrayValue.ts:124](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L124)* **Returns:** *number* ___ ### fromInterpreterValue ▸ **fromInterpreterValue**(`value`: InterpreterValue): *[ArrayValue](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md)‹›* *Defined in [src/ArrayValue.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L58)* **Parameters:** Name | Type | ------ | ------ | `value` | InterpreterValue | **Returns:** *[ArrayValue](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md)‹›* --- ## BuildEngineFactory URL: https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory # BuildEngineFactory ## Methods ### buildEmpty ▸ **buildEmpty**(`configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* *Defined in [src/BuildEngineFactory.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/BuildEngineFactory.ts#L62)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | **Returns:** *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* ___ ### buildFromSheet ▸ **buildFromSheet**(`sheet`: [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* *Defined in [src/BuildEngineFactory.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/BuildEngineFactory.ts#L56)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `sheet` | [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) | - | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | **Returns:** *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* ___ ### buildFromSheets ▸ **buildFromSheets**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* *Defined in [src/BuildEngineFactory.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/BuildEngineFactory.ts#L51)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | - | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | **Returns:** *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* ___ ### rebuildWithConfig ▸ **rebuildWithConfig**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets), `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[], `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md)): *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* *Defined in [src/BuildEngineFactory.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/BuildEngineFactory.ts#L66)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | **Returns:** *[EngineState](https://hyperformula.handsontable.com/docs/api/globals.md#enginestate)* --- ## Boolean URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.boolean # Boolean ## Constructors ### constructor \+ **new Boolean**(`value`: boolean): *[Boolean](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.boolean.md)* *Defined in [src/CellContentParser.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L39)* **Parameters:** Name | Type | ------ | ------ | `value` | boolean | **Returns:** *[Boolean](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.boolean.md)* ## Properties ### value • **value**: *boolean* *Defined in [src/CellContentParser.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L40)* --- ## Empty URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.empty # Empty ## Methods ### getSingletonInstance ▸ **getSingletonInstance**(): *[Empty](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.empty.md)‹›* *Defined in [src/CellContentParser.ts:48](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L48)* **Returns:** *[Empty](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.empty.md)‹›* --- ## Error URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.error # Error ## Constructors ### constructor \+ **new Error**(`errorType`: [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype), `message?`: undefined | string): *[Error](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.error.md)* *Defined in [src/CellContentParser.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L62)* **Parameters:** Name | Type | ------ | ------ | `errorType` | [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype) | `message?` | undefined | string | **Returns:** *[Error](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.error.md)* ## Properties ### value • **value**: *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/CellContentParser.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L62)* --- ## Formula URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.formula # Formula ## Constructors ### constructor \+ **new Formula**(`formula`: string): *[Formula](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.formula.md)* *Defined in [src/CellContentParser.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L56)* **Parameters:** Name | Type | ------ | ------ | `formula` | string | **Returns:** *[Formula](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.formula.md)* ## Properties ### formula • **formula**: *string* *Defined in [src/CellContentParser.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L57)* --- ## Number URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.number # Number ## Constructors ### constructor \+ **new Number**(`value`: ExtendedNumber): *[Number](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.number.md)* *Defined in [src/CellContentParser.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L28)* **Parameters:** Name | Type | ------ | ------ | `value` | ExtendedNumber | **Returns:** *[Number](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.number.md)* ## Properties ### value • **value**: *ExtendedNumber* *Defined in [src/CellContentParser.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L29)* --- ## String URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontent.string # String ## Constructors ### constructor \+ **new String**(`value`: string): *[String](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.string.md)* *Defined in [src/CellContentParser.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L34)* **Parameters:** Name | Type | ------ | ------ | `value` | string | **Returns:** *[String](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.string.md)* ## Properties ### value • **value**: *string* *Defined in [src/CellContentParser.ts:35](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L35)* --- ## BatchUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/batchundoentry # BatchUndoEntry ## Properties ### operations • **operations**: *[UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md)[]* = [] *Defined in [src/UndoRedo.ts:443](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L443)* ## Methods ### add ▸ **add**(`operation`: [UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md)): *void* *Defined in [src/UndoRedo.ts:445](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L445)* **Parameters:** Name | Type | ------ | ------ | `operation` | [UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md) | **Returns:** *void* ___ ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:459](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L459)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:455](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L455)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:463](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L463)* **Returns:** *number[]* ___ ### reversedOperations ▸ **reversedOperations**(): *Generator‹[UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md), void, unknown›* *Defined in [src/UndoRedo.ts:449](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L449)* **Returns:** *Generator‹[UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md), void, unknown›* --- ## CellContentParser URL: https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser # CellContentParser ## Constructors ### constructor \+ **new CellContentParser**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `dateHelper`: [DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md), `numberLiteralsHelper`: [NumberLiteralHelper](https://hyperformula.handsontable.com/docs/api/classes/numberliteralhelper.md)): *[CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md)* *Defined in [src/CellContentParser.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L92)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `dateHelper` | [DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md) | `numberLiteralsHelper` | [NumberLiteralHelper](https://hyperformula.handsontable.com/docs/api/classes/numberliteralhelper.md) | **Returns:** *[CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md)* ## Methods ### parse ▸ **parse**(`content`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)): *[Type](https://hyperformula.handsontable.com/docs/api/modules/cellcontent.md#type)* *Defined in [src/CellContentParser.ts:99](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L99)* **Parameters:** Name | Type | ------ | ------ | `content` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | **Returns:** *[Type](https://hyperformula.handsontable.com/docs/api/modules/cellcontent.md#type)* --- ## ChangeNamedExpressionUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry # ChangeNamedExpressionUndoEntry ## Constructors ### constructor \+ **new ChangeNamedExpressionUndoEntry**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), `newContent`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `oldContent`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md)* *Defined in [src/UndoRedo.ts:422](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L422)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | `newContent` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `oldContent` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell) | `scope?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *[ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md)* ## Properties ### namedExpression • **namedExpression**: *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/UndoRedo.ts:424](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L424)* ___ ### newContent • **newContent**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/UndoRedo.ts:425](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L425)* ___ ### oldContent • **oldContent**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)* *Defined in [src/UndoRedo.ts:426](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L426)* ___ ### options • **options**? : *[NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)* *Defined in [src/UndoRedo.ts:428](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L428)* ___ ### scope • **scope**? : *undefined | number* *Defined in [src/UndoRedo.ts:427](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L427)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:437](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L437)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:433](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L433)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## CellError URL: https://hyperformula.handsontable.com/docs/api/classes/cellerror # CellError ## Constructors ### constructor \+ **new CellError**(`type`: [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype), `message?`: undefined | string, `root?`: FormulaVertex): *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/Cell.ts:149](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L149)* **Parameters:** Name | Type | ------ | ------ | `type` | [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype) | `message?` | undefined | string | `root?` | FormulaVertex | **Returns:** *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* ## Properties ### message • **message**? : *undefined | string* *Defined in [src/Cell.ts:152](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L152)* ___ ### root • **root**? : *FormulaVertex* *Defined in [src/Cell.ts:153](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L153)* ___ ### type • **type**: *[ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype)* *Defined in [src/Cell.ts:151](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L151)* ## Methods ### attachRootVertex ▸ **attachRootVertex**(`vertex`: FormulaVertex): *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/Cell.ts:165](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L165)* **Parameters:** Name | Type | ------ | ------ | `vertex` | FormulaVertex | **Returns:** *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* ___ ### parsingError ▸ **parsingError**(`detailedMessage?`: undefined | string): *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/Cell.ts:161](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L161)* Returns a CellError with a given message. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `detailedMessage?` | undefined | string | message to be displayed | **Returns:** *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* --- ## ClearSheetUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry # ClearSheetUndoEntry ## Constructors ### constructor \+ **new ClearSheetUndoEntry**(`sheetId`: number, `oldSheetContent`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]): *[ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md)* *Defined in [src/UndoRedo.ts:329](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L329)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `oldSheetContent` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][] | **Returns:** *[ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md)* ## Properties ### oldSheetContent • **oldSheetContent**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/UndoRedo.ts:332](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L332)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:331](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L331)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:341](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L341)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:337](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L337)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## ClipboardOperations URL: https://hyperformula.handsontable.com/docs/api/classes/clipboardoperations # ClipboardOperations ## Constructors ### constructor \+ **new ClipboardOperations**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `dependencyGraph`: DependencyGraph, `operations`: [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md)): *[ClipboardOperations](https://hyperformula.handsontable.com/docs/api/classes/clipboardoperations.md)* *Defined in [src/ClipboardOperations.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L77)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `dependencyGraph` | DependencyGraph | `operations` | [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md) | **Returns:** *[ClipboardOperations](https://hyperformula.handsontable.com/docs/api/classes/clipboardoperations.md)* ## Properties ### clipboard • **clipboard**? : *[Clipboard](https://hyperformula.handsontable.com/docs/api/classes/clipboard.md)* *Defined in [src/ClipboardOperations.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L75)* ## Methods ### abortCut ▸ **abortCut**(): *void* *Defined in [src/ClipboardOperations.ts:107](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L107)* **Returns:** *void* ___ ### clear ▸ **clear**(): *void* *Defined in [src/ClipboardOperations.ts:113](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L113)* **Returns:** *void* ___ ### copy ▸ **copy**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *void* *Defined in [src/ClipboardOperations.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L92)* **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *void* ___ ### cut ▸ **cut**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *void* *Defined in [src/ClipboardOperations.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L88)* **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *void* ___ ### ensureItIsPossibleToCopyPaste ▸ **ensureItIsPossibleToCopyPaste**(`destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/ClipboardOperations.ts:117](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L117)* **Parameters:** Name | Type | ------ | ------ | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### isCopyClipboard ▸ **isCopyClipboard**(): *boolean* *Defined in [src/ClipboardOperations.ts:141](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L141)* **Returns:** *boolean* ___ ### isCutClipboard ▸ **isCutClipboard**(): *boolean* *Defined in [src/ClipboardOperations.ts:137](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L137)* **Returns:** *boolean* --- ## Clipboard URL: https://hyperformula.handsontable.com/docs/api/classes/clipboard # Clipboard ## Constructors ### constructor \+ **new Clipboard**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number, `type`: [ClipboardOperationType](https://hyperformula.handsontable.com/docs/api/enums/clipboardoperationtype.md), `content?`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]): *[Clipboard](https://hyperformula.handsontable.com/docs/api/classes/clipboard.md)* *Defined in [src/ClipboardOperations.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L51)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | `type` | [ClipboardOperationType](https://hyperformula.handsontable.com/docs/api/enums/clipboardoperationtype.md) | `content?` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][] | **Returns:** *[Clipboard](https://hyperformula.handsontable.com/docs/api/classes/clipboard.md)* ## Properties ### content • **content**? : *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/ClipboardOperations.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L57)* ___ ### height • **height**: *number* *Defined in [src/ClipboardOperations.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L55)* ___ ### sourceLeftCorner • **sourceLeftCorner**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/ClipboardOperations.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L53)* ___ ### type • **type**: *[ClipboardOperationType](https://hyperformula.handsontable.com/docs/api/enums/clipboardoperationtype.md)* *Defined in [src/ClipboardOperations.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L56)* ___ ### width • **width**: *number* *Defined in [src/ClipboardOperations.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L54)* ## Methods ### getContent ▸ **getContent**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *IterableIterator‹[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]›* *Defined in [src/ClipboardOperations.ts:61](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L61)* **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *IterableIterator‹[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]›* --- ## ColumnBinarySearch URL: https://hyperformula.handsontable.com/docs/api/classes/columnbinarysearch # ColumnBinarySearch ## Constructors ### constructor \+ **new ColumnBinarySearch**(`dependencyGraph`: DependencyGraph): *[ColumnBinarySearch](https://hyperformula.handsontable.com/docs/api/classes/columnbinarysearch.md)* *Defined in [src/Lookup/ColumnBinarySearch.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L15)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *[ColumnBinarySearch](https://hyperformula.handsontable.com/docs/api/classes/columnbinarysearch.md)* ## Methods ### add ▸ **add**(`value`: RawScalarValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L21)* **Parameters:** Name | Type | ------ | ------ | `value` | RawScalarValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### addColumns ▸ **addColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L37)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `__namedParameters`: object): *number* *Defined in [src/Lookup/AdvancedFind.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/AdvancedFind.ts#L27)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **rangeValue**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪`Default value` **__namedParameters**: *object*= { returnOccurrence: 'first' } Name | Type | ------ | ------ | `returnOccurrence` | undefined | "first" | "last" | **Returns:** *number* ___ ### applyChanges ▸ **applyChanges**(`contentChanges`: [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[]): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L33)* **Parameters:** Name | Type | ------ | ------ | `contentChanges` | [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[] | **Returns:** *void* ___ ### change ▸ **change**(`oldValue`: RawScalarValue | undefined, `newValue`: RawScalarValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L29)* **Parameters:** Name | Type | ------ | ------ | `oldValue` | RawScalarValue | undefined | `newValue` | RawScalarValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### find ▸ **find**(`searchKey`: RawNoErrorScalarValue, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `searchOptions`: [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md)): *number* *Defined in [src/Lookup/ColumnBinarySearch.ts:69](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L69)* **Parameters:** Name | Type | ------ | ------ | `searchKey` | RawNoErrorScalarValue | `rangeValue` | [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | `searchOptions` | [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md) | **Returns:** *number* ___ ### forceApplyPostponedTransformations ▸ **forceApplyPostponedTransformations**(): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L63)* No-op: ColumnBinarySearch reads cell values directly from the dependency graph on every lookup, so it has no cached data that could become stale. Unlike ColumnIndex, which maintains a separate value-to-address index that must be kept in sync with lazy transformations, binary search always operates on the current graph state. **Returns:** *void* ___ ### moveValues ▸ **moveValues**(`sourceRange`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›, `toRight`: number, `toBottom`: number, `toSheet`: number): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L49)* **Parameters:** Name | Type | ------ | ------ | `sourceRange` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | `toRight` | number | `toBottom` | number | `toSheet` | number | **Returns:** *void* ___ ### remove ▸ **remove**(`value`: RawScalarValue | undefined, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L25)* **Parameters:** Name | Type | ------ | ------ | `value` | RawScalarValue | undefined | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### removeColumns ▸ **removeColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:41](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L41)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L45)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### removeValues ▸ **removeValues**(`range`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›): *void* *Defined in [src/Lookup/ColumnBinarySearch.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnBinarySearch.ts#L53)* **Parameters:** Name | Type | ------ | ------ | `range` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | **Returns:** *void* --- ## ColumnIndex URL: https://hyperformula.handsontable.com/docs/api/classes/columnindex # ColumnIndex ## Constructors ### constructor \+ **new ColumnIndex**(`dependencyGraph`: DependencyGraph, `config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md)): *[ColumnIndex](https://hyperformula.handsontable.com/docs/api/classes/columnindex.md)* *Defined in [src/Lookup/ColumnIndex.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L43)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | **Returns:** *[ColumnIndex](https://hyperformula.handsontable.com/docs/api/classes/columnindex.md)* ## Methods ### add ▸ **add**(`value`: RawInterpreterValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnIndex.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L54)* **Parameters:** Name | Type | ------ | ------ | `value` | RawInterpreterValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### addColumns ▸ **addColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/ColumnIndex.ts:165](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L165)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `range`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `options`: [AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)): *number* *Defined in [src/Lookup/ColumnIndex.ts:161](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L161)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **range**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪`Default value` **options**: *[AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)*= { returnOccurrence: 'first' } **Returns:** *number* ___ ### applyChanges ▸ **applyChanges**(`contentChanges`: [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[]): *void* *Defined in [src/Lookup/ColumnIndex.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L88)* **Parameters:** Name | Type | ------ | ------ | `contentChanges` | [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[] | **Returns:** *void* ___ ### change ▸ **change**(`oldValue`: RawInterpreterValue | undefined, `newValue`: RawInterpreterValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnIndex.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L80)* **Parameters:** Name | Type | ------ | ------ | `oldValue` | RawInterpreterValue | undefined | `newValue` | RawInterpreterValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### ensureRecentData ▸ **ensureRecentData**(`sheet`: number, `col`: number, `value`: RawInterpreterValue): *void* *Defined in [src/Lookup/ColumnIndex.ts:233](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L233)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `col` | number | `value` | RawInterpreterValue | **Returns:** *void* ___ ### find ▸ **find**(`searchKey`: RawNoErrorScalarValue, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `__namedParameters`: object): *number* *Defined in [src/Lookup/ColumnIndex.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L110)* **Parameters:** ▪ **searchKey**: *RawNoErrorScalarValue* ▪ **rangeValue**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪ **__namedParameters**: *object* Name | Type | ------ | ------ | `ifNoMatch` | "returnLowerBound" | "returnUpperBound" | "returnNotFound" | `ordering` | "asc" | "desc" | "none" | `returnOccurrence` | undefined | "first" | "last" | **Returns:** *number* ___ ### forceApplyPostponedTransformations ▸ **forceApplyPostponedTransformations**(): *void* *Defined in [src/Lookup/ColumnIndex.ts:192](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L192)* Forces all ValueIndex entries to apply any pending lazy transformations, bringing every entry up to the current LazilyTransformingAstService version. Must be called before compacting LazilyTransformingAstService. **Returns:** *void* ___ ### getColumnMap ▸ **getColumnMap**(`sheet`: number, `col`: number): *[ColumnMap](https://hyperformula.handsontable.com/docs/api/globals.md#columnmap)* *Defined in [src/Lookup/ColumnIndex.ts:205](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L205)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `col` | number | **Returns:** *[ColumnMap](https://hyperformula.handsontable.com/docs/api/globals.md#columnmap)* ___ ### getValueIndex ▸ **getValueIndex**(`sheet`: number, `col`: number, `value`: RawInterpreterValue): *[ValueIndex](https://hyperformula.handsontable.com/docs/api/interfaces/valueindex.md)* *Defined in [src/Lookup/ColumnIndex.ts:220](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L220)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `col` | number | `value` | RawInterpreterValue | **Returns:** *[ValueIndex](https://hyperformula.handsontable.com/docs/api/interfaces/valueindex.md)* ___ ### moveValues ▸ **moveValues**(`sourceRange`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›, `toRight`: number, `toBottom`: number, `toSheet`: number): *void* *Defined in [src/Lookup/ColumnIndex.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L96)* **Parameters:** Name | Type | ------ | ------ | `sourceRange` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | `toRight` | number | `toBottom` | number | `toSheet` | number | **Returns:** *void* ___ ### remove ▸ **remove**(`value`: RawInterpreterValue | undefined, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/ColumnIndex.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L66)* **Parameters:** Name | Type | ------ | ------ | `value` | RawInterpreterValue | undefined | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### removeColumns ▸ **removeColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/ColumnIndex.ts:174](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L174)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *void* *Defined in [src/Lookup/ColumnIndex.ts:183](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L183)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### removeValues ▸ **removeValues**(`range`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›): *void* *Defined in [src/Lookup/ColumnIndex.ts:104](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L104)* **Parameters:** Name | Type | ------ | ------ | `range` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | **Returns:** *void* --- ## ColumnsSpan URL: https://hyperformula.handsontable.com/docs/api/classes/columnsspan # ColumnsSpan ## Constructors ### constructor \+ **new ColumnsSpan**(`sheet`: number, `columnStart`: number, `columnEnd`: number): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)* *Defined in [src/Span.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L72)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `columnStart` | number | `columnEnd` | number | **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)* ## Properties ### columnEnd • **columnEnd**: *number* *Defined in [src/Span.ts:76](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L76)* ___ ### columnStart • **columnStart**: *number* *Defined in [src/Span.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L75)* ___ ### sheet • **sheet**: *number* *Defined in [src/Span.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L74)* ## Accessors ### end • **get end**(): *number* *Defined in [src/Span.ts:94](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L94)* **Returns:** *number* ___ ### numberOfColumns • **get numberOfColumns**(): *number* *Defined in [src/Span.ts:86](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L86)* **Returns:** *number* ___ ### start • **get start**(): *number* *Defined in [src/Span.ts:90](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L90)* **Returns:** *number* ## Methods ### columns ▸ **columns**(): *IterableIterator‹number›* *Defined in [src/Span.ts:106](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L106)* **Returns:** *IterableIterator‹number›* ___ ### firstColumn ▸ **firstColumn**(): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)* *Defined in [src/Span.ts:124](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L124)* **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)* ___ ### intersect ▸ **intersect**(`otherSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | null* *Defined in [src/Span.ts:112](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L112)* **Parameters:** Name | Type | ------ | ------ | `otherSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | null* ___ ### fromColumnStartAndEnd ▸ **fromColumnStartAndEnd**(`sheet`: number, `columnStart`: number, `columnEnd`: number): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)‹›* *Defined in [src/Span.ts:102](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L102)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `columnStart` | number | `columnEnd` | number | **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)‹›* ___ ### fromNumberOfColumns ▸ **fromNumberOfColumns**(`sheet`: number, `columnStart`: number, `numberOfColumns`: number): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)‹›* *Defined in [src/Span.ts:98](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L98)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `columnStart` | number | `numberOfColumns` | number | **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)‹›* --- ## ConfigValueEmpty URL: https://hyperformula.handsontable.com/docs/api/classes/configvalueempty # ConfigValueEmpty Error thrown when supplied config parameter value is an empty string. This error might be thrown while setting or updating the [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). The following methods accept [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md) as a parameter: **`see`** [buildEmpty](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildempty) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [updateConfig](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) ## Constructors ### constructor \+ **new ConfigValueEmpty**(`paramName`: string): *[ConfigValueEmpty](https://hyperformula.handsontable.com/docs/api/classes/configvalueempty.md)* *Defined in [src/errors.ts:193](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L193)* **Parameters:** Name | Type | ------ | ------ | `paramName` | string | **Returns:** *[ConfigValueEmpty](https://hyperformula.handsontable.com/docs/api/classes/configvalueempty.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ConfigValueTooBigError URL: https://hyperformula.handsontable.com/docs/api/classes/configvaluetoobigerror # ConfigValueTooBigError Error thrown when supplied config parameter value is too big. This error might be thrown while setting or updating the [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). The following methods accept [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md) as a parameter: **`see`** [buildEmpty](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildempty) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [updateConfig](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) ## Constructors ### constructor \+ **new ConfigValueTooBigError**(`paramName`: string, `maximum`: number): *[ConfigValueTooBigError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoobigerror.md)* *Defined in [src/errors.ts:225](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L225)* **Parameters:** Name | Type | ------ | ------ | `paramName` | string | `maximum` | number | **Returns:** *[ConfigValueTooBigError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoobigerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ConfigValueTooSmallError URL: https://hyperformula.handsontable.com/docs/api/classes/configvaluetoosmallerror # ConfigValueTooSmallError Error thrown when supplied config parameter value is too small. This error might be thrown while setting or updating the [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). The following methods accept [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md) as a parameter: **`see`** [buildEmpty](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildempty) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [updateConfig](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) ## Constructors ### constructor \+ **new ConfigValueTooSmallError**(`paramName`: string, `minimum`: number): *[ConfigValueTooSmallError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoosmallerror.md)* *Defined in [src/errors.ts:209](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L209)* **Parameters:** Name | Type | ------ | ------ | `paramName` | string | `minimum` | number | **Returns:** *[ConfigValueTooSmallError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoosmallerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## CrudOperations URL: https://hyperformula.handsontable.com/docs/api/classes/crudoperations # CrudOperations ## Constructors ### constructor \+ **new CrudOperations**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `operations`: [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md), `undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md), `clipboardOperations`: [ClipboardOperations](https://hyperformula.handsontable.com/docs/api/classes/clipboardoperations.md), `dependencyGraph`: DependencyGraph, `columnSearch`: [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md), `parser`: ParserWithCaching, `cellContentParser`: [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md), `lazilyTransformingAstService`: [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md), `namedExpressions`: [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md)): *[CrudOperations](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md)* *Defined in [src/CrudOperations.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L70)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `operations` | [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md) | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | `clipboardOperations` | [ClipboardOperations](https://hyperformula.handsontable.com/docs/api/classes/clipboardoperations.md) | `dependencyGraph` | DependencyGraph | `columnSearch` | [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md) | `parser` | ParserWithCaching | `cellContentParser` | [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md) | `lazilyTransformingAstService` | [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md) | `namedExpressions` | [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md) | **Returns:** *[CrudOperations](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md)* ## Properties ### operations • **operations**: *[Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md)* *Defined in [src/CrudOperations.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L74)* ___ ### undoRedo • **undoRedo**: *[UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)* *Defined in [src/CrudOperations.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L75)* ## Methods ### addColumns ▸ **addColumns**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L110)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### addNamedExpression ▸ **addNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `sheetId?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *void* *Defined in [src/CrudOperations.ts:382](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L382)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `sheetId?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *void* ___ ### addRows ▸ **addRows**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L92)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### addSheet ▸ **addSheet**(`name?`: undefined | string): *string* *Defined in [src/CrudOperations.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L204)* **Parameters:** Name | Type | ------ | ------ | `name?` | undefined | string | **Returns:** *string* ___ ### beginUndoRedoBatchMode ▸ **beginUndoRedoBatchMode**(): *void* *Defined in [src/CrudOperations.ts:188](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L188)* **Returns:** *void* ___ ### changeNamedExpressionExpression ▸ **changeNamedExpressionExpression**(`expressionName`: string, `sheetId`: number | undefined, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *void* *Defined in [src/CrudOperations.ts:390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L390)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId` | number | undefined | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *void* ___ ### clearClipboard ▸ **clearClipboard**(): *void* *Defined in [src/CrudOperations.ts:200](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L200)* **Returns:** *void* ___ ### clearSheet ▸ **clearSheet**(`sheetId`: number): *void* *Defined in [src/CrudOperations.ts:240](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L240)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### commitUndoRedoBatchMode ▸ **commitUndoRedoBatchMode**(): *void* *Defined in [src/CrudOperations.ts:192](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L192)* **Returns:** *void* ___ ### copy ▸ **copy**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *void* *Defined in [src/CrudOperations.ts:167](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L167)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *void* ___ ### cut ▸ **cut**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *void* *Defined in [src/CrudOperations.ts:154](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L154)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *void* ___ ### ensureItIsPossibleToAddColumns ▸ **ensureItIsPossibleToAddColumns**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:462](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L462)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### ensureItIsPossibleToAddNamedExpression ▸ **ensureItIsPossibleToAddNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `sheetId?`: undefined | number): *void* *Defined in [src/CrudOperations.ts:408](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L408)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `sheetId?` | undefined | number | **Returns:** *void* ___ ### ensureItIsPossibleToAddRows ▸ **ensureItIsPossibleToAddRows**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:429](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L429)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### ensureItIsPossibleToAddSheet ▸ **ensureItIsPossibleToAddSheet**(`name`: string): *void* *Defined in [src/CrudOperations.ts:550](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L550)* **Parameters:** Name | Type | ------ | ------ | `name` | string | **Returns:** *void* ___ ### ensureItIsPossibleToChangeCellContents ▸ **ensureItIsPossibleToChangeCellContents**(`inputAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `content`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *void* *Defined in [src/CrudOperations.ts:576](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L576)* **Parameters:** Name | Type | ------ | ------ | `inputAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `content` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | **Returns:** *void* ___ ### ensureItIsPossibleToChangeContent ▸ **ensureItIsPossibleToChangeContent**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/CrudOperations.ts:567](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L567)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### ensureItIsPossibleToChangeNamedExpression ▸ **ensureItIsPossibleToChangeNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `sheetId?`: undefined | number): *void* *Defined in [src/CrudOperations.ts:414](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L414)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `sheetId?` | undefined | number | **Returns:** *void* ___ ### ensureItIsPossibleToChangeSheetContents ▸ **ensureItIsPossibleToChangeSheetContents**(`sheetId`: number, `content`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *void* *Defined in [src/CrudOperations.ts:585](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L585)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `content` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | **Returns:** *void* ___ ### ensureItIsPossibleToCopy ▸ **ensureItIsPossibleToCopy**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *void* *Defined in [src/CrudOperations.ts:158](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L158)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *void* ___ ### ensureItIsPossibleToMoveColumns ▸ **ensureItIsPossibleToMoveColumns**(`sheet`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *void* *Defined in [src/CrudOperations.ts:523](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L523)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startColumn` | number | `numberOfColumns` | number | `targetColumn` | number | **Returns:** *void* ___ ### ensureItIsPossibleToMoveRows ▸ **ensureItIsPossibleToMoveRows**(`sheet`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *void* *Defined in [src/CrudOperations.ts:496](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L496)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startRow` | number | `numberOfRows` | number | `targetRow` | number | **Returns:** *void* ___ ### ensureItIsPossibleToRemoveColumns ▸ **ensureItIsPossibleToRemoveColumns**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:480](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L480)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### ensureItIsPossibleToRemoveRows ▸ **ensureItIsPossibleToRemoveRows**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:447](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L447)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### ensureItIsPossibleToRenameSheet ▸ **ensureItIsPossibleToRenameSheet**(`sheetId`: number, `name`: string): *void* *Defined in [src/CrudOperations.ts:556](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L556)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `name` | string | **Returns:** *void* ___ ### ensureRangeInSizeLimits ▸ **ensureRangeInSizeLimits**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *void* *Defined in [src/CrudOperations.ts:591](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L591)* **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *void* ___ ### ensureScopeIdIsValid ▸ **ensureScopeIdIsValid**(`scopeId?`: undefined | number): *void* *Defined in [src/CrudOperations.ts:609](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L609)* **Parameters:** Name | Type | ------ | ------ | `scopeId?` | undefined | number | **Returns:** *void* ___ ### getAndClearContentChanges ▸ **getAndClearContentChanges**(): *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* *Defined in [src/CrudOperations.ts:605](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L605)* **Returns:** *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* ___ ### isClipboardEmpty ▸ **isClipboardEmpty**(): *boolean* *Defined in [src/CrudOperations.ts:196](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L196)* **Returns:** *boolean* ___ ### isItPossibleToRemoveNamedExpression ▸ **isItPossibleToRemoveNamedExpression**(`expressionName`: string, `sheetId?`: undefined | number): *void* *Defined in [src/CrudOperations.ts:422](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L422)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *void* ___ ### isThereSomethingToRedo ▸ **isThereSomethingToRedo**(): *boolean* *Defined in [src/CrudOperations.ts:601](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L601)* **Returns:** *boolean* ___ ### isThereSomethingToUndo ▸ **isThereSomethingToUndo**(): *boolean* *Defined in [src/CrudOperations.ts:597](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L597)* **Returns:** *boolean* ___ ### mappingFromOrder ▸ **mappingFromOrder**(`sheetId`: number, `newOrder`: number[], `rowOrColumn`: "row" | "column"): *[number, number][]* *Defined in [src/CrudOperations.ts:349](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L349)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `newOrder` | number[] | `rowOrColumn` | "row" | "column" | **Returns:** *[number, number][]* ___ ### moveCells ▸ **moveCells**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number, `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/CrudOperations.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L128)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### moveColumns ▸ **moveColumns**(`sheet`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *void* *Defined in [src/CrudOperations.ts:147](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L147)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startColumn` | number | `numberOfColumns` | number | `targetColumn` | number | **Returns:** *void* ___ ### moveRows ▸ **moveRows**(`sheet`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *void* *Defined in [src/CrudOperations.ts:139](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L139)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startRow` | number | `numberOfRows` | number | `targetRow` | number | **Returns:** *void* ___ ### paste ▸ **paste**(`targetLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/CrudOperations.ts:172](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L172)* **Parameters:** Name | Type | ------ | ------ | `targetLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### redo ▸ **redo**(): *void* *Defined in [src/CrudOperations.ts:374](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L374)* **Returns:** *void* ___ ### removeColumns ▸ **removeColumns**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:119](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L119)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### removeNamedExpression ▸ **removeNamedExpression**(`expressionName`: string, `sheetId?`: undefined | number): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/CrudOperations.ts:398](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L398)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ___ ### removeRows ▸ **removeRows**(`sheet`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *void* *Defined in [src/CrudOperations.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *void* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *void* *Defined in [src/CrudOperations.ts:214](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L214)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### renameSheet ▸ **renameSheet**(`sheetId`: number, `newName`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/CrudOperations.ts:224](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L224)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `newName` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* ___ ### setCellContents ▸ **setCellContents**(`topLeftCornerAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `cellContents`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)): *void* *Defined in [src/CrudOperations.ts:249](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L249)* **Parameters:** Name | Type | ------ | ------ | `topLeftCornerAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `cellContents` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | **Returns:** *void* ___ ### setColumnOrder ▸ **setColumnOrder**(`sheetId`: number, `columnMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:322](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L322)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *void* ___ ### setRowOrder ▸ **setRowOrder**(`sheetId`: number, `rowMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:295](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L295)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `rowMapping` | [number, number][] | **Returns:** *void* ___ ### setSheetContent ▸ **setSheetContent**(`sheetId`: number, `values`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *void* *Defined in [src/CrudOperations.ts:283](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L283)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `values` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | **Returns:** *void* ___ ### testColumnOrderForArrays ▸ **testColumnOrderForArrays**(`sheetId`: number, `columnMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:311](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L311)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *void* ___ ### testRowOrderForArrays ▸ **testRowOrderForArrays**(`sheetId`: number, `rowMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:338](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L338)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `rowMapping` | [number, number][] | **Returns:** *void* ___ ### undo ▸ **undo**(): *void* *Defined in [src/CrudOperations.ts:366](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L366)* **Returns:** *void* ___ ### validateSwapColumnIndexes ▸ **validateSwapColumnIndexes**(`sheetId`: number, `columnMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:331](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L331)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *void* ___ ### validateSwapRowIndexes ▸ **validateSwapRowIndexes**(`sheetId`: number, `rowMapping`: [number, number][]): *void* *Defined in [src/CrudOperations.ts:304](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L304)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `rowMapping` | [number, number][] | **Returns:** *void* --- ## DateTimeHelper URL: https://hyperformula.handsontable.com/docs/api/classes/datetimehelper # DateTimeHelper ## Constructors ### constructor \+ **new DateTimeHelper**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)): *[DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md)* *Defined in [src/DateTimeHelper.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L58)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | **Returns:** *[DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md)* ## Methods ### dateStringToDateNumber ▸ **dateStringToDateNumber**(`dateTimeString`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹ExtendedNumber›* *Defined in [src/DateTimeHelper.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L81)* **Parameters:** Name | Type | ------ | ------ | `dateTimeString` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹ExtendedNumber›* ___ ### dateToNumber ▸ **dateToNumber**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *number* *Defined in [src/DateTimeHelper.ts:131](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L131)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *number* ___ ### daysInMonth ▸ **daysInMonth**(`year`: number, `month`: number): *number* *Defined in [src/DateTimeHelper.ts:167](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L167)* **Parameters:** Name | Type | ------ | ------ | `year` | number | `month` | number | **Returns:** *number* ___ ### endOfMonth ▸ **endOfMonth**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/DateTimeHelper.ts:175](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L175)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* ___ ### getEpochYearZero ▸ **getEpochYearZero**(): *number* *Defined in [src/DateTimeHelper.ts:109](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L109)* **Returns:** *number* ___ ### getNullYear ▸ **getNullYear**(): *number* *Defined in [src/DateTimeHelper.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L105)* **Returns:** *number* ___ ### getWithinBounds ▸ **getWithinBounds**(`dayNumber`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹number›* *Defined in [src/DateTimeHelper.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L77)* **Parameters:** Name | Type | ------ | ------ | `dayNumber` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹number›* ___ ### isValidDate ▸ **isValidDate**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *boolean* *Defined in [src/DateTimeHelper.ts:113](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L113)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *boolean* ___ ### leapYearsCount ▸ **leapYearsCount**(`year`: number): *number* *Defined in [src/DateTimeHelper.ts:163](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L163)* **Parameters:** Name | Type | ------ | ------ | `year` | number | **Returns:** *number* ___ ### numberToSimpleDate ▸ **numberToSimpleDate**(`arg`: number): *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/DateTimeHelper.ts:139](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L139)* **Parameters:** Name | Type | ------ | ------ | `arg` | number | **Returns:** *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* ___ ### numberToSimpleDateTime ▸ **numberToSimpleDateTime**(`arg`: number): *[SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime)* *Defined in [src/DateTimeHelper.ts:154](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L154)* **Parameters:** Name | Type | ------ | ------ | `arg` | number | **Returns:** *[SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime)* ___ ### parseDateTimeFromConfigFormats ▸ **parseDateTimeFromConfigFormats**(`dateTimeString`: string): *Partial‹object›* *Defined in [src/DateTimeHelper.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `dateTimeString` | string | **Returns:** *Partial‹object›* ___ ### relativeNumberToAbsoluteNumber ▸ **relativeNumberToAbsoluteNumber**(`arg`: number): *number* *Defined in [src/DateTimeHelper.ts:135](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L135)* **Parameters:** Name | Type | ------ | ------ | `arg` | number | **Returns:** *number* ___ ### toBasisUS ▸ **toBasisUS**(`start`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md), `end`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *[[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md), [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)]* *Defined in [src/DateTimeHelper.ts:179](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L179)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | `end` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *[[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md), [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)]* ___ ### yearLengthForBasis ▸ **yearLengthForBasis**(`start`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md), `end`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *number* *Defined in [src/DateTimeHelper.ts:195](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L195)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | `end` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *number* --- ## DetailedCellError URL: https://hyperformula.handsontable.com/docs/api/classes/detailedcellerror # DetailedCellError ## Constructors ### constructor \+ **new DetailedCellError**(`error`: [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md), `value`: string, `address?`: undefined | string): *[DetailedCellError](https://hyperformula.handsontable.com/docs/api/classes/detailedcellerror.md)* *Defined in [src/CellValue.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L13)* **Parameters:** Name | Type | ------ | ------ | `error` | [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md) | `value` | string | `address?` | undefined | string | **Returns:** *[DetailedCellError](https://hyperformula.handsontable.com/docs/api/classes/detailedcellerror.md)* ## Properties ### address • **address**? : *undefined | string* *Defined in [src/CellValue.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L18)* ___ ### message • **message**: *string* *Defined in [src/CellValue.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L13)* ___ ### type • **type**: *[ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype)* *Defined in [src/CellValue.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L12)* ___ ### value • **value**: *string* *Defined in [src/CellValue.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L17)* ## Methods ### toString ▸ **toString**(): *string* *Defined in [src/CellValue.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L24)* **Returns:** *string* ___ ### valueOf ▸ **valueOf**(): *string* *Defined in [src/CellValue.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L28)* **Returns:** *string* --- ## Emitter URL: https://hyperformula.handsontable.com/docs/api/classes/emitter # Emitter ## Methods ### emit ▸ **emit**‹**Event**›(`event`: Event, ...`args`: Parameters‹Listeners[Event]›): *this* *Defined in [src/Emitter.ts:328](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L328)* **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | ------ | ------ | `event` | Event | `...args` | Parameters‹Listeners[Event]› | **Returns:** *this* ___ ### off ▸ **off**(`event`: string, `callback?`: Function): *this* **Parameters:** Name | Type | ------ | ------ | `event` | string | `callback?` | Function | **Returns:** *this* ___ ### on ▸ **on**(`event`: string, `callback`: Function, `ctx?`: any): *this* **Parameters:** Name | Type | ------ | ------ | `event` | string | `callback` | Function | `ctx?` | any | **Returns:** *this* ___ ### once ▸ **once**(`event`: string, `callback`: Function, `ctx?`: any): *this* **Parameters:** Name | Type | ------ | ------ | `event` | string | `callback` | Function | `ctx?` | any | **Returns:** *this* --- ## ExpectedOneOfValuesError URL: https://hyperformula.handsontable.com/docs/api/classes/expectedoneofvalueserror # ExpectedOneOfValuesError Error thrown when the value was expected to be set for a config parameter. It also displays the expected value. This error might be thrown while setting or updating the [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). The following methods accept [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md) as a parameter: **`see`** [buildEmpty](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildempty) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [updateConfig](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) ## Constructors ### constructor \+ **new ExpectedOneOfValuesError**(`values`: string, `paramName`: string): *[ExpectedOneOfValuesError](https://hyperformula.handsontable.com/docs/api/classes/expectedoneofvalueserror.md)* *Defined in [src/errors.ts:242](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L242)* **Parameters:** Name | Type | ------ | ------ | `values` | string | `paramName` | string | **Returns:** *[ExpectedOneOfValuesError](https://hyperformula.handsontable.com/docs/api/classes/expectedoneofvalueserror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## Evaluator URL: https://hyperformula.handsontable.com/docs/api/classes/evaluator # Evaluator ## Constructors ### constructor \+ **new Evaluator**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md), `interpreter`: Interpreter, `lazilyTransformingAstService`: [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md), `dependencyGraph`: DependencyGraph, `columnSearch`: [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md)): *[Evaluator](https://hyperformula.handsontable.com/docs/api/classes/evaluator.md)* *Defined in [src/Evaluator.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Evaluator.ts#L22)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | `interpreter` | Interpreter | `lazilyTransformingAstService` | [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md) | `dependencyGraph` | DependencyGraph | `columnSearch` | [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md) | **Returns:** *[Evaluator](https://hyperformula.handsontable.com/docs/api/classes/evaluator.md)* ## Properties ### interpreter • **interpreter**: *Interpreter* *Defined in [src/Evaluator.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Evaluator.ts#L27)* ## Methods ### partialRun ▸ **partialRun**(`vertices`: Vertex[]): *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* *Defined in [src/Evaluator.ts:44](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Evaluator.ts#L44)* **Parameters:** Name | Type | ------ | ------ | `vertices` | Vertex[] | **Returns:** *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* ___ ### run ▸ **run**(): *void* *Defined in [src/Evaluator.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Evaluator.ts#L34)* **Returns:** *void* ___ ### runAndForget ▸ **runAndForget**(`ast`: Ast, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `dependencies`: RelativeDependency[]): *InterpreterValue* *Defined in [src/Evaluator.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Evaluator.ts#L56)* **Parameters:** Name | Type | ------ | ------ | `ast` | Ast | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `dependencies` | RelativeDependency[] | **Returns:** *InterpreterValue* --- ## ExportedCellChange URL: https://hyperformula.handsontable.com/docs/api/classes/exportedcellchange # ExportedCellChange A list of cells which values changed after the operation, their absolute addresses and new values. ## Constructors ### constructor \+ **new ExportedCellChange**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `newValue`: [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)): *[ExportedCellChange](https://hyperformula.handsontable.com/docs/api/classes/exportedcellchange.md)* *Defined in [src/Exporter.ts:23](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L23)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `newValue` | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | **Returns:** *[ExportedCellChange](https://hyperformula.handsontable.com/docs/api/classes/exportedcellchange.md)* ## Properties ### address • **address**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/Exporter.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L25)* ___ ### newValue • **newValue**: *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/Exporter.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L26)* ## Accessors ### col • **get col**(): *number* *Defined in [src/Exporter.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L30)* **Returns:** *number* ___ ### row • **get row**(): *number* *Defined in [src/Exporter.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L34)* **Returns:** *number* ___ ### sheet • **get sheet**(): *number* *Defined in [src/Exporter.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L38)* **Returns:** *number* ___ ### value • **get value**(): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/Exporter.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L42)* **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* --- ## ExportedNamedExpressionChange URL: https://hyperformula.handsontable.com/docs/api/classes/exportednamedexpressionchange # ExportedNamedExpressionChange ## Constructors ### constructor \+ **new ExportedNamedExpressionChange**(`name`: string, `newValue`: [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]): *[ExportedNamedExpressionChange](https://hyperformula.handsontable.com/docs/api/classes/exportednamedexpressionchange.md)* *Defined in [src/Exporter.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L47)* **Parameters:** Name | Type | ------ | ------ | `name` | string | `newValue` | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][] | **Returns:** *[ExportedNamedExpressionChange](https://hyperformula.handsontable.com/docs/api/classes/exportednamedexpressionchange.md)* ## Properties ### name • **name**: *string* *Defined in [src/Exporter.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L49)* ___ ### newValue • **newValue**: *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/Exporter.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L50)* --- ## Exporter URL: https://hyperformula.handsontable.com/docs/api/classes/exporter # Exporter ## Constructors ### constructor \+ **new Exporter**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `namedExpressions`: [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md), `sheetMapping`: SheetMapping, `lazilyTransformingService`: [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md)): *[Exporter](https://hyperformula.handsontable.com/docs/api/classes/exporter.md)* *Defined in [src/Exporter.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L55)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `namedExpressions` | [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md) | `sheetMapping` | SheetMapping | `lazilyTransformingService` | [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md) | **Returns:** *[Exporter](https://hyperformula.handsontable.com/docs/api/classes/exporter.md)* ## Methods ### exportChange ▸ **exportChange**(`change`: [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange) | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/Exporter.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `change` | [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md) | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange) | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### exportScalarOrRange ▸ **exportScalarOrRange**(`value`: InterpreterValue): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/Exporter.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L108)* **Parameters:** Name | Type | ------ | ------ | `value` | InterpreterValue | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### exportValue ▸ **exportValue**(`value`: InterpreterValue): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/Exporter.ts:94](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L94)* **Parameters:** Name | Type | ------ | ------ | `value` | InterpreterValue | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* --- ## FunctionPluginValidationError URL: https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror # FunctionPluginValidationError Error thrown when function plugin is invalid. **`see`** [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunction) **`see`** [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunctionplugin) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* ## Methods ### functionMethodNotFound ▸ **functionMethodNotFound**(`functionName`: string, `pluginName`: string): *[FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md)* *Defined in [src/errors.ts:321](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L321)* **Parameters:** Name | Type | ------ | ------ | `functionName` | string | `pluginName` | string | **Returns:** *[FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md)* ___ ### functionNotDeclaredInPlugin ▸ **functionNotDeclaredInPlugin**(`functionId`: string, `pluginName`: string): *[FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md)* *Defined in [src/errors.ts:317](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L317)* **Parameters:** Name | Type | ------ | ------ | `functionId` | string | `pluginName` | string | **Returns:** *[FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md)* --- ## GraphBuilder URL: https://hyperformula.handsontable.com/docs/api/classes/graphbuilder # GraphBuilder Service building the graph and mappings. ## Constructors ### constructor \+ **new GraphBuilder**(`dependencyGraph`: DependencyGraph, `columnSearch`: [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md), `parser`: ParserWithCaching, `cellContentParser`: [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md), `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md), `arraySizePredictor`: [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md)): *[GraphBuilder](https://hyperformula.handsontable.com/docs/api/classes/graphbuilder.md)* *Defined in [src/GraphBuilder.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L31)* Configures the building service. **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | `columnSearch` | [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md) | `parser` | ParserWithCaching | `cellContentParser` | [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md) | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | `arraySizePredictor` | [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md) | **Returns:** *[GraphBuilder](https://hyperformula.handsontable.com/docs/api/classes/graphbuilder.md)* ## Methods ### buildGraph ▸ **buildGraph**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets), `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md)): *void* *Defined in [src/GraphBuilder.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L50)* Builds graph. **Parameters:** Name | Type | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | **Returns:** *void* --- ## HyperFormula URL: https://hyperformula.handsontable.com/docs/api/classes/hyperformula # HyperFormula This is a class for creating HyperFormula instance, all the following public methods are related to this class. The instance can be created only by calling one of the static methods `buildFromArray`, `buildFromSheets` or `buildEmpty` and should be disposed of with the `destroy` method when it's no longer needed to free the resources. The instance can be seen as a workbook where worksheets can be created and manipulated. They are organized within a widely known structure of columns and rows which can be manipulated as well. The smallest possible data unit are the cells, which may contain simple values or formulas to be calculated. All CRUD methods are called directly on HyperFormula instance and will trigger corresponding lifecycle events. The events are marked accordingly, as well as thrown errors, so they can be correctly handled. ## Static Properties ### buildDate ▪ **buildDate**: *string* = process.env.HT_BUILD_DATE as string *Defined in [src/HyperFormula.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L105)* Latest build date. ___ ### languages ▪ **languages**: *Record‹string, RawTranslationPackage›* *Defined in [src/HyperFormula.ts:121](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L121)* When using the UMD build, this property contains all available languages to use with the [registerLanguage](#registerlanguage) method. For more information, see the [Localizing functions](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md) guide. ___ ### releaseDate ▪ **releaseDate**: *string* = process.env.HT_RELEASE_DATE as string *Defined in [src/HyperFormula.ts:112](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L112)* A release date. ___ ### version ▪ **version**: *string* = process.env.HT_VERSION as string *Defined in [src/HyperFormula.ts:98](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L98)* Version of the HyperFormula. ## Static Accessors ### defaultConfig • **get defaultConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/HyperFormula.ts:160](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L160)* Returns all of HyperFormula's default [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`example`** ```js // returns all default configuration options const defaultConfig = HyperFormula.defaultConfig; ``` **`category`** Static Accessors **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ## Factories ### buildEmpty ▸ **buildEmpty**(`configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:353](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L353)* Builds an empty engine instance. Can be configured with the optional parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified the engine will be built with the default configuration. **`example`** ```js const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // build with no initial data and with optional config parameter maxColumns const hfInstance = HyperFormula.buildEmpty({ maxColumns: 1000 }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ### buildFromArray ▸ **buildFromArray**(`sheet`: [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:279](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L279)* Builds the engine for a sheet from a two-dimensional array representation. The engine is created with a single sheet. Can be configured with the optional second parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified, the engine will be built with the default configuration. **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when sheet size exceeds the limits **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when sheet is not an array of arrays **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md) when plugin class definition is not consistent with metadata **`example`** ```js // data represented as an array const sheetData = [ ['0', '=SUM(1, 2, 3)', '52'], ['=SUM(A1:C1)', '', '=A1'], ['2', '=SUM(A1:C1)', '=theUltimateQuestionOfLife'], ]; const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // method with optional config parameter maxColumns const hfInstance = HyperFormula.buildFromArray(sheetData, { maxColumns: 1000 }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `sheet` | [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) | - | two-dimensional array representation of sheet | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ### buildFromSheets ▸ **buildFromSheets**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:326](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L326)* Builds the engine from an object containing multiple sheets with names. The engine is created with one or more sheets. Can be configured with the optional second parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified the engine will be built with the default configuration. **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when sheet size exceeds the limits **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when any sheet is not an array of arrays **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md) when plugin class definition is not consistent with metadata **`example`** ```js // data represented as an object with sheets: Sheet1 and Sheet2 const sheetData = { 'Sheet1': [ ['1', '', '=Sheet2!$A1'], ['', '2', '=SUM(1, 2, 3)'], ['=Sheet2!$A2', '2', ''], ], 'Sheet2': [ ['', '4', '=Sheet1!$B1'], ['', '8', '=SUM(9, 3, 3)'], ['=Sheet1!$B1', '2', '=theUltimateQuestionOfLife'], ], }; const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // method with optional config parameter useColumnIndex const hfInstance = HyperFormula.buildFromSheets(sheetData, { useColumnIndex: true }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | - | object with sheets definition | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ## Instance ### destroy ▸ **destroy**(): *void* *Defined in [src/HyperFormula.ts:4755](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4755)* Destroys instance of HyperFormula. **`example`** ```js // destroys the instance hfInstance.destroy(); ``` **Returns:** *void* ___ ### getConfig ▸ **getConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/HyperFormula.ts:1180](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1180)* Returns current configuration of the engine instance. For more information, see the [Configuration options guide](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`example`** ```js // should return all config metadata including default and those which were added const hfConfig = hfInstance.getConfig(); ``` **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ___ ### rebuildAndRecalculate ▸ **rebuildAndRecalculate**(): *void* *Defined in [src/HyperFormula.ts:1194](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1194)* Rebuilds the HyperFormula instance preserving the current sheets data. **`example`** ```js hfInstance.rebuildAndRecalculate(); ``` **Returns:** *void* ___ ### updateConfig ▸ **updateConfig**(`newParams`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›): *void* *Defined in [src/HyperFormula.ts:1157](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1157)* Updates the config with given new metadata. It is an expensive operation, as it might trigger rebuilding the engine and recalculation of all formulas. For more information, see the [Configuration options guide](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) when some parameters of config are of wrong type (e.g., currencySymbol) **`throws`** [ConfigValueEmpty](https://hyperformula.handsontable.com/docs/api/classes/configvalueempty.md) when some parameters of config are of invalid value (e.g., currencySymbol) **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // add a config param, for example maxColumns, // you can check the configuration with getConfig method hfInstance.updateConfig({ maxColumns: 1000 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `newParams` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | configuration options to be updated or added | **Returns:** *void* ___ ## Sheets ### addSheet ▸ **addSheet**(`sheetName?`: undefined | string): *string* *Defined in [src/HyperFormula.ts:2771](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2771)* Adds a new sheet to the HyperFormula instance. Returns given or autogenerated name of a new sheet. Note that this method may trigger dependency graph recalculation. **`fires`** [sheetAdded](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetadded) after the sheet was added **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror.md) when sheet with a given name already exists **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'MySheet3' const nameProvided = hfInstance.addSheet('MySheet3'); // should return autogenerated 'Sheet4' // because no name was provided and 3 other ones already exist const generatedName = hfInstance.addSheet(); ``` **Parameters:** Name | Type | ------ | ------ | `sheetName?` | undefined | string | **Returns:** *string* ___ ### clearSheet ▸ **clearSheet**(`sheetId`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2919](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2919)* Clears the sheet content. Double-checks if the sheet exists. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: 0, // }] const changes = hfInstance.clearSheet(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### countSheets ▸ **countSheets**(): *number* *Defined in [src/HyperFormula.ts:3608](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3608)* Returns the number of existing sheets. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return the number of sheets which is '1' const sheetsCount = hfInstance.countSheets(); ``` **Returns:** *number* ___ ### doesSheetExist ▸ **doesSheetExist**(`sheetName`: string): *boolean* *Defined in [src/HyperFormula.ts:3327](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3327)* Returns `true` whether sheet with a given name exists. The method accepts sheet name to be checked. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' since 'MySheet1' exists const sheetExist = hfInstance.doesSheetExist('MySheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | name of the sheet, case-insensitive. | **Returns:** *boolean* ___ ### getAllSheetsDimensions ▸ **getAllSheetsDimensions**(): *Record‹string, [SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)›* *Defined in [src/HyperFormula.ts:1033](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1033)* Returns a map containing dimensions of all sheets for the engine instance represented as a key-value pairs where keys are sheet IDs and dimensions are returned as numbers, width and height respectively. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ Sheet1: [ ['1', '2', '=Sheet2!$A1'], ], Sheet2: [ ['3'], ['4'], ], }); // should return the dimensions of all sheets: // { Sheet1: { width: 3, height: 1 }, Sheet2: { width: 1, height: 2 } } const allSheetsDimensions = hfInstance.getAllSheetsDimensions(); ``` **Returns:** *Record‹string, [SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)›* ___ ### getAllSheetsFormulas ▸ **getAllSheetsFormulas**(): *Record‹string, (string | undefined)[][]›* *Defined in [src/HyperFormula.ts:1104](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1104)* Returns formulas of all sheets in a form of an object which property keys are strings and values are 2D arrays of strings or possibly `undefined` when the call does not contain a formula. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=A1+10'], ]); // should return only formulas: { Sheet1: [ [ undefined, undefined, '=A1+10' ] ] } const allSheetsFormulas = hfInstance.getAllSheetsFormulas(); ``` **Returns:** *Record‹string, (string | undefined)[][]›* ___ ### getAllSheetsSerialized ▸ **getAllSheetsSerialized**(): *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* *Defined in [src/HyperFormula.ts:1129](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1129)* Returns formulas or values of all sheets in a form of an object which property keys are strings and values are 2D arrays of [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent). Each non-formula cell is serialized to the exact value it was set with, preserving its type. For example, a cell set with the string `'1'` is serialized as the string `'1'`, while a cell set with the number `1` is serialized as the number `1`. **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', 2, '=A1+10'], ]); // should return all sheets serialized content: { Sheet1: [ [ '1', 2, '=A1+10' ] ] } // note: the string '1' stays a string and the number 2 stays a number const allSheetsSerialized = hfInstance.getAllSheetsSerialized(); ``` **Returns:** *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* ___ ### getAllSheetsValues ▸ **getAllSheetsValues**(): *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* *Defined in [src/HyperFormula.ts:1085](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1085)* Returns values of all sheets in a form of an object which property keys are strings and values are 2D arrays of [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue). **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '=A1+10', '3'], ]); // should return all sheets values: { Sheet1: [ [ 1, 11, 3 ] ] } const allSheetsValues = hfInstance.getAllSheetsValues(); ``` **Returns:** *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* ___ ### getSheetDimensions ▸ **getSheetDimensions**(`sheetId`: number): *[SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)* *Defined in [src/HyperFormula.ts:1060](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1060)* Returns dimensions of a specified sheet. The sheet dimensions is represented with numbers: width and height. Note: Due to the memory optimizations, some of the empty bottom rows and rightmost columns are not counted to the dimensions. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=Sheet2!$A1'], ]); // should return provided sheet's dimensions: { width: 3, height: 1 } const sheetDimensions = hfInstance.getSheetDimensions(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)* ___ ### getSheetFormulas ▸ **getSheetFormulas**(`sheetId`: number): *(string | undefined)[][]* *Defined in [src/HyperFormula.ts:970](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L970)* Returns an array with normalized formula strings from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) or `undefined` for a cells that have no value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return all formulas of a sheet: // [ // [undefined, '=SUM(1, 2, 3)', '=A1'], // [undefined, '=TEXT(A2, "0.0%")', '=C1'], // [undefined, '=SUM(A1:C1)', '=C1'], // ]; const sheetFormulas = hfInstance.getSheetFormulas(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *(string | undefined)[][]* ___ ### getSheetId ▸ **getSheetId**(`sheetName`: string): *number | undefined* *Defined in [src/HyperFormula.ts:3302](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3302)* Returns a unique sheet ID assigned to the sheet with a given name or `undefined` if the sheet does not exist. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return '0' because 'MySheet1' is of ID '0' const sheetID = hfInstance.getSheetId('MySheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | name of the sheet, for which we want to retrieve ID, case-insensitive. | **Returns:** *number | undefined* ___ ### getSheetName ▸ **getSheetName**(`sheetId`: number): *string | undefined* *Defined in [src/HyperFormula.ts:3256](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3256)* Returns a unique sheet name assigned to the sheet of a given ID or `undefined` if the there is no sheet with a given ID. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'MySheet2' as this sheet is the second one const sheetName = hfInstance.getSheetName(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of the sheet, for which we want to retrieve name | **Returns:** *string | undefined* ___ ### getSheetNames ▸ **getSheetNames**(): *string[]* *Defined in [src/HyperFormula.ts:3278](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3278)* List all sheet names. Returns an array of sheet names as strings. **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return all sheets names: ['MySheet1', 'MySheet2'] const sheetNames = hfInstance.getSheetNames(); ``` **Returns:** *string[]* ___ ### getSheetSerialized ▸ **getSheetSerialized**(`sheetId`: number): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:1003](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1003)* Returns an array of arrays of [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) with serialized content of cells from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet), either a cell formula or an explicit value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return: // [ // ['0', '=SUM(1, 2, 3)', '=A1'], // ['1', '=TEXT(A2, "0.0%")', '=C1'], // ['2', '=SUM(A1:C1)', '=C1'], // ]; const serializedContent = hfInstance.getSheetSerialized(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getSheetValues ▸ **getSheetValues**(`sheetId`: number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:937](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L937)* Returns an array of arrays of [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) with values of all cells from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet). Applies rounding and post-processing. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return all values of a sheet: [[0, 6, 0], [1, '1.0%', 0], [2, 6, 0]] const sheetValues = hfInstance.getSheetValues(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### isItPossibleToAddSheet ▸ **isItPossibleToAddSheet**(`sheetName`: string): *boolean* *Defined in [src/HyperFormula.ts:2732](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2732)* Returns information whether it is possible to add a sheet to the engine. Checks against particular rules to ascertain that addSheet can be called. If returns `true`, doing [addSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addsheet) operation won't throw any errors, and it is possible to add sheet with provided name. Returns `false` if the chosen name is already used. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'false' because 'MySheet2' already exists const isAddable = hfInstance.isItPossibleToAddSheet('MySheet2'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | sheet name, case-insensitive | **Returns:** *boolean* ___ ### isItPossibleToClearSheet ▸ **isItPossibleToClearSheet**(`sheetId`: number): *boolean* *Defined in [src/HyperFormula.ts:2877](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2877)* Returns information whether it is possible to clear a specified sheet. If returns `true`, doing [clearSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#clearsheet) operation won't throw any errors, provided sheet exists and its content can be cleared. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because 'MySheet2' exists and can be cleared const isClearable = hfInstance.isItPossibleToClearSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *boolean* ___ ### isItPossibleToRemoveSheet ▸ **isItPossibleToRemoveSheet**(`sheetId`: number): *boolean* *Defined in [src/HyperFormula.ts:2803](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2803)* Returns information whether it is possible to remove sheet for the engine. Returns `true` if the provided sheet exists, and therefore it can be removed, doing [removeSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removesheet) operation won't throw any errors. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because sheet with ID 1 exists and is removable const isRemovable = hfInstance.isItPossibleToRemoveSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *boolean* ___ ### isItPossibleToRenameSheet ▸ **isItPossibleToRenameSheet**(`sheetId`: number, `newName`: string): *boolean* *Defined in [src/HyperFormula.ts:3635](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3635)* Returns information whether it is possible to rename sheet. Returns `true` if the sheet with provided id exists and new name is available Returns `false` if sheet cannot be renamed **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // returns true hfInstance.isItPossibleToRenameSheet(0, 'MySheet0'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number | `newName` | string | a name of the sheet to be given | **Returns:** *boolean* ___ ### isItPossibleToReplaceSheetContent ▸ **isItPossibleToReplaceSheetContent**(`sheetId`: number, `values`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *boolean* *Defined in [src/HyperFormula.ts:2949](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2949)* Returns information whether it is possible to replace the sheet content. If returns `true`, doing [setSheetContent](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setsheetcontent) operation won't throw any errors, the provided sheet exists and then its content can be replaced. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because sheet of ID 0 exists // and the provided content can be placed in this sheet const isReplaceable = hfInstance.isItPossibleToReplaceSheetContent(0, [['50'], ['60']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | `values` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | array of new values | **Returns:** *boolean* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2846](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2846)* Removes a sheet Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [sheetRemoved](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetremoved) after the sheet was removed **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: { error: [CellError], value: '#REF!' }, // }] const changes = hfInstance.removeSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### renameSheet ▸ **renameSheet**(`sheetId`: number, `newName`: string): *void* *Defined in [src/HyperFormula.ts:3673](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3673)* Renames a specified sheet. Note that this method may trigger dependency graph recalculation. **`fires`** [sheetRenamed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetrenamed) after the sheet was renamed **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror.md) when the provided sheet name already exists **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // renames the sheet 'MySheet1' hfInstance.renameSheet(0, 'MySheet0'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet ID | `newName` | string | a name of the sheet to be given, if is the same as the old one the method does nothing | **Returns:** *void* ___ ### setSheetContent ▸ **setSheetContent**(`sheetId`: number, `values`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2986](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2986)* Replaces the sheet content with new values. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when values argument is not an array of arrays **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.setSheetContent(0, [['50'], ['60']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | `values` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | array of new values | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Ranges ### getFillRangeData ▸ **getFillRangeData**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `target`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `offsetsFromTarget`: boolean): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:2688](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2688)* Returns values to fill target range using source range, with properly extending the range using wrap-around heuristic. **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source or target are of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([[1, '=A1'], ['=$A$1', '2']]); // should return [['2', '=$A$1', '2'], ['=A3', 1, '=C3'], ['2', '=$A$1', '2']] hfInstance.getFillRangeData( {start: {sheet: 0, row: 0, col: 0}, end: {sheet: 0, row: 1, col: 1}}, {start: {sheet: 0, row: 1, col: 1}, end: {sheet: 0, row: 3, col: 3}}); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | of data | `target` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | range where data is intended to be put | `offsetsFromTarget` | boolean | false | if true, offsets are computed from target corner, otherwise from source corner | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getRangeFormulas ▸ **getRangeFormulas**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *(string | undefined)[][]* *Defined in [src/HyperFormula.ts:2615](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2615)* Returns cell formulas in given range. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', '2', '10'], ['5', '6', '7'], ['40', '30', '20'], ]); // returns cell formulas of a given range only: // [ [ '=SUM(1, 2)', undefined ], [ undefined, undefined ] ] const rangeFormulas = hfInstance.getRangeFormulas({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *(string | undefined)[][]* ___ ### getRangeSerialized ▸ **getRangeSerialized**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:2654](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2654)* Returns serialized cells in given range. Each non-formula cell is serialized to the exact value it was set with, preserving its type (e.g., a cell set with the string `'2'` is serialized as the string `'2'`, while a cell set with the number `2` is serialized as the number `2`). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', 2, 10], [5, 6, 7], [40, 30, 20], ]); // should return serialized cell content for the given range: // [ [ '=SUM(1, 2)', 2 ], [ 5, 6 ] ] const rangeSerialized = hfInstance.getRangeSerialized({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getRangeValues ▸ **getRangeValues**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2579](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2579)* Returns the cell content of a given range in a [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][] format. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', '2', '10'], ['5', '6', '7'], ['40', '30', '20'], ]); // returns calculated cells content: [ [ 3, 2 ], [ 5, 6 ] ] const rangeValues = hfInstance.getRangeValues({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ## Rows ### addRows ▸ **addRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1826](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1826)* Adds multiple rows into a specified position in a given sheet. Does nothing if rows are outside effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when performing this operation would result in sheet size limits exceeding **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.addRows(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which rows will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [row, amount], where row is a row number above which the rows will be added | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isItPossibleToAddRows ▸ **isItPossibleToAddRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1784](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1784)* Returns information whether it is possible to add rows into a specified position in a given sheet. Checks against particular rules to ascertain that addRows can be called. If returns `true`, doing [addRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addrows) operation won't throw any errors. Returns `false` if adding rows would exceed the sheet size limit or given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // should return 'true' for this example, // it is possible to add one row in the second row of sheet 0 const isAddable = hfInstance.isItPossibleToAddRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which rows will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [row, amount], where row is a row number above which the rows will be added | **Returns:** *boolean* ___ ### isItPossibleToMoveRows ▸ **isItPossibleToMoveRows**(`sheetId`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *boolean* *Defined in [src/HyperFormula.ts:2181](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2181)* Returns information whether it is possible to move a particular number of rows to a specified position in a given sheet. Checks against particular rules to ascertain that moveRows can be called. If returns `true`, doing [moveRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#moverows) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected rows, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return 'true' for this example // it is possible to move one row from row 0 into row 2 const isMovable = hfInstance.isItPossibleToMoveRows(0, 0, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startRow` | number | number of the first row to move | `numberOfRows` | number | number of rows to move | `targetRow` | number | row number before which rows will be moved | **Returns:** *boolean* ___ ### isItPossibleToRemoveRows ▸ **isItPossibleToRemoveRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1857](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1857)* Returns information whether it is possible to remove rows from a specified position in a given sheet. Checks against particular rules to ascertain that removeRows can be called. If returns `true`, doing [removeRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removerows) operation won't throw any errors. Returns `false` if given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return 'true' for this example // it is possible to remove one row from row 1 of sheet 0 const isRemovable = hfInstance.isItPossibleToRemoveRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which rows will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [row, amount] | **Returns:** *boolean* ___ ### isItPossibleToSetRowOrder ▸ **isItPossibleToSetRowOrder**(`sheetId`: number, `newRowOrder`: number[]): *boolean* *Defined in [src/HyperFormula.ts:1579](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1579)* Checks if it is possible to reorder rows of a sheet according to a permutation. Parameter `newRowOrder` should have the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`, i.e. the value at index `i` is the new position for the row that is currently at index `i`. See [setRowOrder](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setroworder) for details. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'] ]); // returns true hfInstance.isItPossibleToSetRowOrder(0, [1, 2, 0]); // returns false (array length must match the number of rows) hfInstance.isItPossibleToSetRowOrder(0, [2]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newRowOrder` | number[] | permutation of rows | **Returns:** *boolean* ___ ### isItPossibleToSwapRowIndexes ▸ **isItPossibleToSwapRowIndexes**(`sheetId`: number, `rowMapping`: [number, number][]): *boolean* *Defined in [src/HyperFormula.ts:1492](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1492)* Checks if it is possible to reorder rows of a sheet according to a source-target mapping. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1], [2], [4, 5], ]); // returns true const isSwappable = hfInstance.isItPossibleToSwapRowIndexes(0, [[0, 2], [2, 0]]); // returns false const isSwappable = hfInstance.isItPossibleToSwapRowIndexes(0, [[0, 1]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `rowMapping` | [number, number][] | array mapping original positions to final positions of rows | **Returns:** *boolean* ___ ### moveRows ▸ **moveRows**(`sheetId`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2228](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2228)* Moves a particular number of rows to a specified position in a given sheet. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md) when the target location has array inside - cells cannot be replaced by the array **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.moveRows(0, 0, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startRow` | number | number of the first row to move | `numberOfRows` | number | number of rows to move | `targetRow` | number | row number before which rows will be moved | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### removeRows ▸ **removeRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1898](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1898)* Removes multiple rows from a specified position in a given sheet. Does nothing if rows are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return: [{ sheet: 0, col: 1, row: 2, value: null }] for this example const changes = hfInstance.removeRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which rows will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [row, amount] | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setRowOrder ▸ **setRowOrder**(`sheetId`: number, `newRowOrder`: number[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1544](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1544)* Reorders rows of a sheet according to a permutation of 0-based indexes. Parameter `newRowOrder` should have the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`. In other words, the value at index `i` is the new position for the row that is currently at index `i`. Note that this is the opposite of `[ previousPositionForRow0, previousPositionForRow1, ... ]`. This method might be used to [sort the rows of a sheet](https://hyperformula.handsontable.com/docs/guide/sorting-data.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note: This method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when rowMapping does not define correct row permutation for some subset of rows of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'] ]); // Move 'A' to index 1, 'B' to index 2, and 'C' to index 0. const newRowOrder = [1, 2, 0]; // [ newPosForA, newPosForB, newPosForC ] const changes = hfInstance.setRowOrder(0, newRowOrder); // Sheet after this operation: [['C'], ['A'], ['B']] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newRowOrder` | number[] | permutation of rows; array length must match the number of rows returned by [getSheetDimensions()](#getsheetdimensions) | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### swapRowIndexes ▸ **swapRowIndexes**(`sheetId`: number, `rowMapping`: [number, number][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1461](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1461)* Reorders rows of a sheet according to a source-target mapping. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when rowMapping does not define correct row permutation for some subset of rows of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1], [2], [4, 5], ]); // should set swap rows 0 and 2 in place, returns: // [{ // address: { sheet: 0, col: 0, row: 2 }, // newValue: 1, // }, // { // address: { sheet: 0, col: 1, row: 2 }, // newValue: null, // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 4, // }, // { // address: { sheet: 0, col: 1, row: 0 }, // newValue: 5, // }] const changes = hfInstance.swapRowIndexes(0, [[0, 2], [2, 0]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `rowMapping` | [number, number][] | array mapping original positions to final positions of rows | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Columns ### addColumns ▸ **addColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1974](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1974)* Adds multiple columns into a specified position in a given sheet. Does nothing if the columns are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when performing this operation would result in sheet size limits exceeding **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=RAND()', '42'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: 0.92754862796338, // }] const changes = hfInstance.addColumns(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which columns will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount], where column is a column number from which new columns will be added | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isItPossibleToAddColumns ▸ **isItPossibleToAddColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1928](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1928)* Returns information whether it is possible to add columns into a specified position in a given sheet. Checks against particular rules to ascertain that addColumns can be called. If returns `true`, doing [addColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addcolumns) operation won't throw any errors. Returns `false` if adding columns would exceed the sheet size limit or given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example, // it is possible to add 1 column in sheet 0, at column 1 const isAddable = hfInstance.isItPossibleToAddColumns(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which columns will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount], where column is a column number from which new columns will be added | **Returns:** *boolean* ___ ### isItPossibleToMoveColumns ▸ **isItPossibleToMoveColumns**(`sheetId`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *boolean* *Defined in [src/HyperFormula.ts:2263](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2263)* Returns information whether it is possible to move a particular number of columns to a specified position in a given sheet. Checks against particular rules to ascertain that moveColumns can be called. If returns `true`, doing [moveColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecolumns) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected columns, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example // it is possible to move one column from column 1 into column 2 of sheet 0 const isMovable = hfInstance.isItPossibleToMoveColumns(0, 1, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startColumn` | number | number of the first column to move | `numberOfColumns` | number | number of columns to move | `targetColumn` | number | column number before which columns will be moved | **Returns:** *boolean* ___ ### isItPossibleToRemoveColumns ▸ **isItPossibleToRemoveColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:2004](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2004)* Returns information whether it is possible to remove columns from a specified position in a given sheet. Checks against particular rules to ascertain that removeColumns can be called. If returns `true`, doing [removeColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removecolumns) operation won't throw any errors. Returns `false` if given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example // it is possible to remove one column, in place of the second column of sheet 0 const isRemovable = hfInstance.isItPossibleToRemoveColumns(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which columns will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [column, amount] | **Returns:** *boolean* ___ ### isItPossibleToSetColumnOrder ▸ **isItPossibleToSetColumnOrder**(`sheetId`: number, `newColumnOrder`: number[]): *boolean* *Defined in [src/HyperFormula.ts:1748](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1748)* Checks if it is possible to reorder columns of a sheet according to a permutation. Parameter `newColumnOrder` should have the form `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`, i.e. the value at index `i` is the new position for the column that is currently at index `i`. See [setColumnOrder](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcolumnorder) for details. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // returns true hfInstance.isItPossibleToSetColumnOrder(0, [1, 2, 0]); // returns false (array length must match the number of columns) hfInstance.isItPossibleToSetColumnOrder(0, [1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newColumnOrder` | number[] | permutation of columns | **Returns:** *boolean* ___ ### isItPossibleToSwapColumnIndexes ▸ **isItPossibleToSwapColumnIndexes**(`sheetId`: number, `columnMapping`: [number, number][]): *boolean* *Defined in [src/HyperFormula.ts:1665](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1665)* Checks if it is possible to reorder columns of a sheet according to a source-target mapping. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1, 2, 4], [5] ]); // returns true hfInstance.isItPossibleToSwapColumnIndexes(0, [[0, 2], [2, 0]]); // returns false hfInstance.isItPossibleToSwapColumnIndexes(0, [[0, 1]]); ``` **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *boolean* ___ ### moveColumns ▸ **moveColumns**(`sheetId`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2316](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2316)* Moves a particular number of columns to a specified position in a given sheet. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md) when the target location has array inside - cells cannot be replaced by the array **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3', '=RAND()', '=SUM(A1:C1)'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: 0.16210054671639, // }, { // address: { sheet: 0, col: 4, row: 0 }, // newValue: 6.16210054671639, // }] const changes = hfInstance.moveColumns(0, 1, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startColumn` | number | number of the first column to move | `numberOfColumns` | number | number of columns to move | `targetColumn` | number | column number before which columns will be moved | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### removeColumns ▸ **removeColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2049](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2049)* Removes multiple columns from a specified position in a given sheet. Does nothing if columns are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: { error: [CellError], value: '#REF!' }, // }] const changes = hfInstance.removeColumns(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which columns will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount] | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setColumnOrder ▸ **setColumnOrder**(`sheetId`: number, `newColumnOrder`: number[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1715](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1715)* Reorders columns of a sheet according to a permutation of 0-based indexes. Parameter `newColumnOrder` should have the form `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`. In other words, the value at index `i` is the new position for the column that is currently at index `i`. Note that this is the opposite of `[ previousPositionForColumn0, previousPositionForColumn1, ... ]`. This method might be used to [sort the columns of a sheet](https://hyperformula.handsontable.com/docs/guide/sorting-data.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note: This method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when columnMapping does not define correct column permutation for some subset of columns of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // Move 'A' to index 1, 'B' to index 2, and 'C' to index 0. const newColumnOrder = [1, 2, 0]; // [ newPosForA, newPosForB, newPosForC ] const changes = hfInstance.setColumnOrder(0, newColumnOrder); // Sheet after this operation: [['C', 'A', 'B']] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newColumnOrder` | number[] | permutation of columns; array length must match the number of columns returned by [getSheetDimensions()](#getsheetdimensions) | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### swapColumnIndexes ▸ **swapColumnIndexes**(`sheetId`: number, `columnMapping`: [number, number][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1637](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1637)* Reorders columns of a sheet according to a source-target mapping. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when columnMapping does not define correct column permutation for some subset of columns of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1, 2, 4], [5] ]); // should set swap columns 0 and 2 in place, returns: // [{ // address: { sheet: 0, col: 2, row: 0 }, // newValue: 1, // }, // { // address: { sheet: 0, col: 2, row: 1 }, // newValue: 5, // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 4, // }, // { // address: { sheet: 0, col: 0, row: 1 }, // newValue: null, // }] const changes = hfInstance.swapColumnIndexes(0, [[0, 2], [2, 0]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `columnMapping` | [number, number][] | array mapping original positions to final positions of columns | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Cells ### doesCellHaveFormula ▸ **doesCellHaveFormula**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3419](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3419)* Returns `true` if the specified cell contains a formula. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'true' since the A1 cell contains a formula const A1Formula = hfInstance.doesCellHaveFormula({ sheet: 0, col: 0, row: 0 }); // should return 'false' since the B1 cell does not contain a formula const B1NoFormula = hfInstance.doesCellHaveFormula({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### doesCellHaveSimpleValue ▸ **doesCellHaveSimpleValue**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3388](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3388)* Returns `true` if the specified cell contains a simple value. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'true' since the selected cell contains a simple value const isA1Simple = hfInstance.doesCellHaveSimpleValue({ sheet: 0, col: 0, row: 0 }); // should return 'false' since the selected cell does not contain a simple value const isB1Simple = hfInstance.doesCellHaveSimpleValue({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### getCellFormula ▸ **getCellFormula**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *string | undefined* *Defined in [src/HyperFormula.ts:843](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L843)* Returns a normalized formula string from the cell of a given address or `undefined` for an address that does not exist and empty values. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '0'], ]); // should return a normalized A1 cell formula: '=SUM(1, 2, 3)' const A1Formula = hfInstance.getCellFormula({ sheet: 0, col: 0, row: 0 }); // should return a normalized B1 cell formula: 'undefined' const B1Formula = hfInstance.getCellFormula({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *string | undefined* ___ ### getCellHyperlink ▸ **getCellHyperlink**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *string | undefined* *Defined in [src/HyperFormula.ts:873](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L873)* Returns the `HYPERLINK` url for a cell of a given address or `undefined` for an address that does not exist or a cell that is not `HYPERLINK` **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=HYPERLINK("https://hyperformula.handsontable.com/", "HyperFormula")', '0'], ]); // should return url of 'HYPERLINK': https://hyperformula.handsontable.com/ const A1Hyperlink = hfInstance.getCellHyperlink({ sheet: 0, col: 0, row: 0 }); // should return 'undefined' for a cell that is not 'HYPERLINK' const B1Hyperlink = hfInstance.getCellHyperlink({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *string | undefined* ___ ### getCellSerialized ▸ **getCellSerialized**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/HyperFormula.ts:905](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L905)* Returns [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) with a serialized content of the cell of a given address: either a cell formula, an explicit value, or an error. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '0'], ]); // should return serialized content of A1 cell: '=SUM(1, 2, 3)' const cellA1Serialized = hfInstance.getCellSerialized({ sheet: 0, col: 0, row: 0 }); // should return serialized content of B1 cell: '0' const cellB1Serialized = hfInstance.getCellSerialized({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* ___ ### getCellType ▸ **getCellType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* *Defined in [src/HyperFormula.ts:3356](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3356)* Returns the type of a cell at a given address. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'FORMULA', the cell of given coordinates is of this type const cellA1Type = hfInstance.getCellType({ sheet: 0, col: 0, row: 0 }); // should return 'VALUE', the cell of given coordinates is of this type const cellB1Type = hfInstance.getCellType({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* ___ ### getCellValue ▸ **getCellValue**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/HyperFormula.ts:812](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L812)* Returns the cell value of a given address. Applies rounding and post-processing. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) when cellAddress is of incorrect type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '2'], ]); // get value of A1 cell, should be '6' const A1Value = hfInstance.getCellValue({ sheet: 0, col: 0, row: 0 }); // get value of B1 cell, should be '2' const B1Value = hfInstance.getCellValue({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* ___ ### getCellValueDetailedType ▸ **getCellValueDetailedType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* *Defined in [src/HyperFormula.ts:3550](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3550)* Returns detailed type of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. For more information, see the [Types of values guide](https://hyperformula.handsontable.com/docs/guide/types-of-values.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1%', '1$'], ]); // should return 'NUMBER_PERCENT', cell value type of provided coordinates is a number with a format inference percent. const cellType = hfInstance.getCellValueDetailedType({ sheet: 0, col: 0, row: 0 }); // should return 'NUMBER_CURRENCY', cell value type of provided coordinates is a number with a format inference currency. const cellType = hfInstance.getCellValueDetailedType({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* ___ ### getCellValueFormat ▸ **getCellValueFormat**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *FormatInfo* *Defined in [src/HyperFormula.ts:3584](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3584)* Returns auxiliary format information of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1$', '1'], ]); // should return '$', cell value type of provided coordinates is a number with a format inference currency, parsed as using '$' as currency. const cellFormat = hfInstance.getCellValueFormat({ sheet: 0, col: 0, row: 0 }); // should return undefined, cell value type of provided coordinates is a number with no format information. const cellFormat = hfInstance.getCellValueFormat({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *FormatInfo* ___ ### getCellValueType ▸ **getCellValueType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* *Defined in [src/HyperFormula.ts:3514](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3514)* Returns type of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. For more information, see the [Types of values guide](https://hyperformula.handsontable.com/docs/guide/types-of-values.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '2'], ]); // should return 'NUMBER', cell value type of provided coordinates is a number const cellValue = hfInstance.getCellValueType({ sheet: 0, col: 1, row: 0 }); // should return 'NUMBER', cell value type of provided coordinates is a number const cellValue = hfInstance.getCellValueType({ sheet: 0, col: 0, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* ___ ### isCellEmpty ▸ **isCellEmpty**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3451](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3451)* Returns`true` if the specified cell is empty. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [null, '1'], ]); // should return 'true', cell of provided coordinates is empty const isEmpty = hfInstance.isCellEmpty({ sheet: 0, col: 0, row: 0 }); // should return 'false', cell of provided coordinates is not empty const isNotEmpty = hfInstance.isCellEmpty({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### isCellPartOfArray ▸ **isCellPartOfArray**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3479](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3479)* Returns `true` if a given cell is a part of an array. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['{=TRANSPOSE(B1:B1)}'], ]); // should return 'true', cell of provided coordinates is a part of an array const isPartOfArray = hfInstance.isCellPartOfArray({ sheet: 0, col: 0, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### isItPossibleToMoveCells ▸ **isItPossibleToMoveCells**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:2085](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2085)* Returns information whether it is possible to move cells to a specified position in a given sheet. Checks against particular rules to ascertain that moveCells can be called. If returns `true`, doing [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecells) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected columns, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if destinationLeftCorner, source, or any of basic type arguments are of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // choose the coordinates and assign them to variables const source = { sheet: 0, col: 1, row: 0 }; const destination = { sheet: 0, col: 3, row: 0 }; // should return 'true' for this example // it is possible to move a block of width 1 and height 1 // from the corner: column 1 and row 0 of sheet 0 // into destination corner: column 3, row 0 of sheet 0 const isMovable = hfInstance.isItPossibleToMoveCells({ start: source, end: source }, destination); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | range for a moved block | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *boolean* ___ ### isItPossibleToSetCellContents ▸ **isItPossibleToSetCellContents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *boolean* *Defined in [src/HyperFormula.ts:1356](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1356)* Returns information whether it is possible to change the content in a rectangular area bounded by the box. If returns `true`, doing [setCellContents](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcellcontents) operation won't throw any errors. Returns `false` if the address is invalid or the sheet does not exist. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // top left corner const address1 = { col: 0, row: 0, sheet: 0 }; // bottom right corner const address2 = { col: 1, row: 0, sheet: 0 }; // should return 'true' for this example, it is possible to set content of // width 2, height 1 in the first row and column of sheet 0 const isSettable = hfInstance.isItPossibleToSetCellContents({ start: address1, end: address2 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | single cell or block of cells to check | **Returns:** *boolean* ___ ### moveCells ▸ **moveCells**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2142](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2142)* Moves the content of a cell block from source to the target location. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if destinationLeftCorner or source are of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the given arguments are invalid **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when performing this operation would result in sheet size limits exceeding **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md) when the target location has array inside - cells cannot be replaced by the array **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=RAND()', '42'], ]); // choose the coordinates and assign them to variables const source = { sheet: 0, col: 1, row: 0 }; const destination = { sheet: 0, col: 3, row: 0 }; // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: 0.93524248002062, // }] const changes = hfInstance.moveCells({ start: source, end: source }, destination); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | range for a moved block | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setCellContents ▸ **setCellContents**(`topLeftCornerAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `cellContents`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1409](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1409)* Sets the content for a block of cells of a given coordinates. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md) when the value is not an array of arrays or a raw cell value **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when performing this operation would result in sheet size limits exceeding **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if topLeftCornerAddress argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=A1'], ]); // should set the content, returns: // [{ // address: { sheet: 0, col: 3, row: 0 }, // newValue: 2, // }] const changes = hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `topLeftCornerAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | top left corner of block of cells | `cellContents` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | array with content | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Named Expressions ### addNamedExpression ▸ **addNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3904](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3904)* Adds a specified named expression. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [namedExpressionAdded](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#namedexpressionadded) always, unless [batch](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#batch) mode is used **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionNameIsAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisalreadytakenerror.md) when the named-expression name is not available. **`throws`** [NamedExpressionNameIsInvalidError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisinvaliderror.md) when the named-expression name is not valid **`throws`** [NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror.md) when the named-expression formula contains relative references **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add own expression, scope limited to 'Sheet1' (sheetId=0), the method should return a list of cells which values // changed after the operation, their absolute addresses and new values // for this example: // [{ // name: 'prettyName', // newValue: 142, // }] const changes = hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | a name of the expression to be added | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | the expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | additional metadata related to named expression | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### changeNamedExpression ▸ **changeNamedExpression**(`expressionName`: string, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:4126](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4126)* Changes a given named expression to a specified formula. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror.md) when the given expression does not exist. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`throws`** [[ArrayFormulasNotSupportedError]] when the named expression formula is an array formula **`throws`** [NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror.md) when the named expression formula contains relative references **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression, scope limited to 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // change the named expression const changes = hfInstance.changeNamedExpression('prettyName', '=Sheet1!$A$1+200'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | a new expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | additional metadata related to named expression | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### getAllNamedExpressionsSerialized ▸ **getAllNamedExpressionsSerialized**(): *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* *Defined in [src/HyperFormula.ts:4294](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4294)* Returns all named expressions serialized. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ['60'], ]); // add two named expressions and one scoped hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); hfInstance.addNamedExpression('anotherPrettyName', '=Sheet1!$A$2+100'); hfInstance.addNamedExpression('prettyName3', '=Sheet1!$A$3+100', 0); // get all expressions serialized // should return: // [ // {name: 'prettyName', expression: '=Sheet1!$A$1+100', options: undefined, scope: undefined}, // {name: 'anotherPrettyName', expression: '=Sheet1!$A$2+100', options: undefined, scope: undefined}, // {name: 'alsoPrettyName', expression: '=Sheet1!$A$3+100', options: undefined, scope: 0} // ] const allExpressions = hfInstance.getAllNamedExpressionsSerialized(); ``` **Returns:** *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* ___ ### getNamedExpression ▸ **getNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *[NamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/namedexpression.md) | undefined* *Defined in [src/HyperFormula.ts:4029](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4029)* Returns a named expression, or `undefined` for a named expression that does not exist or does not hold a formula. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression in 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // returns a named expression that corresponds to the passed name from 'Sheet1' (sheetId=0) // for this example, returns: // {name: 'prettyName', expression: '=Sheet1!$A$1+100', options: undefined, scope: 0} const myFormula = hfInstance.getNamedExpression('prettyName', 0); // for a named expression that doesn't exist, returns 'undefined': const myFormulaTwo = hfInstance.getNamedExpression('uglyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[NamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/namedexpression.md) | undefined* ___ ### getNamedExpressionFormula ▸ **getNamedExpressionFormula**(`expressionName`: string, `scope?`: undefined | number): *string | undefined* *Defined in [src/HyperFormula.ts:3984](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3984)* Returns a normalized formula string for given named expression, or `undefined` for a named expression that does not exist or does not hold a formula. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression in 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // returns a normalized formula string corresponding to the passed name from 'Sheet1' (sheetId=0), // '=Sheet1!A1+100' for this example const myFormula = hfInstance.getNamedExpressionFormula('prettyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *string | undefined* ___ ### getNamedExpressionValue ▸ **getNamedExpressionValue**(`expressionName`: string, `scope?`: undefined | number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | undefined* *Defined in [src/HyperFormula.ts:3942](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3942)* Gets specified named expression value. Returns a [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) or undefined if the given named expression does not exist. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression, only 'Sheet1' (sheetId=0) considered as it is the scope hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 'Sheet1'); // returns the calculated value of a passed named expression, '142' for this example const myFormula = hfInstance.getNamedExpressionValue('prettyName', 'Sheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | undefined* ___ ### isItPossibleToAddNamedExpression ▸ **isItPossibleToAddNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:3852](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3852)* Returns information whether it is possible to add named expression into a specific scope. Checks against particular rules to ascertain that addNamedExpression can be called. If returns `true`, doing [addNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addnamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // should return 'true' for this example, // it is possible to add named expression to global scope const isAddable = hfInstance.isItPossibleToAddNamedExpression('prettyName', '=Sheet1!$A$1+100'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | a name of the expression to be added | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | the expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### isItPossibleToChangeNamedExpression ▸ **isItPossibleToChangeNamedExpression**(`expressionName`: string, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:4078](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4078)* Returns information whether it is possible to change named expression in a specific scope. Checks against particular rules to ascertain that changeNamedExpression can be called. If returns `true`, doing [changeNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#changenamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); // should return 'true' for this example, // it is possible to change named expression const isAddable = hfInstance.isItPossibleToChangeNamedExpression('prettyName', '=Sheet1!$A$1+100'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | a new expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### isItPossibleToRemoveNamedExpression ▸ **isItPossibleToRemoveNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:4162](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4162)* Returns information whether it is possible to remove named expression from a specific scope. Checks against particular rules to ascertain that removeNamedExpression can be called. If returns `true`, doing [removeNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removenamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); // should return 'true' for this example, // it is possible to change named expression const isAddable = hfInstance.isItPossibleToRemoveNamedExpression('prettyName'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### listNamedExpressions ▸ **listNamedExpressions**(`scope?`: undefined | number): *string[]* *Defined in [src/HyperFormula.ts:4256](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4256)* Lists named expressions. - If scope parameter is provided, returns an array of expression names defined for this scope. - If scope parameter is undefined, returns an array of global expression names. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ['60'], ]); // add two named expressions and one scoped hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); hfInstance.addNamedExpression('anotherPrettyName', '=Sheet1!$A$2+100'); hfInstance.addNamedExpression('alsoPrettyName', '=Sheet1!$A$3+100', 0); // list the expressions, should return: ['prettyName', 'anotherPrettyName'] for this example const listOfExpressions = hfInstance.listNamedExpressions(); // list the expressions, should return: ['alsoPrettyName'] for this example const listOfExpressions = hfInstance.listNamedExpressions(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `scope?` | undefined | number | scope of the named expressions, `sheetId` for local scope or `undefined` for global scope | **Returns:** *string[]* ___ ### removeNamedExpression ▸ **removeNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:4207](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4207)* Removes a named expression. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [namedExpressionRemoved](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#namedexpressionremoved) after the expression was removed **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror.md) when the given expression does not exist. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // remove the named expression const changes = hfInstance.removeNamedExpression('prettyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Helpers ### calculateFormula ▸ **calculateFormula**(`formulaString`: string, `sheetId`: number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:4359](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4359)* Calculates fire-and-forget formula, returns the calculated value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type arguments is of wrong type. **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md) when the provided string is not a valid formula (i.e., doesn't start with `=`). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the provided `sheetID` doesn't exist. **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ Sheet1: [['58']], Sheet2: [['1', '2', '3'], ['4', '5', '6']] }); // returns the calculated formula's value // for this example, returns `68` const calculatedFormula = hfInstance.calculateFormula('=A1+10', 0); // for this example, returns [['11', '12', '13'], ['14', '15', '16']] const calculatedFormula = hfInstance.calculateFormula('=A1:B3+10', 1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | A formula in a proper format, starting with `=`. | `sheetId` | number | The ID of a sheet in context of which the formula gets evaluated. | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### getAvailableFunctions ▸ **getAvailableFunctions**(): *FunctionListEntry[]* *Defined in [src/HyperFormula.ts:4530](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4530)* Returns metadata of all functions available in this instance for a function picker, with names translated according to the language set in this instance's configuration. Each entry contains the translated name, the language-independent canonical name, the category, and a short description. Entries are sorted alphabetically by their localized name, using the collation rules of the host environment, so the exact order of names that differ only by case or diacritics may vary between hosts. The list reflects this instance's own registry: the built-in functions and any custom (user-registered) functions, plus their aliases. An alias is listed under its own id, borrowing its target's category and description, with the target id exposed as `aliasOf`. Custom functions ship no catalogue entry, so their `category` is `'Custom'` and they carry no `shortDescription` — with one exception: the catalogue is keyed by function id, so a custom plugin registered *over* a built-in id inherits that id's entry and is listed with the built-in's category and description. That registry is a snapshot taken when the instance was built, not a live view of the global one: a function registered with [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunctionplugin) or [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunction) afterwards reaches only the engines built later, so an engine kept across a late registration keeps reporting the set it was built with. A function with no translation entry for the configured language is omitted: the interpreter refuses to evaluate an untranslated id, so listing it would advertise a function that cannot be called — in practice, a custom plugin registered without translations for that language. A translation set to an empty string is not a missing entry: it falls back to the canonical id, so the function stays listed under its canonical name. **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // get the list of available functions, translated for the configured language const functions = hfInstance.getAvailableFunctions(); ``` **Returns:** *FunctionListEntry[]* ___ ### getCellDependents ▸ **getCellDependents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* *Defined in [src/HyperFormula.ts:3183](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3183)* Returns all the out-neighbors in the [dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md) for a given cell address or range. Including: - All cells with formulas that contain the given cell address or range - Some of the ranges that contain the given cell address or range The exact result depends on the optimizations applied by the HyperFormula to the dependency graph, some of which are described in the section ["Optimizations for large ranges"](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md#optimizations-for-large-ranges). The returned array includes also named expression dependents. They are represented as cell references with sheet ID `-1`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if address is not [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) or [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray( [ ['1', '=A1', '=A1+B1'] ] ); hfInstance.getCellDependents({ sheet: 0, col: 0, row: 0}); // returns [{ sheet: 0, col: 1, row: 0}, { sheet: 0, col: 2, row: 0}] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | object representation of an absolute address or range of addresses | **Returns:** *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* ___ ### getCellPrecedents ▸ **getCellPrecedents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* *Defined in [src/HyperFormula.ts:3221](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3221)* Returns all the in-neighbors in the [dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md) for a given cell address or range. In particular: - If the argument is a single cell, `getCellPrecedents()` returns all cells and ranges contained in that cell's formula. - If the argument is a range of cells, `getCellPrecedents()` returns some of the cell addresses and smaller ranges contained in that range (but not all of them). The exact result depends on the optimizations applied by the HyperFormula to the dependency graph, some of which are described in the section ["Optimizations for large ranges"](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md#optimizations-for-large-ranges). The returned array includes also named expression precedents. They are represented as cell references with sheet ID `-1`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if address is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray( [ ['1', '=A1', '=A1+B1'] ] ); hfInstance.getCellPrecedents({ sheet: 0, col: 2, row: 0}); // returns [{ sheet: 0, col: 0, row: 0}, { sheet: 0, col: 1, row: 0}] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | object representation of an absolute address or range of addresses | **Returns:** *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* ___ ### getFunctionDetails ▸ **getFunctionDetails**(`canonicalName`: string): *FunctionDetails | undefined* *Defined in [src/HyperFormula.ts:4575](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4575)* Returns the full metadata of a single function registered in this instance, with names translated according to the language set in this instance's configuration: the parameter list (with per-parameter optionality), the number of trailing parameters that repeat (`repeatLastArgs`), the category, a short description, and the documentation link (`documentationUrl`) and usage examples (`examples`) — every built-in authors both. Resolves both built-in and custom (user-registered) functions, as well as aliases. An alias reports its target's metadata (including examples, which spell the target's name) under the alias id, with the target id exposed as `aliasOf`. Returns `undefined` when the function id is unknown, not registered in this instance, or has no translation entry for the configured language (an untranslated id cannot be evaluated, so it is not described either, which keeps this method consistent with [getAvailableFunctions](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getavailablefunctions)). For a custom function, `category` is `'Custom'`, there is no `shortDescription`, `documentationUrl` or `examples`, and parameters are reported positionally (`Arg1`, `Arg2`, ...). A custom plugin registered over a built-in id is the exception: the catalogue is keyed by function id, so it reports that built-in's authored metadata alongside the parameter list of the implementation actually registered. `canonicalName` is matched exactly, in two ways worth knowing: - It is **case-sensitive**, unlike formula syntax. `'SUMIF'` resolves; `'sumif'` and `'SumIf'` return `undefined`, even though `=sumif(...)` evaluates. - It must be the **canonical (English) id, never a localized name**. `localizedName` is output only: under `plPL` this method reports `localizedName: 'SUMA.JEŻELI'` for `'SUMIF'`, but passing `'SUMA.JEŻELI'` back in returns `undefined`. To look up an entry from [getAvailableFunctions](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getavailablefunctions), pass its `canonicalName`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // get the details of the SUMIF function, translated for the configured language const details = hfInstance.getFunctionDetails('SUMIF'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `canonicalName` | string | the language-independent function id, e.g. `'SUMIF'` | **Returns:** *FunctionDetails | undefined* ___ ### getNamedExpressionsFromFormula ▸ **getNamedExpressionsFromFormula**(`formulaString`: string): *string[]* *Defined in [src/HyperFormula.ts:4390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4390)* Return a list of named expressions used by a formula. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type arguments is of wrong type. **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md) when the provided string is not a valid formula (i.e., doesn't start with `=`). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // returns a list of named expressions used by a formula // for this example, returns ['foo', 'bar'] const namedExpressions = hfInstance.getNamedExpressionsFromFormula('=foo+bar*2'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | A formula in a proper format, starting with `=`. | **Returns:** *string[]* ___ ### normalizeFormula ▸ **normalizeFormula**(`formulaString`: string): *string* *Defined in [src/HyperFormula.ts:4323](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4323)* Parses and then unparses a formula. Returns a normalized formula (e.g., restores the original capitalization of sheet names, function names, cell addresses, and named expressions). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md) when the provided string is not a valid formula, i.e., does not start with "=" **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ]); // returns '=Sheet1!$A$1+10' const normalizedFormula = hfInstance.normalizeFormula('=SHEET1!$A$1+10'); // returns '=3*$A$1' const normalizedFormula = hfInstance.normalizeFormula('=3*$a$1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | a formula in a proper format - it must start with "=" | **Returns:** *string* ___ ### numberToDate ▸ **numberToDate**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4629](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4629)* Interprets number as a date. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass the number of days since nullDate // the method should return formatted date, for this example: // {year: 2020, month: 1, day: 15} const dateFromNumber = hfInstance.numberToDate(43845); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | number of days since nullDate, should be non-negative, fractions are ignored. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### numberToDateTime ▸ **numberToDateTime**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4603](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4603)* Interprets number as a date + time. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass the number of days since nullDate // the method should return formatted date and time, for this example: // {year: 2020, month: 1, day: 15, hours: 2, minutes: 24, seconds: 0} const dateTimeFromNumber = hfInstance.numberToDateTime(43845.1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | number of days since nullDate, should be non-negative, fractions are interpreted as hours/minutes/seconds. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### numberToTime ▸ **numberToTime**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4654](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4654)* Interprets number as a time (hours/minutes/seconds). For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass a number to be interpreted as a time // should return {hours: 26, minutes: 24} for this example const timeFromNumber = hfInstance.numberToTime(1.1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | time in 24h units. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### simpleCellAddressFromString ▸ **simpleCellAddressFromString**(`cellAddress`: string, `contextSheetId`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | undefined* *Defined in [src/HyperFormula.ts:3024](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3024)* Computes the simple (absolute) address of a cell address, based on its string representation. - If a sheet name is present in the string representation but is not present in the engine, returns `undefined`. - If no sheet name is present in the string representation, uses `contextSheetId` as a sheet id in the returned address. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 // returns { sheet: 42, col: 0, row: 0 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('A1', 42); // returns { sheet: 0, col: 0, row: 5 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet0!A6', 42); // returns { sheet: 0, col: 0, row: 5 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet0!$A$6', 42); // returns 'undefined', as there's no 'Sheet 2' in the HyperFormula instance const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet2!A6', 42); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | string | string representation of cell address in A1 notation | `contextSheetId` | number | sheet id used to construct the simple address in case of missing sheet name in `cellAddress` argument | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | undefined* ___ ### simpleCellAddressToString ▸ **simpleCellAddressToString**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `optionsOrContextSheetId`: object | number): *undefined | string* *Defined in [src/HyperFormula.ts:3093](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3093)* Computes string representation of an absolute address in A1 notation. If `cellAddress.sheet` is not present in the engine, returns `undefined`. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if its arguments are of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 const addr = { sheet: 0, col: 1, row: 1 }; // should return 'B2' const A1Notation = hfInstance.simpleCellAddressToString(addr); // should return 'B2' const A1Notation = hfInstance.simpleCellAddressToString(addr, { includeSheetName: false }); // should return 'Sheet0!B2' const A1Notation = hfInstance.simpleCellAddressToString(addr, { includeSheetName: true }); // should return 'B2' as context sheet id is the same as addr.sheet const A1Notation = hfInstance.simpleCellAddressToString(addr, 0); // should return 'Sheet0!B2' as context sheet id is different from addr.sheet const A1Notation = hfInstance.simpleCellAddressToString(addr, 42); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | - | object representation of an absolute address | `optionsOrContextSheetId` | object | number | {} | options object or number used as context sheet id to construct the string address (see examples) | **Returns:** *undefined | string* ___ ### simpleCellRangeFromString ▸ **simpleCellRangeFromString**(`cellRange`: string, `contextSheetId`: number): *[SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | undefined* *Defined in [src/HyperFormula.ts:3053](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3053)* Computes simple (absolute) address of a cell range based on its string representation. If sheet name is present in string representation but not present in the engine, returns `undefined`. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 // should return { start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 0 } } const simpleCellAddress = hfInstance.simpleCellRangeFromString('A1:A2', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellRange` | string | string representation of cell range in A1 notation | `contextSheetId` | number | sheet id used to construct the simple address in case of missing sheet name in `cellRange` argument | **Returns:** *[SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | undefined* ___ ### simpleCellRangeToString ▸ **simpleCellRangeToString**(`cellRange`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `optionsOrContextSheetId`: object | number): *string | undefined* *Defined in [src/HyperFormula.ts:3146](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3146)* Computes string representation of an absolute range in A1 notation. Returns `undefined` if: - `cellRange` is not a valid range, - `cellRange.start.sheet` and `cellRange.start.end` are different, - `cellRange.start.sheet` is not present in the engine, - `cellRange.start.end` is not present in the engine. Note: This method is useful only for cell ranges; does not work with column ranges and row ranges. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if its arguments are of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 const range = { start: { sheet: 0, col: 1, row: 1 }, end: { sheet: 0, col: 2, row: 1 } }; // should return 'B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range); // should return 'B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range, { includeSheetName: false }); // should return 'Sheet0!B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range, { includeSheetName: true }); // should return 'B2:C2' as context sheet id is the same as range.start.sheet and range.end.sheet const A1Notation = hfInstance.simpleCellRangeToString(range, 0); // should return 'Sheet0!B2:C2' as context sheet id is different from range.start.sheet and range.end.sheet const A1Notation = hfInstance.simpleCellRangeToString(range, 42); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `cellRange` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | object representation of an absolute range | `optionsOrContextSheetId` | object | number | {} | options object or number used as context sheet id to construct the string address (see examples) | **Returns:** *string | undefined* ___ ### validateFormula ▸ **validateFormula**(`formulaString`: string): *boolean* *Defined in [src/HyperFormula.ts:4424](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4424)* Validates the formula. If the provided string starts with "=" and is a parsable formula, the method returns `true`. The validation is purely grammatical: the method doesn't verify if the formula can be calculated or not. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js // checks if the given string is a valid formula, should return 'true' for this example const isFormula = hfInstance.validateFormula('=SUM(1, 2)'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | a formula in a proper format - it must start with "=" | **Returns:** *boolean* ___ ## Clipboard ### clearClipboard ▸ **clearClipboard**(): *void* *Defined in [src/HyperFormula.ts:2494](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2494)* Clears the clipboard content. **`example`** ```js // clears the clipboard, isClipboardEmpty() should return true if called afterwards hfInstance.clearClipboard(); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Returns:** *void* ___ ### copy ▸ **copy**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2354](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2354)* Stores a copy of the cell block in internal clipboard for the further paste. Returns the copied values for use in external clipboard. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // it copies [ [ 2 ] ] const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangle range to copy | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### cut ▸ **cut**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2394](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2394)* Stores information of the cell block in internal clipboard for further paste. Calling [paste](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) right after this method is equivalent to call [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecells). Almost any CRUD operation called after this method will abort the cut operation. Returns the cut values for use in external clipboard. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // returns the values that were cut: [ [ 1 ] ] const clipboardContent = hfInstance.cut({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 0, row: 0 }, }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangle range to cut | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### isClipboardEmpty ▸ **isClipboardEmpty**(): *boolean* *Defined in [src/HyperFormula.ts:2477](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2477)* Returns information whether there is something in the clipboard. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // copy desired content const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); // returns 'false', there is content in the clipboard const isClipboardEmpty = hfInstance.isClipboardEmpty(); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Returns:** *boolean* ___ ### paste ▸ **paste**(`targetLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2445](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2445)* When called after [copy](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#copy) it pastes copied values and formulas into a cell block. When called after [cut](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#cut) it performs [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecells) operation into the cell block. Does nothing if the clipboard is empty. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md) when the evaluation is suspended **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md) when performing this operation would result in sheet size limits exceeding **`throws`** [NothingToPasteError](https://hyperformula.handsontable.com/docs/api/classes/nothingtopasteerror.md) when clipboard is empty **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md) when the selected target area has array inside **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if targetLeftCorner is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // [ [ 2 ] ] was copied const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); // returns a list of modified cells: their absolute addresses and new values const changes = hfInstance.paste({ sheet: 0, col: 1, row: 0 }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `targetLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Undo and Redo ### clearRedoStack ▸ **clearRedoStack**(): *void* *Defined in [src/HyperFormula.ts:2524](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2524)* Clears the redo stack in undoRedo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // do an operation, for example remove columns hfInstance.removeColumns(0, [0, 1]); // undo the operation hfInstance.undo(); // redo the operation hfInstance.redo(); // clear the redo stack hfInstance.clearRedoStack(); ``` **Returns:** *void* ___ ### clearUndoStack ▸ **clearUndoStack**(): *void* *Defined in [src/HyperFormula.ts:2551](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2551)* Clears the undo stack in undoRedo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // do an operation, for example remove columns hfInstance.removeColumns(0, [0, 1]); // undo the operation hfInstance.undo(); // clear the undo stack hfInstance.clearUndoStack(); ``` **Returns:** *void* ___ ### isThereSomethingToRedo ▸ **isThereSomethingToRedo**(): *boolean* *Defined in [src/HyperFormula.ts:1324](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1324)* Checks if there is at least one operation that can be re-done. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js hfInstance.undo(); // when there is an action to redo, this returns 'true' const isSomethingToRedo = hfInstance.isThereSomethingToRedo(); ``` **Returns:** *boolean* ___ ### isThereSomethingToUndo ▸ **isThereSomethingToUndo**(): *boolean* *Defined in [src/HyperFormula.ts:1305](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1305)* Checks if there is at least one operation that can be undone. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ['3'], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // should return 'true', it is possible to undo last operation // which is removing rows in this example const isSomethingToUndo = hfInstance.isThereSomethingToUndo(); ``` **Returns:** *boolean* ___ ### redo ▸ **redo**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1277](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1277)* Re-do recently undone operation. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoOperationToRedoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoredoerror.md) when there is no operation running that can be re-done **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ['3'], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // undo the operation, it should return previous values: [['1'], ['2'], ['3']] hfInstance.undo(); // do a redo, it should return the values after removing the second row: [['1'], ['3']] const changes = hfInstance.redo(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### undo ▸ **undo**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1239](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1239)* Undo the previous operation. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoOperationToUndoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoundoerror.md) when there is no operation running that can be undone **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ['3', ''], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // undo the operation, it should return the changes const changes = hfInstance.undo(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Batch ### batch ▸ **batch**(`batchOperations`: function): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3714](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3714)* Runs the provided callback as a single [batch operation](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) and returns the changed cells. Returns [an array of cells whose values changed as a result of all batched operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`fires`** [evaluationSuspended](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationsuspended) always **`fires`** [evaluationResumed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationresumed) after the recomputation of necessary values **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // multiple operations in a single callback will trigger evaluation only once // and only one set of changes is returned as a combined result of all // the operations that were triggered within the callback const changes = hfInstance.batch(() => { hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setCellContents({ col: 4, row: 0, sheet: 0 }, [['=A1']]); }); ``` **Parameters:** ▪ **batchOperations**: *function* a function with operations to be performed ▸ (): *void* **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isEvaluationSuspended ▸ **isEvaluationSuspended**(): *boolean* *Defined in [src/HyperFormula.ts:3823](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3823)* Checks if the dependency graph recalculation process is [suspended](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) or not. **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // suspend the evaluation hfInstance.suspendEvaluation(); // between suspendEvaluation() and resumeEvaluation() // or inside batch() callback it will return 'true', otherwise 'false' const isEvaluationSuspended = hfInstance.isEvaluationSuspended(); const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *boolean* ___ ### resumeEvaluation ▸ **resumeEvaluation**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3797](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3797)* Resumes the dependency graph recalculation that was [suspended](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) with [suspendEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#suspendevaluation). It also triggers the recalculation and returns [an array of cells whose values changed as a result of all batched operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`fires`** [evaluationResumed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationresumed) after the recomputation of necessary values **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // similar to batch() but operations are not within a callback, // one method suspends the recalculation // the second will resume calculations and return the changes // first, suspend the evaluation hfInstance.suspendEvaluation(); // perform operations hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setSheetContent(1, [['50'], ['60']]); // resume the evaluation const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### suspendEvaluation ▸ **suspendEvaluation**(): *void* *Defined in [src/HyperFormula.ts:3761](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3761)* Suspends the dependency graph recalculation to start a [batch operation](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). It allows optimizing the performance. With this method, multiple CRUD operations can be done without triggering recalculation after every operation. Suspending evaluation should result in an overall faster calculation compared to recalculating after each operation separately. To resume the evaluation use [resumeEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#resumeevaluation). **`fires`** [evaluationSuspended](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationsuspended) always **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // similar to batch() but operations are not within a callback, // one method suspends the recalculation // the second will resume calculations and return the changes // suspend the evaluation with this method hfInstance.suspendEvaluation(); // perform operations hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setSheetContent(1, [['50'], ['60']]); // use resumeEvaluation to resume const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *void* ___ ## Events ### off ▸ **off**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4740](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4740)* Unsubscribes from an event or from all events. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // define a simple function to be called upon emitting an event const handler = ( ) => { console.log('baz') } // subscribe to a 'sheetAdded', pass the handler hfInstance.on('sheetAdded', handler); // add a sheet to trigger an event, // console should print 'baz' each time a sheet is added hfInstance.addSheet('FooBar'); // unsubscribe from a 'sheetAdded' hfInstance.off('sheetAdded', handler); // add a sheet, the console should not print anything hfInstance.addSheet('FooBaz'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ### on ▸ **on**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4680](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4680)* Subscribes to an event. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // subscribe to a 'sheetAdded', pass a simple handler hfInstance.on('sheetAdded', ( ) => { console.log('foo') }); // add a sheet to trigger an event, // console should print 'foo' after each time sheet is added in this example hfInstance.addSheet('FooBar'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ### once ▸ **once**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4706](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4706)* Subscribes to an event once. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // subscribe to a 'sheetAdded', pass a simple handler hfInstance.once('sheetAdded', ( ) => { console.log('foo') }); // call addSheet twice, // console should print 'foo' only once when the sheet is added in this example hfInstance.addSheet('FooBar'); hfInstance.addSheet('FooBaz'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ## Custom Functions ### getAllFunctionPlugins ▸ **getAllFunctionPlugins**(): *FunctionPluginDefinition[]* *Defined in [src/HyperFormula.ts:4493](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4493)* Returns classes of all plugins registered in this instance of HyperFormula **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // return classes of all plugins registered, assign to a variable const allNames = hfInstance.getAllFunctionPlugins(); ``` **Returns:** *FunctionPluginDefinition[]* ___ ### getFunctionPlugin ▸ **getFunctionPlugin**(`functionId`: string): *FunctionPluginDefinition | undefined* *Defined in [src/HyperFormula.ts:4475](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4475)* Returns class of a plugin used by function with given id For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; const hfInstance = HyperFormula.buildEmpty(); // register a plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); // get the plugin const myPlugin = hfInstance.getFunctionPlugin('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | id of a function, e.g., 'SUMIF' | **Returns:** *FunctionPluginDefinition | undefined* ___ ### getRegisteredFunctionNames ▸ **getRegisteredFunctionNames**(): *string[]* *Defined in [src/HyperFormula.ts:4445](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4445)* Returns translated names of all functions registered in this instance of HyperFormula according to the language set in the configuration **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // return translated names of all functions, assign to a variable const allNames = hfInstance.getRegisteredFunctionNames(); ``` **Returns:** *string[]* ___ ## Static Methods ### getAllFunctionPlugins ▸ **getAllFunctionPlugins**(): *FunctionPluginDefinition[]* *Defined in [src/HyperFormula.ts:652](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L652)* Returns classes of all plugins registered in HyperFormula. **`example`** ```js // return classes of all plugins const allClasses = HyperFormula.getAllFunctionPlugins(); ``` **Returns:** *FunctionPluginDefinition[]* ___ ### getFunctionPlugin ▸ **getFunctionPlugin**(`functionId`: string): *FunctionPluginDefinition | undefined* *Defined in [src/HyperFormula.ts:636](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L636)* Returns class of a plugin used by function with given id For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); // return the class of a given plugin const myFunctionClass = HyperFormula.getFunctionPlugin('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | id of a function, e.g., 'SUMIF' | **Returns:** *FunctionPluginDefinition | undefined* ___ ### getLanguage ▸ **getLanguage**(`languageCode`: string): *TranslationPackage* *Defined in [src/HyperFormula.ts:375](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L375)* Returns registered language from its code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror.md) when trying to retrieve not registered language **`example`** ```js // return registered language const language = HyperFormula.getLanguage('enGB'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | **Returns:** *TranslationPackage* ___ ### getRegisteredFunctionNames ▸ **getRegisteredFunctionNames**(`code`: string): *string[]* *Defined in [src/HyperFormula.ts:606](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L606)* Returns translated names of all registered functions for a given language **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js // return a list of function names registered for enGB const allNames = HyperFormula.getRegisteredFunctionNames('enGB'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `code` | string | language code | **Returns:** *string[]* ___ ### getRegisteredLanguagesCodes ▸ **getRegisteredLanguagesCodes**(): *string[]* *Defined in [src/HyperFormula.ts:456](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L456)* Returns all registered languages codes. **`example`** ```js // should return all registered language codes: ['enGB', 'plPL'] const registeredLanguages = HyperFormula.getRegisteredLanguagesCodes(); ``` **Returns:** *string[]* ___ ### registerFunction ▸ **registerFunction**(`functionId`: string, `plugin`: FunctionPluginDefinition, `translations?`: FunctionTranslationsPackage): *void* *Defined in [src/HyperFormula.ts:540](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L540)* Registers a function with a given id if such exists in a plugin. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md) when function with a given id does not exist in plugin or plugin class definition is not consistent with metadata **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md) when trying to register translation for protected function **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a function HyperFormula.registerFunction('EXAMPLE', MyExamplePlugin); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | function id, e.g., 'SUMIF' | `plugin` | FunctionPluginDefinition | plugin class | `translations?` | FunctionTranslationsPackage | translations for the function name | **Returns:** *void* ___ ### registerFunctionPlugin ▸ **registerFunctionPlugin**(`plugin`: FunctionPluginDefinition, `translations?`: FunctionTranslationsPackage): *void* *Defined in [src/HyperFormula.ts:486](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L486)* Registers all functions in a given plugin with optional translations. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: FunctionPlugins must be registered prior to the creation of HyperFormula instances in which they are used. HyperFormula instances created prior to the registration of a FunctionPlugin are unable to access the FunctionPlugin. Registering a FunctionPlugin with [[custom-functions]] requires the translations parameter. **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md) when plugin class definition is not consistent with metadata **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md) when trying to register translation for protected function **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register the plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `plugin` | FunctionPluginDefinition | plugin class | `translations?` | FunctionTranslationsPackage | optional package of function names translations | **Returns:** *void* ___ ### registerLanguage ▸ **registerLanguage**(`languageCode`: string, `languagePackage`: RawTranslationPackage): *void* *Defined in [src/HyperFormula.ts:406](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L406)* Registers language under given code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md) when trying to register translation for protected function **`throws`** [LanguageAlreadyRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagealreadyregisterederror.md) when given language is already registered **`example`** ```js // return registered language HyperFormula.registerLanguage('enUS', enUS); const engine = HyperFormula.buildEmpty({language: 'enUS'}); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | `languagePackage` | RawTranslationPackage | translation package to be registered | **Returns:** *void* ___ ### unregisterAllFunctions ▸ **unregisterAllFunctions**(): *void* *Defined in [src/HyperFormula.ts:587](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L587)* Clears function registry. Note: This method does not affect the existing HyperFormula instances. **`example`** ```js HyperFormula.unregisterAllFunctions(); ``` **Returns:** *void* ___ ### unregisterFunction ▸ **unregisterFunction**(`functionId`: string): *void* *Defined in [src/HyperFormula.ts:570](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L570)* Unregisters a function with a given id. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a function HyperFormula.registerFunction('EXAMPLE', MyExamplePlugin); // unregister a function HyperFormula.unregisterFunction('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | function id, e.g., 'SUMIF' | **Returns:** *void* ___ ### unregisterFunctionPlugin ▸ **unregisterFunctionPlugin**(`plugin`: FunctionPluginDefinition): *void* *Defined in [src/HyperFormula.ts:510](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L510)* Unregisters all functions defined in given plugin. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`example`** ```js // get the class of a plugin const registeredPluginClass = HyperFormula.getFunctionPlugin('EXAMPLE'); // unregister all functions defined in a plugin of ID 'EXAMPLE' HyperFormula.unregisterFunctionPlugin(registeredPluginClass); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `plugin` | FunctionPluginDefinition | plugin class | **Returns:** *void* ___ ### unregisterLanguage ▸ **unregisterLanguage**(`languageCode`: string): *void* *Defined in [src/HyperFormula.ts:436](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L436)* Unregisters language that is registered under given code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md) if any of its basic type argument is of wrong type **`throws`** [LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror.md) when given language is not registered **`example`** ```js // register the language for the instance HyperFormula.registerLanguage('plPL', plPL); // unregister plPL HyperFormula.unregisterLanguage('plPL'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | **Returns:** *void* --- ## HyperFormulaNS URL: https://hyperformula.handsontable.com/docs/api/classes/hyperformulans # HyperFormulaNS Aggregate class for default export ## Other ### ArraySize ▪ **ArraySize**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* = ArraySize *Defined in [src/index.ts:79](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L79)* ___ ### CellError ▪ **CellError**: *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* = CellError *Defined in [src/index.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L67)* ___ ### CellType ▪ **CellType**: *[CellType](https://hyperformula.handsontable.com/docs/api/enums/celltype.md)* = CellType *Defined in [src/index.ts:68](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L68)* ___ ### CellValueDetailedType ▪ **CellValueDetailedType**: *object* = CellValueDetailedType *Defined in [src/index.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L70)* #### Type declaration: ___ ### CellValueType ▪ **CellValueType**: *object* = CellValueType *Defined in [src/index.ts:69](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L69)* #### Type declaration: ___ ### ConfigValueTooBigError ▪ **ConfigValueTooBigError**: *[ConfigValueTooBigError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoobigerror.md)* = ConfigValueTooBigError *Defined in [src/index.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L74)* ___ ### ConfigValueTooSmallError ▪ **ConfigValueTooSmallError**: *[ConfigValueTooSmallError](https://hyperformula.handsontable.com/docs/api/classes/configvaluetoosmallerror.md)* = ConfigValueTooSmallError *Defined in [src/index.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L75)* ___ ### DetailedCellError ▪ **DetailedCellError**: *[DetailedCellError](https://hyperformula.handsontable.com/docs/api/classes/detailedcellerror.md)* = DetailedCellError *Defined in [src/index.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L71)* ___ ### EmptyValue ▪ **EmptyValue**: *symbol* = EmptyValue *Defined in [src/index.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L81)* ___ ### ErrorType ▪ **ErrorType**: *[ErrorType](https://hyperformula.handsontable.com/docs/api/enums/errortype.md)* = ErrorType *Defined in [src/index.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L66)* ___ ### EvaluationSuspendedError ▪ **EvaluationSuspendedError**: *[EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md)* = EvaluationSuspendedError *Defined in [src/index.ts:76](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L76)* ___ ### ExpectedOneOfValuesError ▪ **ExpectedOneOfValuesError**: *[ExpectedOneOfValuesError](https://hyperformula.handsontable.com/docs/api/classes/expectedoneofvalueserror.md)* = ExpectedOneOfValuesError *Defined in [src/index.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L77)* ___ ### ExpectedValueOfTypeError ▪ **ExpectedValueOfTypeError**: *[ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md)* = ExpectedValueOfTypeError *Defined in [src/index.ts:78](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L78)* ___ ### ExportedCellChange ▪ **ExportedCellChange**: *[ExportedCellChange](https://hyperformula.handsontable.com/docs/api/classes/exportedcellchange.md)* = ExportedCellChange *Defined in [src/index.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L72)* ___ ### ExportedNamedExpressionChange ▪ **ExportedNamedExpressionChange**: *[ExportedNamedExpressionChange](https://hyperformula.handsontable.com/docs/api/classes/exportednamedexpressionchange.md)* = ExportedNamedExpressionChange *Defined in [src/index.ts:73](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L73)* ___ ### FunctionArgumentType ▪ **FunctionArgumentType**: *FunctionArgumentType* = FunctionArgumentType *Defined in [src/index.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L83)* ___ ### FunctionPlugin ▪ **FunctionPlugin**: *FunctionPlugin* = FunctionPlugin *Defined in [src/index.ts:82](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L82)* ___ ### FunctionPluginValidationError ▪ **FunctionPluginValidationError**: *[FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/functionpluginvalidationerror.md)* = FunctionPluginValidationError *Defined in [src/index.ts:84](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L84)* ___ ### HyperFormula ▪ **HyperFormula**: *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* = HyperFormula *Defined in [src/index.ts:65](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L65)* ___ ### InvalidAddressError ▪ **InvalidAddressError**: *[InvalidAddressError](https://hyperformula.handsontable.com/docs/api/classes/invalidaddresserror.md)* = InvalidAddressError *Defined in [src/index.ts:85](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L85)* ___ ### InvalidArgumentsError ▪ **InvalidArgumentsError**: *[InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md)* = InvalidArgumentsError *Defined in [src/index.ts:86](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L86)* ___ ### LanguageAlreadyRegisteredError ▪ **LanguageAlreadyRegisteredError**: *[LanguageAlreadyRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagealreadyregisterederror.md)* = LanguageAlreadyRegisteredError *Defined in [src/index.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L88)* ___ ### LanguageNotRegisteredError ▪ **LanguageNotRegisteredError**: *[LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror.md)* = LanguageNotRegisteredError *Defined in [src/index.ts:87](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L87)* ___ ### MissingTranslationError ▪ **MissingTranslationError**: *[MissingTranslationError](https://hyperformula.handsontable.com/docs/api/classes/missingtranslationerror.md)* = MissingTranslationError *Defined in [src/index.ts:89](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L89)* ___ ### NamedExpressionDoesNotExistError ▪ **NamedExpressionDoesNotExistError**: *[NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror.md)* = NamedExpressionDoesNotExistError *Defined in [src/index.ts:90](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L90)* ___ ### NamedExpressionNameIsAlreadyTakenError ▪ **NamedExpressionNameIsAlreadyTakenError**: *[NamedExpressionNameIsAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisalreadytakenerror.md)* = NamedExpressionNameIsAlreadyTakenError *Defined in [src/index.ts:91](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L91)* ___ ### NamedExpressionNameIsInvalidError ▪ **NamedExpressionNameIsInvalidError**: *[NamedExpressionNameIsInvalidError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisinvaliderror.md)* = NamedExpressionNameIsInvalidError *Defined in [src/index.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L92)* ___ ### NoOperationToRedoError ▪ **NoOperationToRedoError**: *[NoOperationToRedoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoredoerror.md)* = NoOperationToRedoError *Defined in [src/index.ts:93](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L93)* ___ ### NoOperationToUndoError ▪ **NoOperationToUndoError**: *[NoOperationToUndoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoundoerror.md)* = NoOperationToUndoError *Defined in [src/index.ts:94](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L94)* ___ ### NoRelativeAddressesAllowedError ▪ **NoRelativeAddressesAllowedError**: *[NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror.md)* = NoRelativeAddressesAllowedError *Defined in [src/index.ts:95](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L95)* ___ ### NoSheetWithIdError ▪ **NoSheetWithIdError**: *[NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md)* = NoSheetWithIdError *Defined in [src/index.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L96)* ___ ### NoSheetWithNameError ▪ **NoSheetWithNameError**: *[NoSheetWithNameError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithnameerror.md)* = NoSheetWithNameError *Defined in [src/index.ts:97](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L97)* ___ ### NotAFormulaError ▪ **NotAFormulaError**: *[NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md)* = NotAFormulaError *Defined in [src/index.ts:98](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L98)* ___ ### NothingToPasteError ▪ **NothingToPasteError**: *[NothingToPasteError](https://hyperformula.handsontable.com/docs/api/classes/nothingtopasteerror.md)* = NothingToPasteError *Defined in [src/index.ts:99](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L99)* ___ ### ProtectedFunctionTranslationError ▪ **ProtectedFunctionTranslationError**: *[ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md)* = ProtectedFunctionTranslationError *Defined in [src/index.ts:100](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L100)* ___ ### SheetNameAlreadyTakenError ▪ **SheetNameAlreadyTakenError**: *[SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror.md)* = SheetNameAlreadyTakenError *Defined in [src/index.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L101)* ___ ### SheetSizeLimitExceededError ▪ **SheetSizeLimitExceededError**: *[SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md)* = SheetSizeLimitExceededError *Defined in [src/index.ts:102](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L102)* ___ ### SimpleRangeValue ▪ **SimpleRangeValue**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* = SimpleRangeValue *Defined in [src/index.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L80)* ___ ### SourceLocationHasArrayError ▪ **SourceLocationHasArrayError**: *[SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md)* = SourceLocationHasArrayError *Defined in [src/index.ts:103](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L103)* ___ ### TargetLocationHasArrayError ▪ **TargetLocationHasArrayError**: *[TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md)* = TargetLocationHasArrayError *Defined in [src/index.ts:104](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L104)* ___ ### UnableToParseError ▪ **UnableToParseError**: *[UnableToParseError](https://hyperformula.handsontable.com/docs/api/classes/unabletoparseerror.md)* = UnableToParseError *Defined in [src/index.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L105)* ___ ## Static Properties ### buildDate ▪ **buildDate**: *string* = process.env.HT_BUILD_DATE as string *Defined in [src/HyperFormula.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L105)* Latest build date. ___ ### languages ▪ **languages**: *Record‹string, RawTranslationPackage›* *Defined in [src/HyperFormula.ts:121](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L121)* When using the UMD build, this property contains all available languages to use with the [registerLanguage](#registerlanguage) method. For more information, see the [Localizing functions](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md) guide. ___ ### releaseDate ▪ **releaseDate**: *string* = process.env.HT_RELEASE_DATE as string *Defined in [src/HyperFormula.ts:112](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L112)* A release date. ___ ### version ▪ **version**: *string* = process.env.HT_VERSION as string *Defined in [src/HyperFormula.ts:98](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L98)* Version of the HyperFormula. ## Static Accessors ### defaultConfig • **get defaultConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/HyperFormula.ts:160](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L160)* Returns all of HyperFormula's default [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`example`** ```js // returns all default configuration options const defaultConfig = HyperFormula.defaultConfig; ``` **`category`** Static Accessors **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ## Factories ### buildEmpty ▸ **buildEmpty**(`configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:353](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L353)* Builds an empty engine instance. Can be configured with the optional parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified the engine will be built with the default configuration. **`example`** ```js const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // build with no initial data and with optional config parameter maxColumns const hfInstance = HyperFormula.buildEmpty({ maxColumns: 1000 }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ### buildFromArray ▸ **buildFromArray**(`sheet`: [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:279](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L279)* Builds the engine for a sheet from a two-dimensional array representation. The engine is created with a single sheet. Can be configured with the optional second parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified, the engine will be built with the default configuration. **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when sheet size exceeds the limits **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when sheet is not an array of arrays **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-functionpluginvalidationerror) when plugin class definition is not consistent with metadata **`example`** ```js // data represented as an array const sheetData = [ ['0', '=SUM(1, 2, 3)', '52'], ['=SUM(A1:C1)', '', '=A1'], ['2', '=SUM(A1:C1)', '=theUltimateQuestionOfLife'], ]; const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // method with optional config parameter maxColumns const hfInstance = HyperFormula.buildFromArray(sheetData, { maxColumns: 1000 }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `sheet` | [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) | - | two-dimensional array representation of sheet | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ### buildFromSheets ▸ **buildFromSheets**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets), `configInput`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `namedExpressions`: [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]): *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* *Defined in [src/HyperFormula.ts:326](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L326)* Builds the engine from an object containing multiple sheets with names. The engine is created with one or more sheets. Can be configured with the optional second parameter that represents a [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). If not specified the engine will be built with the default configuration. **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when sheet size exceeds the limits **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when any sheet is not an array of arrays **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-functionpluginvalidationerror) when plugin class definition is not consistent with metadata **`example`** ```js // data represented as an object with sheets: Sheet1 and Sheet2 const sheetData = { 'Sheet1': [ ['1', '', '=Sheet2!$A1'], ['', '2', '=SUM(1, 2, 3)'], ['=Sheet2!$A2', '2', ''], ], 'Sheet2': [ ['', '4', '=Sheet1!$B1'], ['', '8', '=SUM(9, 3, 3)'], ['=Sheet1!$B1', '2', '=theUltimateQuestionOfLife'], ], }; const namedExpressions = [ { name: 'theUltimateQuestionOfLife', expression: '=42', }, ]; // method with optional config parameter useColumnIndex const hfInstance = HyperFormula.buildFromSheets(sheetData, { useColumnIndex: true }, namedExpressions); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | - | object with sheets definition | `configInput` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | engine configuration | `namedExpressions` | [SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[] | [] | starting named expressions | **Returns:** *[HyperFormula](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md)* ___ ## Instance ### destroy ▸ **destroy**(): *void* *Defined in [src/HyperFormula.ts:4755](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4755)* Destroys instance of HyperFormula. **`example`** ```js // destroys the instance hfInstance.destroy(); ``` **Returns:** *void* ___ ### getConfig ▸ **getConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/HyperFormula.ts:1180](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1180)* Returns current configuration of the engine instance. For more information, see the [Configuration options guide](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`example`** ```js // should return all config metadata including default and those which were added const hfConfig = hfInstance.getConfig(); ``` **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ___ ### rebuildAndRecalculate ▸ **rebuildAndRecalculate**(): *void* *Defined in [src/HyperFormula.ts:1194](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1194)* Rebuilds the HyperFormula instance preserving the current sheets data. **`example`** ```js hfInstance.rebuildAndRecalculate(); ``` **Returns:** *void* ___ ### updateConfig ▸ **updateConfig**(`newParams`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›): *void* *Defined in [src/HyperFormula.ts:1157](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1157)* Updates the config with given new metadata. It is an expensive operation, as it might trigger rebuilding the engine and recalculation of all formulas. For more information, see the [Configuration options guide](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) when some parameters of config are of wrong type (e.g., currencySymbol) **`throws`** [ConfigValueEmpty](https://hyperformula.handsontable.com/docs/api/classes/configvalueempty.md) when some parameters of config are of invalid value (e.g., currencySymbol) **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // add a config param, for example maxColumns, // you can check the configuration with getConfig method hfInstance.updateConfig({ maxColumns: 1000 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `newParams` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | configuration options to be updated or added | **Returns:** *void* ___ ## Sheets ### addSheet ▸ **addSheet**(`sheetName?`: undefined | string): *string* *Defined in [src/HyperFormula.ts:2771](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2771)* Adds a new sheet to the HyperFormula instance. Returns given or autogenerated name of a new sheet. Note that this method may trigger dependency graph recalculation. **`fires`** [sheetAdded](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetadded) after the sheet was added **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetnamealreadytakenerror) when sheet with a given name already exists **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'MySheet3' const nameProvided = hfInstance.addSheet('MySheet3'); // should return autogenerated 'Sheet4' // because no name was provided and 3 other ones already exist const generatedName = hfInstance.addSheet(); ``` **Parameters:** Name | Type | ------ | ------ | `sheetName?` | undefined | string | **Returns:** *string* ___ ### clearSheet ▸ **clearSheet**(`sheetId`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2919](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2919)* Clears the sheet content. Double-checks if the sheet exists. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: 0, // }] const changes = hfInstance.clearSheet(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### countSheets ▸ **countSheets**(): *number* *Defined in [src/HyperFormula.ts:3608](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3608)* Returns the number of existing sheets. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return the number of sheets which is '1' const sheetsCount = hfInstance.countSheets(); ``` **Returns:** *number* ___ ### doesSheetExist ▸ **doesSheetExist**(`sheetName`: string): *boolean* *Defined in [src/HyperFormula.ts:3327](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3327)* Returns `true` whether sheet with a given name exists. The method accepts sheet name to be checked. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' since 'MySheet1' exists const sheetExist = hfInstance.doesSheetExist('MySheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | name of the sheet, case-insensitive. | **Returns:** *boolean* ___ ### getAllSheetsDimensions ▸ **getAllSheetsDimensions**(): *Record‹string, [SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)›* *Defined in [src/HyperFormula.ts:1033](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1033)* Returns a map containing dimensions of all sheets for the engine instance represented as a key-value pairs where keys are sheet IDs and dimensions are returned as numbers, width and height respectively. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ Sheet1: [ ['1', '2', '=Sheet2!$A1'], ], Sheet2: [ ['3'], ['4'], ], }); // should return the dimensions of all sheets: // { Sheet1: { width: 3, height: 1 }, Sheet2: { width: 1, height: 2 } } const allSheetsDimensions = hfInstance.getAllSheetsDimensions(); ``` **Returns:** *Record‹string, [SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)›* ___ ### getAllSheetsFormulas ▸ **getAllSheetsFormulas**(): *Record‹string, (string | undefined)[][]›* *Defined in [src/HyperFormula.ts:1104](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1104)* Returns formulas of all sheets in a form of an object which property keys are strings and values are 2D arrays of strings or possibly `undefined` when the call does not contain a formula. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=A1+10'], ]); // should return only formulas: { Sheet1: [ [ undefined, undefined, '=A1+10' ] ] } const allSheetsFormulas = hfInstance.getAllSheetsFormulas(); ``` **Returns:** *Record‹string, (string | undefined)[][]›* ___ ### getAllSheetsSerialized ▸ **getAllSheetsSerialized**(): *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* *Defined in [src/HyperFormula.ts:1129](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1129)* Returns formulas or values of all sheets in a form of an object which property keys are strings and values are 2D arrays of [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent). Each non-formula cell is serialized to the exact value it was set with, preserving its type. For example, a cell set with the string `'1'` is serialized as the string `'1'`, while a cell set with the number `1` is serialized as the number `1`. **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', 2, '=A1+10'], ]); // should return all sheets serialized content: { Sheet1: [ [ '1', 2, '=A1+10' ] ] } // note: the string '1' stays a string and the number 2 stays a number const allSheetsSerialized = hfInstance.getAllSheetsSerialized(); ``` **Returns:** *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* ___ ### getAllSheetsValues ▸ **getAllSheetsValues**(): *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* *Defined in [src/HyperFormula.ts:1085](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1085)* Returns values of all sheets in a form of an object which property keys are strings and values are 2D arrays of [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue). **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '=A1+10', '3'], ]); // should return all sheets values: { Sheet1: [ [ 1, 11, 3 ] ] } const allSheetsValues = hfInstance.getAllSheetsValues(); ``` **Returns:** *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* ___ ### getSheetDimensions ▸ **getSheetDimensions**(`sheetId`: number): *[SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)* *Defined in [src/HyperFormula.ts:1060](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1060)* Returns dimensions of a specified sheet. The sheet dimensions is represented with numbers: width and height. Note: Due to the memory optimizations, some of the empty bottom rows and rightmost columns are not counted to the dimensions. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=Sheet2!$A1'], ]); // should return provided sheet's dimensions: { width: 3, height: 1 } const sheetDimensions = hfInstance.getSheetDimensions(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[SheetDimensions](https://hyperformula.handsontable.com/docs/api/globals.md#sheetdimensions)* ___ ### getSheetFormulas ▸ **getSheetFormulas**(`sheetId`: number): *(string | undefined)[][]* *Defined in [src/HyperFormula.ts:970](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L970)* Returns an array with normalized formula strings from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) or `undefined` for a cells that have no value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return all formulas of a sheet: // [ // [undefined, '=SUM(1, 2, 3)', '=A1'], // [undefined, '=TEXT(A2, "0.0%")', '=C1'], // [undefined, '=SUM(A1:C1)', '=C1'], // ]; const sheetFormulas = hfInstance.getSheetFormulas(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *(string | undefined)[][]* ___ ### getSheetId ▸ **getSheetId**(`sheetName`: string): *number | undefined* *Defined in [src/HyperFormula.ts:3302](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3302)* Returns a unique sheet ID assigned to the sheet with a given name or `undefined` if the sheet does not exist. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return '0' because 'MySheet1' is of ID '0' const sheetID = hfInstance.getSheetId('MySheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | name of the sheet, for which we want to retrieve ID, case-insensitive. | **Returns:** *number | undefined* ___ ### getSheetName ▸ **getSheetName**(`sheetId`: number): *string | undefined* *Defined in [src/HyperFormula.ts:3256](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3256)* Returns a unique sheet name assigned to the sheet of a given ID or `undefined` if the there is no sheet with a given ID. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'MySheet2' as this sheet is the second one const sheetName = hfInstance.getSheetName(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of the sheet, for which we want to retrieve name | **Returns:** *string | undefined* ___ ### getSheetNames ▸ **getSheetNames**(): *string[]* *Defined in [src/HyperFormula.ts:3278](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3278)* List all sheet names. Returns an array of sheet names as strings. **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return all sheets names: ['MySheet1', 'MySheet2'] const sheetNames = hfInstance.getSheetNames(); ``` **Returns:** *string[]* ___ ### getSheetSerialized ▸ **getSheetSerialized**(`sheetId`: number): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:1003](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1003)* Returns an array of arrays of [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) with serialized content of cells from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet), either a cell formula or an explicit value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return: // [ // ['0', '=SUM(1, 2, 3)', '=A1'], // ['1', '=TEXT(A2, "0.0%")', '=C1'], // ['2', '=SUM(A1:C1)', '=C1'], // ]; const serializedContent = hfInstance.getSheetSerialized(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getSheetValues ▸ **getSheetValues**(`sheetId`: number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:937](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L937)* Returns an array of arrays of [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) with values of all cells from [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet). Applies rounding and post-processing. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ['1', '=TEXT(A2, "0.0%")', '=C1'], ['2', '=SUM(A1:C1)', '=C1'], ]); // should return all values of a sheet: [[0, 6, 0], [1, '1.0%', 0], [2, 6, 0]] const sheetValues = hfInstance.getSheetValues(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID number | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### isItPossibleToAddSheet ▸ **isItPossibleToAddSheet**(`sheetName`: string): *boolean* *Defined in [src/HyperFormula.ts:2732](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2732)* Returns information whether it is possible to add a sheet to the engine. Checks against particular rules to ascertain that addSheet can be called. If returns `true`, doing [addSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#addsheet) operation won't throw any errors, and it is possible to add sheet with provided name. Returns `false` if the chosen name is already used. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'false' because 'MySheet2' already exists const isAddable = hfInstance.isItPossibleToAddSheet('MySheet2'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetName` | string | sheet name, case-insensitive | **Returns:** *boolean* ___ ### isItPossibleToClearSheet ▸ **isItPossibleToClearSheet**(`sheetId`: number): *boolean* *Defined in [src/HyperFormula.ts:2877](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2877)* Returns information whether it is possible to clear a specified sheet. If returns `true`, doing [clearSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#clearsheet) operation won't throw any errors, provided sheet exists and its content can be cleared. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because 'MySheet2' exists and can be cleared const isClearable = hfInstance.isItPossibleToClearSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *boolean* ___ ### isItPossibleToRemoveSheet ▸ **isItPossibleToRemoveSheet**(`sheetId`: number): *boolean* *Defined in [src/HyperFormula.ts:2803](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2803)* Returns information whether it is possible to remove sheet for the engine. Returns `true` if the provided sheet exists, and therefore it can be removed, doing [removeSheet](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#removesheet) operation won't throw any errors. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because sheet with ID 1 exists and is removable const isRemovable = hfInstance.isItPossibleToRemoveSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *boolean* ___ ### isItPossibleToRenameSheet ▸ **isItPossibleToRenameSheet**(`sheetId`: number, `newName`: string): *boolean* *Defined in [src/HyperFormula.ts:3635](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3635)* Returns information whether it is possible to rename sheet. Returns `true` if the sheet with provided id exists and new name is available Returns `false` if sheet cannot be renamed **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // returns true hfInstance.isItPossibleToRenameSheet(0, 'MySheet0'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number | `newName` | string | a name of the sheet to be given | **Returns:** *boolean* ___ ### isItPossibleToReplaceSheetContent ▸ **isItPossibleToReplaceSheetContent**(`sheetId`: number, `values`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *boolean* *Defined in [src/HyperFormula.ts:2949](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2949)* Returns information whether it is possible to replace the sheet content. If returns `true`, doing [setSheetContent](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#setsheetcontent) operation won't throw any errors, the provided sheet exists and then its content can be replaced. Returns `false` otherwise **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return 'true' because sheet of ID 0 exists // and the provided content can be placed in this sheet const isReplaceable = hfInstance.isItPossibleToReplaceSheetContent(0, [['50'], ['60']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | `values` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | array of new values | **Returns:** *boolean* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2846](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2846)* Removes a sheet Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [sheetRemoved](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetremoved) after the sheet was removed **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: { error: [CellError], value: '#REF!' }, // }] const changes = hfInstance.removeSheet(1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### renameSheet ▸ **renameSheet**(`sheetId`: number, `newName`: string): *void* *Defined in [src/HyperFormula.ts:3673](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3673)* Renames a specified sheet. Note that this method may trigger dependency graph recalculation. **`fires`** [sheetRenamed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#sheetrenamed) after the sheet was renamed **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetnamealreadytakenerror) when the provided sheet name already exists **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // renames the sheet 'MySheet1' hfInstance.renameSheet(0, 'MySheet0'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet ID | `newName` | string | a name of the sheet to be given, if is the same as the old one the method does nothing | **Returns:** *void* ___ ### setSheetContent ▸ **setSheetContent**(`sheetId`: number, `values`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2986](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2986)* Replaces the sheet content with new values. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when values argument is not an array of arrays **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.setSheetContent(0, [['50'], ['60']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID. | `values` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | array of new values | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Ranges ### getFillRangeData ▸ **getFillRangeData**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `target`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `offsetsFromTarget`: boolean): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:2688](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2688)* Returns values to fill target range using source range, with properly extending the range using wrap-around heuristic. **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source or target are of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([[1, '=A1'], ['=$A$1', '2']]); // should return [['2', '=$A$1', '2'], ['=A3', 1, '=C3'], ['2', '=$A$1', '2']] hfInstance.getFillRangeData( {start: {sheet: 0, row: 0, col: 0}, end: {sheet: 0, row: 1, col: 1}}, {start: {sheet: 0, row: 1, col: 1}, end: {sheet: 0, row: 3, col: 3}}); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | of data | `target` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | range where data is intended to be put | `offsetsFromTarget` | boolean | false | if true, offsets are computed from target corner, otherwise from source corner | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getRangeFormulas ▸ **getRangeFormulas**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *(string | undefined)[][]* *Defined in [src/HyperFormula.ts:2615](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2615)* Returns cell formulas in given range. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', '2', '10'], ['5', '6', '7'], ['40', '30', '20'], ]); // returns cell formulas of a given range only: // [ [ '=SUM(1, 2)', undefined ], [ undefined, undefined ] ] const rangeFormulas = hfInstance.getRangeFormulas({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *(string | undefined)[][]* ___ ### getRangeSerialized ▸ **getRangeSerialized**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/HyperFormula.ts:2654](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2654)* Returns serialized cells in given range. Each non-formula cell is serialized to the exact value it was set with, preserving its type (e.g., a cell set with the string `'2'` is serialized as the string `'2'`, while a cell set with the number `2` is serialized as the number `2`). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', 2, 10], [5, 6, 7], [40, 30, 20], ]); // should return serialized cell content for the given range: // [ [ '=SUM(1, 2)', 2 ], [ 5, 6 ] ] const rangeSerialized = hfInstance.getRangeSerialized({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getRangeValues ▸ **getRangeValues**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2579](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2579)* Returns the cell content of a given range in a [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][] format. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2)', '2', '10'], ['5', '6', '7'], ['40', '30', '20'], ]); // returns calculated cells content: [ [ 3, 2 ], [ 5, 6 ] ] const rangeValues = hfInstance.getRangeValues({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 1 } }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangular range | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ## Rows ### addRows ▸ **addRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1826](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1826)* Adds multiple rows into a specified position in a given sheet. Does nothing if rows are outside effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when performing this operation would result in sheet size limits exceeding **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.addRows(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which rows will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [row, amount], where row is a row number above which the rows will be added | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isItPossibleToAddRows ▸ **isItPossibleToAddRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1784](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1784)* Returns information whether it is possible to add rows into a specified position in a given sheet. Checks against particular rules to ascertain that addRows can be called. If returns `true`, doing [addRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#addrows) operation won't throw any errors. Returns `false` if adding rows would exceed the sheet size limit or given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // should return 'true' for this example, // it is possible to add one row in the second row of sheet 0 const isAddable = hfInstance.isItPossibleToAddRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which rows will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [row, amount], where row is a row number above which the rows will be added | **Returns:** *boolean* ___ ### isItPossibleToMoveRows ▸ **isItPossibleToMoveRows**(`sheetId`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *boolean* *Defined in [src/HyperFormula.ts:2181](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2181)* Returns information whether it is possible to move a particular number of rows to a specified position in a given sheet. Checks against particular rules to ascertain that moveRows can be called. If returns `true`, doing [moveRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#moverows) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected rows, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return 'true' for this example // it is possible to move one row from row 0 into row 2 const isMovable = hfInstance.isItPossibleToMoveRows(0, 0, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startRow` | number | number of the first row to move | `numberOfRows` | number | number of rows to move | `targetRow` | number | row number before which rows will be moved | **Returns:** *boolean* ___ ### isItPossibleToRemoveRows ▸ **isItPossibleToRemoveRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1857](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1857)* Returns information whether it is possible to remove rows from a specified position in a given sheet. Checks against particular rules to ascertain that removeRows can be called. If returns `true`, doing [removeRows](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#removerows) operation won't throw any errors. Returns `false` if given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return 'true' for this example // it is possible to remove one row from row 1 of sheet 0 const isRemovable = hfInstance.isItPossibleToRemoveRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which rows will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [row, amount] | **Returns:** *boolean* ___ ### isItPossibleToSetRowOrder ▸ **isItPossibleToSetRowOrder**(`sheetId`: number, `newRowOrder`: number[]): *boolean* *Defined in [src/HyperFormula.ts:1579](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1579)* Checks if it is possible to reorder rows of a sheet according to a permutation. Parameter `newRowOrder` should have the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`, i.e. the value at index `i` is the new position for the row that is currently at index `i`. See [setRowOrder](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#setroworder) for details. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'] ]); // returns true hfInstance.isItPossibleToSetRowOrder(0, [1, 2, 0]); // returns false (array length must match the number of rows) hfInstance.isItPossibleToSetRowOrder(0, [2]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newRowOrder` | number[] | permutation of rows | **Returns:** *boolean* ___ ### isItPossibleToSwapRowIndexes ▸ **isItPossibleToSwapRowIndexes**(`sheetId`: number, `rowMapping`: [number, number][]): *boolean* *Defined in [src/HyperFormula.ts:1492](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1492)* Checks if it is possible to reorder rows of a sheet according to a source-target mapping. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1], [2], [4, 5], ]); // returns true const isSwappable = hfInstance.isItPossibleToSwapRowIndexes(0, [[0, 2], [2, 0]]); // returns false const isSwappable = hfInstance.isItPossibleToSwapRowIndexes(0, [[0, 1]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `rowMapping` | [number, number][] | array mapping original positions to final positions of rows | **Returns:** *boolean* ___ ### moveRows ▸ **moveRows**(`sheetId`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2228](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2228)* Moves a particular number of rows to a specified position in a given sheet. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-targetlocationhasarrayerror) when the target location has array inside - cells cannot be replaced by the array **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values const changes = hfInstance.moveRows(0, 0, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startRow` | number | number of the first row to move | `numberOfRows` | number | number of rows to move | `targetRow` | number | row number before which rows will be moved | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### removeRows ▸ **removeRows**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1898](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1898)* Removes multiple rows from a specified position in a given sheet. Does nothing if rows are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ]); // should return: [{ sheet: 0, col: 1, row: 2, value: null }] for this example const changes = hfInstance.removeRows(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which rows will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [row, amount] | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setRowOrder ▸ **setRowOrder**(`sheetId`: number, `newRowOrder`: number[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1544](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1544)* Reorders rows of a sheet according to a permutation of 0-based indexes. Parameter `newRowOrder` should have the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`. In other words, the value at index `i` is the new position for the row that is currently at index `i`. Note that this is the opposite of `[ previousPositionForRow0, previousPositionForRow1, ... ]`. This method might be used to [sort the rows of a sheet](https://hyperformula.handsontable.com/docs/guide/sorting-data.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note: This method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when rowMapping does not define correct row permutation for some subset of rows of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'] ]); // Move 'A' to index 1, 'B' to index 2, and 'C' to index 0. const newRowOrder = [1, 2, 0]; // [ newPosForA, newPosForB, newPosForC ] const changes = hfInstance.setRowOrder(0, newRowOrder); // Sheet after this operation: [['C'], ['A'], ['B']] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newRowOrder` | number[] | permutation of rows; array length must match the number of rows returned by [getSheetDimensions()](#getsheetdimensions) | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### swapRowIndexes ▸ **swapRowIndexes**(`sheetId`: number, `rowMapping`: [number, number][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1461](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1461)* Reorders rows of a sheet according to a source-target mapping. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when rowMapping does not define correct row permutation for some subset of rows of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1], [2], [4, 5], ]); // should set swap rows 0 and 2 in place, returns: // [{ // address: { sheet: 0, col: 0, row: 2 }, // newValue: 1, // }, // { // address: { sheet: 0, col: 1, row: 2 }, // newValue: null, // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 4, // }, // { // address: { sheet: 0, col: 1, row: 0 }, // newValue: 5, // }] const changes = hfInstance.swapRowIndexes(0, [[0, 2], [2, 0]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `rowMapping` | [number, number][] | array mapping original positions to final positions of rows | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Columns ### addColumns ▸ **addColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1974](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1974)* Adds multiple columns into a specified position in a given sheet. Does nothing if the columns are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when performing this operation would result in sheet size limits exceeding **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=RAND()', '42'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: 0.92754862796338, // }] const changes = hfInstance.addColumns(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which columns will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount], where column is a column number from which new columns will be added | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isItPossibleToAddColumns ▸ **isItPossibleToAddColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:1928](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1928)* Returns information whether it is possible to add columns into a specified position in a given sheet. Checks against particular rules to ascertain that addColumns can be called. If returns `true`, doing [addColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#addcolumns) operation won't throw any errors. Returns `false` if adding columns would exceed the sheet size limit or given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example, // it is possible to add 1 column in sheet 0, at column 1 const isAddable = hfInstance.isItPossibleToAddColumns(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID in which columns will be added | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount], where column is a column number from which new columns will be added | **Returns:** *boolean* ___ ### isItPossibleToMoveColumns ▸ **isItPossibleToMoveColumns**(`sheetId`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *boolean* *Defined in [src/HyperFormula.ts:2263](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2263)* Returns information whether it is possible to move a particular number of columns to a specified position in a given sheet. Checks against particular rules to ascertain that moveColumns can be called. If returns `true`, doing [moveColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#movecolumns) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected columns, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example // it is possible to move one column from column 1 into column 2 of sheet 0 const isMovable = hfInstance.isItPossibleToMoveColumns(0, 1, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startColumn` | number | number of the first column to move | `numberOfColumns` | number | number of columns to move | `targetColumn` | number | column number before which columns will be moved | **Returns:** *boolean* ___ ### isItPossibleToRemoveColumns ▸ **isItPossibleToRemoveColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *boolean* *Defined in [src/HyperFormula.ts:2004](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2004)* Returns information whether it is possible to remove columns from a specified position in a given sheet. Checks against particular rules to ascertain that removeColumns can be called. If returns `true`, doing [removeColumns](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#removecolumns) operation won't throw any errors. Returns `false` if given arguments are invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // should return 'true' for this example // it is possible to remove one column, in place of the second column of sheet 0 const isRemovable = hfInstance.isItPossibleToRemoveColumns(0, [1, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which columns will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format [column, amount] | **Returns:** *boolean* ___ ### isItPossibleToSetColumnOrder ▸ **isItPossibleToSetColumnOrder**(`sheetId`: number, `newColumnOrder`: number[]): *boolean* *Defined in [src/HyperFormula.ts:1748](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1748)* Checks if it is possible to reorder columns of a sheet according to a permutation. Parameter `newColumnOrder` should have the form `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`, i.e. the value at index `i` is the new position for the column that is currently at index `i`. See [setColumnOrder](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#setcolumnorder) for details. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // returns true hfInstance.isItPossibleToSetColumnOrder(0, [1, 2, 0]); // returns false (array length must match the number of columns) hfInstance.isItPossibleToSetColumnOrder(0, [1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newColumnOrder` | number[] | permutation of columns | **Returns:** *boolean* ___ ### isItPossibleToSwapColumnIndexes ▸ **isItPossibleToSwapColumnIndexes**(`sheetId`: number, `columnMapping`: [number, number][]): *boolean* *Defined in [src/HyperFormula.ts:1665](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1665)* Checks if it is possible to reorder columns of a sheet according to a source-target mapping. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1, 2, 4], [5] ]); // returns true hfInstance.isItPossibleToSwapColumnIndexes(0, [[0, 2], [2, 0]]); // returns false hfInstance.isItPossibleToSwapColumnIndexes(0, [[0, 1]]); ``` **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *boolean* ___ ### moveColumns ▸ **moveColumns**(`sheetId`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2316](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2316)* Moves a particular number of columns to a specified position in a given sheet. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-targetlocationhasarrayerror) when the target location has array inside - cells cannot be replaced by the array **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3', '=RAND()', '=SUM(A1:C1)'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: 0.16210054671639, // }, { // address: { sheet: 0, col: 4, row: 0 }, // newValue: 6.16210054671639, // }] const changes = hfInstance.moveColumns(0, 1, 1, 2); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | a sheet number in which the operation will be performed | `startColumn` | number | number of the first column to move | `numberOfColumns` | number | number of columns to move | `targetColumn` | number | column number before which columns will be moved | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### removeColumns ▸ **removeColumns**(`sheetId`: number, ...`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2049](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2049)* Removes multiple columns from a specified position in a given sheet. Does nothing if columns are outside the effective sheet size. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['0', '=SUM(1, 2, 3)', '=A1'], ]); // should return a list of cells which values changed after the operation, // their absolute addresses and new values, in this example it will return: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: { error: [CellError], value: '#REF!' }, // }] const changes = hfInstance.removeColumns(0, [0, 1]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | sheet ID from which columns will be removed | `...indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | non-contiguous indexes with format: [column, amount] | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setColumnOrder ▸ **setColumnOrder**(`sheetId`: number, `newColumnOrder`: number[]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1715](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1715)* Reorders columns of a sheet according to a permutation of 0-based indexes. Parameter `newColumnOrder` should have the form `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`. In other words, the value at index `i` is the new position for the column that is currently at index `i`. Note that this is the opposite of `[ previousPositionForColumn0, previousPositionForColumn1, ... ]`. This method might be used to [sort the columns of a sheet](https://hyperformula.handsontable.com/docs/guide/sorting-data.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note: This method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when columnMapping does not define correct column permutation for some subset of columns of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // Move 'A' to index 1, 'B' to index 2, and 'C' to index 0. const newColumnOrder = [1, 2, 0]; // [ newPosForA, newPosForB, newPosForC ] const changes = hfInstance.setColumnOrder(0, newColumnOrder); // Sheet after this operation: [['C', 'A', 'B']] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `newColumnOrder` | number[] | permutation of columns; array length must match the number of columns returned by [getSheetDimensions()](#getsheetdimensions) | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### swapColumnIndexes ▸ **swapColumnIndexes**(`sheetId`: number, `columnMapping`: [number, number][]): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1637](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1637)* Reorders columns of a sheet according to a source-target mapping. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when columnMapping does not define correct column permutation for some subset of columns of the given sheet **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the selected position has array inside **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [1, 2, 4], [5] ]); // should set swap columns 0 and 2 in place, returns: // [{ // address: { sheet: 0, col: 2, row: 0 }, // newValue: 1, // }, // { // address: { sheet: 0, col: 2, row: 1 }, // newValue: 5, // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 4, // }, // { // address: { sheet: 0, col: 0, row: 1 }, // newValue: null, // }] const changes = hfInstance.swapColumnIndexes(0, [[0, 2], [2, 0]]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheetId` | number | ID of a sheet to operate on | `columnMapping` | [number, number][] | array mapping original positions to final positions of columns | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Cells ### doesCellHaveFormula ▸ **doesCellHaveFormula**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3419](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3419)* Returns `true` if the specified cell contains a formula. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'true' since the A1 cell contains a formula const A1Formula = hfInstance.doesCellHaveFormula({ sheet: 0, col: 0, row: 0 }); // should return 'false' since the B1 cell does not contain a formula const B1NoFormula = hfInstance.doesCellHaveFormula({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### doesCellHaveSimpleValue ▸ **doesCellHaveSimpleValue**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3388](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3388)* Returns `true` if the specified cell contains a simple value. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'true' since the selected cell contains a simple value const isA1Simple = hfInstance.doesCellHaveSimpleValue({ sheet: 0, col: 0, row: 0 }); // should return 'false' since the selected cell does not contain a simple value const isB1Simple = hfInstance.doesCellHaveSimpleValue({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### getCellFormula ▸ **getCellFormula**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *string | undefined* *Defined in [src/HyperFormula.ts:843](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L843)* Returns a normalized formula string from the cell of a given address or `undefined` for an address that does not exist and empty values. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '0'], ]); // should return a normalized A1 cell formula: '=SUM(1, 2, 3)' const A1Formula = hfInstance.getCellFormula({ sheet: 0, col: 0, row: 0 }); // should return a normalized B1 cell formula: 'undefined' const B1Formula = hfInstance.getCellFormula({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *string | undefined* ___ ### getCellHyperlink ▸ **getCellHyperlink**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *string | undefined* *Defined in [src/HyperFormula.ts:873](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L873)* Returns the `HYPERLINK` url for a cell of a given address or `undefined` for an address that does not exist or a cell that is not `HYPERLINK` **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=HYPERLINK("https://hyperformula.handsontable.com/", "HyperFormula")', '0'], ]); // should return url of 'HYPERLINK': https://hyperformula.handsontable.com/ const A1Hyperlink = hfInstance.getCellHyperlink({ sheet: 0, col: 0, row: 0 }); // should return 'undefined' for a cell that is not 'HYPERLINK' const B1Hyperlink = hfInstance.getCellHyperlink({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *string | undefined* ___ ### getCellSerialized ▸ **getCellSerialized**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/HyperFormula.ts:905](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L905)* Returns [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) with a serialized content of the cell of a given address: either a cell formula, an explicit value, or an error. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) when cellAddress is of incorrect type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '0'], ]); // should return serialized content of A1 cell: '=SUM(1, 2, 3)' const cellA1Serialized = hfInstance.getCellSerialized({ sheet: 0, col: 0, row: 0 }); // should return serialized content of B1 cell: '0' const cellB1Serialized = hfInstance.getCellSerialized({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* ___ ### getCellType ▸ **getCellType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* *Defined in [src/HyperFormula.ts:3356](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3356)* Returns the type of a cell at a given address. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(A2:A3)', '2'], ]); // should return 'FORMULA', the cell of given coordinates is of this type const cellA1Type = hfInstance.getCellType({ sheet: 0, col: 0, row: 0 }); // should return 'VALUE', the cell of given coordinates is of this type const cellB1Type = hfInstance.getCellType({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* ___ ### getCellValue ▸ **getCellValue**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/HyperFormula.ts:812](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L812)* Returns the cell value of a given address. Applies rounding and post-processing. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) when cellAddress is of incorrect type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '2'], ]); // get value of A1 cell, should be '6' const A1Value = hfInstance.getCellValue({ sheet: 0, col: 0, row: 0 }); // get value of B1 cell, should be '2' const B1Value = hfInstance.getCellValue({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* ___ ### getCellValueDetailedType ▸ **getCellValueDetailedType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* *Defined in [src/HyperFormula.ts:3550](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3550)* Returns detailed type of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. For more information, see the [Types of values guide](https://hyperformula.handsontable.com/docs/guide/types-of-values.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1%', '1$'], ]); // should return 'NUMBER_PERCENT', cell value type of provided coordinates is a number with a format inference percent. const cellType = hfInstance.getCellValueDetailedType({ sheet: 0, col: 0, row: 0 }); // should return 'NUMBER_CURRENCY', cell value type of provided coordinates is a number with a format inference currency. const cellType = hfInstance.getCellValueDetailedType({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* ___ ### getCellValueFormat ▸ **getCellValueFormat**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *FormatInfo* *Defined in [src/HyperFormula.ts:3584](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3584)* Returns auxiliary format information of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1$', '1'], ]); // should return '$', cell value type of provided coordinates is a number with a format inference currency, parsed as using '$' as currency. const cellFormat = hfInstance.getCellValueFormat({ sheet: 0, col: 0, row: 0 }); // should return undefined, cell value type of provided coordinates is a number with no format information. const cellFormat = hfInstance.getCellValueFormat({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *FormatInfo* ___ ### getCellValueType ▸ **getCellValueType**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* *Defined in [src/HyperFormula.ts:3514](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3514)* Returns type of the cell value of a given address. The method accepts cell coordinates as object with column, row and sheet numbers. For more information, see the [Types of values guide](https://hyperformula.handsontable.com/docs/guide/types-of-values.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=SUM(1, 2, 3)', '2'], ]); // should return 'NUMBER', cell value type of provided coordinates is a number const cellValue = hfInstance.getCellValueType({ sheet: 0, col: 1, row: 0 }); // should return 'NUMBER', cell value type of provided coordinates is a number const cellValue = hfInstance.getCellValueType({ sheet: 0, col: 0, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* ___ ### isCellEmpty ▸ **isCellEmpty**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3451](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3451)* Returns`true` if the specified cell is empty. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ [null, '1'], ]); // should return 'true', cell of provided coordinates is empty const isEmpty = hfInstance.isCellEmpty({ sheet: 0, col: 0, row: 0 }); // should return 'false', cell of provided coordinates is not empty const isNotEmpty = hfInstance.isCellEmpty({ sheet: 0, col: 1, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### isCellPartOfArray ▸ **isCellPartOfArray**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:3479](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3479)* Returns `true` if a given cell is a part of an array. The method accepts cell coordinates as object with column, row and sheet numbers. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if cellAddress is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['{=TRANSPOSE(B1:B1)}'], ]); // should return 'true', cell of provided coordinates is a part of an array const isPartOfArray = hfInstance.isCellPartOfArray({ sheet: 0, col: 0, row: 0 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | cell coordinates | **Returns:** *boolean* ___ ### isItPossibleToMoveCells ▸ **isItPossibleToMoveCells**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/HyperFormula.ts:2085](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2085)* Returns information whether it is possible to move cells to a specified position in a given sheet. Checks against particular rules to ascertain that moveCells can be called. If returns `true`, doing [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#movecells) operation won't throw any errors. Returns `false` if the operation might be disrupted and causes side effects by the fact that there is an array inside the selected columns, the target location includes an array or the provided address is invalid. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if destinationLeftCorner, source, or any of basic type arguments are of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // choose the coordinates and assign them to variables const source = { sheet: 0, col: 1, row: 0 }; const destination = { sheet: 0, col: 3, row: 0 }; // should return 'true' for this example // it is possible to move a block of width 1 and height 1 // from the corner: column 1 and row 0 of sheet 0 // into destination corner: column 3, row 0 of sheet 0 const isMovable = hfInstance.isItPossibleToMoveCells({ start: source, end: source }, destination); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | range for a moved block | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *boolean* ___ ### isItPossibleToSetCellContents ▸ **isItPossibleToSetCellContents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *boolean* *Defined in [src/HyperFormula.ts:1356](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1356)* Returns information whether it is possible to change the content in a rectangular area bounded by the box. If returns `true`, doing [setCellContents](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#setcellcontents) operation won't throw any errors. Returns `false` if the address is invalid or the sheet does not exist. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // top left corner const address1 = { col: 0, row: 0, sheet: 0 }; // bottom right corner const address2 = { col: 1, row: 0, sheet: 0 }; // should return 'true' for this example, it is possible to set content of // width 2, height 1 in the first row and column of sheet 0 const isSettable = hfInstance.isItPossibleToSetCellContents({ start: address1, end: address2 }); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | single cell or block of cells to check | **Returns:** *boolean* ___ ### moveCells ▸ **moveCells**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2142](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2142)* Moves the content of a cell block from source to the target location. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if destinationLeftCorner or source are of wrong type **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the given arguments are invalid **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when performing this operation would result in sheet size limits exceeding **`throws`** [SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sourcelocationhasarrayerror) when the source location has array inside - array cannot be moved **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-targetlocationhasarrayerror) when the target location has array inside - cells cannot be replaced by the array **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['=RAND()', '42'], ]); // choose the coordinates and assign them to variables const source = { sheet: 0, col: 1, row: 0 }; const destination = { sheet: 0, col: 3, row: 0 }; // should return a list of cells which values changed after the operation, // their absolute addresses and new values, for this example: // [{ // address: { sheet: 0, col: 0, row: 0 }, // newValue: 0.93524248002062, // }] const changes = hfInstance.moveCells({ start: source, end: source }, destination); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | range for a moved block | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### setCellContents ▸ **setCellContents**(`topLeftCornerAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `cellContents`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1409](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1409)* Sets the content for a block of cells of a given coordinates. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-invalidargumentserror) when the value is not an array of arrays or a raw cell value **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when performing this operation would result in sheet size limits exceeding **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if topLeftCornerAddress argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=A1'], ]); // should set the content, returns: // [{ // address: { sheet: 0, col: 3, row: 0 }, // newValue: 2, // }] const changes = hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `topLeftCornerAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | top left corner of block of cells | `cellContents` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | array with content | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Named Expressions ### addNamedExpression ▸ **addNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3904](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3904)* Adds a specified named expression. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [namedExpressionAdded](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#namedexpressionadded) always, unless [batch](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#batch) mode is used **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionNameIsAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-namedexpressionnameisalreadytakenerror) when the named-expression name is not available. **`throws`** [NamedExpressionNameIsInvalidError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-namedexpressionnameisinvaliderror) when the named-expression name is not valid **`throws`** [NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-norelativeaddressesallowederror) when the named-expression formula contains relative references **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add own expression, scope limited to 'Sheet1' (sheetId=0), the method should return a list of cells which values // changed after the operation, their absolute addresses and new values // for this example: // [{ // name: 'prettyName', // newValue: 142, // }] const changes = hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | a name of the expression to be added | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | the expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | additional metadata related to named expression | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### changeNamedExpression ▸ **changeNamedExpression**(`expressionName`: string, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:4126](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4126)* Changes a given named expression to a specified formula. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-namedexpressiondoesnotexisterror) when the given expression does not exist. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`throws`** [[ArrayFormulasNotSupportedError]] when the named expression formula is an array formula **`throws`** [NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-norelativeaddressesallowederror) when the named expression formula contains relative references **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression, scope limited to 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // change the named expression const changes = hfInstance.changeNamedExpression('prettyName', '=Sheet1!$A$1+200'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | a new expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | additional metadata related to named expression | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### getAllNamedExpressionsSerialized ▸ **getAllNamedExpressionsSerialized**(): *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* *Defined in [src/HyperFormula.ts:4294](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4294)* Returns all named expressions serialized. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ['60'], ]); // add two named expressions and one scoped hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); hfInstance.addNamedExpression('anotherPrettyName', '=Sheet1!$A$2+100'); hfInstance.addNamedExpression('prettyName3', '=Sheet1!$A$3+100', 0); // get all expressions serialized // should return: // [ // {name: 'prettyName', expression: '=Sheet1!$A$1+100', options: undefined, scope: undefined}, // {name: 'anotherPrettyName', expression: '=Sheet1!$A$2+100', options: undefined, scope: undefined}, // {name: 'alsoPrettyName', expression: '=Sheet1!$A$3+100', options: undefined, scope: 0} // ] const allExpressions = hfInstance.getAllNamedExpressionsSerialized(); ``` **Returns:** *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* ___ ### getNamedExpression ▸ **getNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *[NamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/namedexpression.md) | undefined* *Defined in [src/HyperFormula.ts:4029](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4029)* Returns a named expression, or `undefined` for a named expression that does not exist or does not hold a formula. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression in 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // returns a named expression that corresponds to the passed name from 'Sheet1' (sheetId=0) // for this example, returns: // {name: 'prettyName', expression: '=Sheet1!$A$1+100', options: undefined, scope: 0} const myFormula = hfInstance.getNamedExpression('prettyName', 0); // for a named expression that doesn't exist, returns 'undefined': const myFormulaTwo = hfInstance.getNamedExpression('uglyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[NamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/namedexpression.md) | undefined* ___ ### getNamedExpressionFormula ▸ **getNamedExpressionFormula**(`expressionName`: string, `scope?`: undefined | number): *string | undefined* *Defined in [src/HyperFormula.ts:3984](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3984)* Returns a normalized formula string for given named expression, or `undefined` for a named expression that does not exist or does not hold a formula. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression in 'Sheet1' (sheetId=0) hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // returns a normalized formula string corresponding to the passed name from 'Sheet1' (sheetId=0), // '=Sheet1!A1+100' for this example const myFormula = hfInstance.getNamedExpressionFormula('prettyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *string | undefined* ___ ### getNamedExpressionValue ▸ **getNamedExpressionValue**(`expressionName`: string, `scope?`: undefined | number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | undefined* *Defined in [src/HyperFormula.ts:3942](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3942)* Gets specified named expression value. Returns a [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) or undefined if the given named expression does not exist. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression, only 'Sheet1' (sheetId=0) considered as it is the scope hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 'Sheet1'); // returns the calculated value of a passed named expression, '142' for this example const myFormula = hfInstance.getNamedExpressionValue('prettyName', 'Sheet1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | undefined* ___ ### isItPossibleToAddNamedExpression ▸ **isItPossibleToAddNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:3852](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3852)* Returns information whether it is possible to add named expression into a specific scope. Checks against particular rules to ascertain that addNamedExpression can be called. If returns `true`, doing [addNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#addnamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // should return 'true' for this example, // it is possible to add named expression to global scope const isAddable = hfInstance.isItPossibleToAddNamedExpression('prettyName', '=Sheet1!$A$1+100'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | a name of the expression to be added | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | the expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### isItPossibleToChangeNamedExpression ▸ **isItPossibleToChangeNamedExpression**(`expressionName`: string, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:4078](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4078)* Returns information whether it is possible to change named expression in a specific scope. Checks against particular rules to ascertain that changeNamedExpression can be called. If returns `true`, doing [changeNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#changenamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); // should return 'true' for this example, // it is possible to change named expression const isAddable = hfInstance.isItPossibleToChangeNamedExpression('prettyName', '=Sheet1!$A$1+100'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | a new expression | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### isItPossibleToRemoveNamedExpression ▸ **isItPossibleToRemoveNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *boolean* *Defined in [src/HyperFormula.ts:4162](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4162)* Returns information whether it is possible to remove named expression from a specific scope. Checks against particular rules to ascertain that removeNamedExpression can be called. If returns `true`, doing [removeNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#removenamedexpression) operation won't throw any errors. Returns `false` if the operation might be disrupted. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); // should return 'true' for this example, // it is possible to change named expression const isAddable = hfInstance.isItPossibleToRemoveNamedExpression('prettyName'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | an expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *boolean* ___ ### listNamedExpressions ▸ **listNamedExpressions**(`scope?`: undefined | number): *string[]* *Defined in [src/HyperFormula.ts:4256](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4256)* Lists named expressions. - If scope parameter is provided, returns an array of expression names defined for this scope. - If scope parameter is undefined, returns an array of global expression names. For more information, see the [Named expressions guide](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ['60'], ]); // add two named expressions and one scoped hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100'); hfInstance.addNamedExpression('anotherPrettyName', '=Sheet1!$A$2+100'); hfInstance.addNamedExpression('alsoPrettyName', '=Sheet1!$A$3+100', 0); // list the expressions, should return: ['prettyName', 'anotherPrettyName'] for this example const listOfExpressions = hfInstance.listNamedExpressions(); // list the expressions, should return: ['alsoPrettyName'] for this example const listOfExpressions = hfInstance.listNamedExpressions(0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `scope?` | undefined | number | scope of the named expressions, `sheetId` for local scope or `undefined` for global scope | **Returns:** *string[]* ___ ### removeNamedExpression ▸ **removeNamedExpression**(`expressionName`: string, `scope?`: undefined | number): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:4207](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4207)* Removes a named expression. Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [namedExpressionRemoved](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#namedexpressionremoved) after the expression was removed **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-namedexpressiondoesnotexisterror) when the given expression does not exist. **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) if no sheet with given sheetId exists **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // add a named expression hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // remove the named expression const changes = hfInstance.removeNamedExpression('prettyName', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `expressionName` | string | expression name, case-insensitive. | `scope?` | undefined | number | scope definition, `sheetId` for local scope or `undefined` for global scope | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Helpers ### calculateFormula ▸ **calculateFormula**(`formulaString`: string, `sheetId`: number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:4359](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4359)* Calculates fire-and-forget formula, returns the calculated value. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type arguments is of wrong type. **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-notaformulaerror) when the provided string is not a valid formula (i.e., doesn't start with `=`). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the provided `sheetID` doesn't exist. **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ Sheet1: [['58']], Sheet2: [['1', '2', '3'], ['4', '5', '6']] }); // returns the calculated formula's value // for this example, returns `68` const calculatedFormula = hfInstance.calculateFormula('=A1+10', 0); // for this example, returns [['11', '12', '13'], ['14', '15', '16']] const calculatedFormula = hfInstance.calculateFormula('=A1:B3+10', 1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | A formula in a proper format, starting with `=`. | `sheetId` | number | The ID of a sheet in context of which the formula gets evaluated. | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue) | [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### getAvailableFunctions ▸ **getAvailableFunctions**(): *FunctionListEntry[]* *Defined in [src/HyperFormula.ts:4530](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4530)* Returns metadata of all functions available in this instance for a function picker, with names translated according to the language set in this instance's configuration. Each entry contains the translated name, the language-independent canonical name, the category, and a short description. Entries are sorted alphabetically by their localized name, using the collation rules of the host environment, so the exact order of names that differ only by case or diacritics may vary between hosts. The list reflects this instance's own registry: the built-in functions and any custom (user-registered) functions, plus their aliases. An alias is listed under its own id, borrowing its target's category and description, with the target id exposed as `aliasOf`. Custom functions ship no catalogue entry, so their `category` is `'Custom'` and they carry no `shortDescription` — with one exception: the catalogue is keyed by function id, so a custom plugin registered *over* a built-in id inherits that id's entry and is listed with the built-in's category and description. That registry is a snapshot taken when the instance was built, not a live view of the global one: a function registered with [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-registerfunctionplugin) or [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-registerfunction) afterwards reaches only the engines built later, so an engine kept across a late registration keeps reporting the set it was built with. A function with no translation entry for the configured language is omitted: the interpreter refuses to evaluate an untranslated id, so listing it would advertise a function that cannot be called — in practice, a custom plugin registered without translations for that language. A translation set to an empty string is not a missing entry: it falls back to the canonical id, so the function stays listed under its canonical name. **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // get the list of available functions, translated for the configured language const functions = hfInstance.getAvailableFunctions(); ``` **Returns:** *FunctionListEntry[]* ___ ### getCellDependents ▸ **getCellDependents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* *Defined in [src/HyperFormula.ts:3183](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3183)* Returns all the out-neighbors in the [dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md) for a given cell address or range. Including: - All cells with formulas that contain the given cell address or range - Some of the ranges that contain the given cell address or range The exact result depends on the optimizations applied by the HyperFormula to the dependency graph, some of which are described in the section ["Optimizations for large ranges"](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md#optimizations-for-large-ranges). The returned array includes also named expression dependents. They are represented as cell references with sheet ID `-1`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if address is not [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) or [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray( [ ['1', '=A1', '=A1+B1'] ] ); hfInstance.getCellDependents({ sheet: 0, col: 0, row: 0}); // returns [{ sheet: 0, col: 1, row: 0}, { sheet: 0, col: 2, row: 0}] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | object representation of an absolute address or range of addresses | **Returns:** *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* ___ ### getCellPrecedents ▸ **getCellPrecedents**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* *Defined in [src/HyperFormula.ts:3221](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3221)* Returns all the in-neighbors in the [dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md) for a given cell address or range. In particular: - If the argument is a single cell, `getCellPrecedents()` returns all cells and ranges contained in that cell's formula. - If the argument is a range of cells, `getCellPrecedents()` returns some of the cell addresses and smaller ranges contained in that range (but not all of them). The exact result depends on the optimizations applied by the HyperFormula to the dependency graph, some of which are described in the section ["Optimizations for large ranges"](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md#optimizations-for-large-ranges). The returned array includes also named expression precedents. They are represented as cell references with sheet ID `-1`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if address is of wrong type **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray( [ ['1', '=A1', '=A1+B1'] ] ); hfInstance.getCellPrecedents({ sheet: 0, col: 2, row: 0}); // returns [{ sheet: 0, col: 0, row: 0}, { sheet: 0, col: 1, row: 0}] ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | object representation of an absolute address or range of addresses | **Returns:** *([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md))[]* ___ ### getFunctionDetails ▸ **getFunctionDetails**(`canonicalName`: string): *FunctionDetails | undefined* *Defined in [src/HyperFormula.ts:4575](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4575)* Returns the full metadata of a single function registered in this instance, with names translated according to the language set in this instance's configuration: the parameter list (with per-parameter optionality), the number of trailing parameters that repeat (`repeatLastArgs`), the category, a short description, and the documentation link (`documentationUrl`) and usage examples (`examples`) — every built-in authors both. Resolves both built-in and custom (user-registered) functions, as well as aliases. An alias reports its target's metadata (including examples, which spell the target's name) under the alias id, with the target id exposed as `aliasOf`. Returns `undefined` when the function id is unknown, not registered in this instance, or has no translation entry for the configured language (an untranslated id cannot be evaluated, so it is not described either, which keeps this method consistent with [getAvailableFunctions](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#getavailablefunctions)). For a custom function, `category` is `'Custom'`, there is no `shortDescription`, `documentationUrl` or `examples`, and parameters are reported positionally (`Arg1`, `Arg2`, ...). A custom plugin registered over a built-in id is the exception: the catalogue is keyed by function id, so it reports that built-in's authored metadata alongside the parameter list of the implementation actually registered. `canonicalName` is matched exactly, in two ways worth knowing: - It is **case-sensitive**, unlike formula syntax. `'SUMIF'` resolves; `'sumif'` and `'SumIf'` return `undefined`, even though `=sumif(...)` evaluates. - It must be the **canonical (English) id, never a localized name**. `localizedName` is output only: under `plPL` this method reports `localizedName: 'SUMA.JEŻELI'` for `'SUMIF'`, but passing `'SUMA.JEŻELI'` back in returns `undefined`. To look up an entry from [getAvailableFunctions](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#getavailablefunctions), pass its `canonicalName`. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // get the details of the SUMIF function, translated for the configured language const details = hfInstance.getFunctionDetails('SUMIF'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `canonicalName` | string | the language-independent function id, e.g. `'SUMIF'` | **Returns:** *FunctionDetails | undefined* ___ ### getNamedExpressionsFromFormula ▸ **getNamedExpressionsFromFormula**(`formulaString`: string): *string[]* *Defined in [src/HyperFormula.ts:4390](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4390)* Return a list of named expressions used by a formula. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type arguments is of wrong type. **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-notaformulaerror) when the provided string is not a valid formula (i.e., doesn't start with `=`). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // returns a list of named expressions used by a formula // for this example, returns ['foo', 'bar'] const namedExpressions = hfInstance.getNamedExpressionsFromFormula('=foo+bar*2'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | A formula in a proper format, starting with `=`. | **Returns:** *string[]* ___ ### normalizeFormula ▸ **normalizeFormula**(`formulaString`: string): *string* *Defined in [src/HyperFormula.ts:4323](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4323)* Parses and then unparses a formula. Returns a normalized formula (e.g., restores the original capitalization of sheet names, function names, cell addresses, and named expressions). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-notaformulaerror) when the provided string is not a valid formula, i.e., does not start with "=" **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ['50'], ]); // returns '=Sheet1!$A$1+10' const normalizedFormula = hfInstance.normalizeFormula('=SHEET1!$A$1+10'); // returns '=3*$A$1' const normalizedFormula = hfInstance.normalizeFormula('=3*$a$1'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | a formula in a proper format - it must start with "=" | **Returns:** *string* ___ ### numberToDate ▸ **numberToDate**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4629](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4629)* Interprets number as a date. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass the number of days since nullDate // the method should return formatted date, for this example: // {year: 2020, month: 1, day: 15} const dateFromNumber = hfInstance.numberToDate(43845); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | number of days since nullDate, should be non-negative, fractions are ignored. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### numberToDateTime ▸ **numberToDateTime**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4603](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4603)* Interprets number as a date + time. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass the number of days since nullDate // the method should return formatted date and time, for this example: // {year: 2020, month: 1, day: 15, hours: 2, minutes: 24, seconds: 0} const dateTimeFromNumber = hfInstance.numberToDateTime(43845.1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | number of days since nullDate, should be non-negative, fractions are interpreted as hours/minutes/seconds. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### numberToTime ▸ **numberToTime**(`inputNumber`: number): *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* *Defined in [src/HyperFormula.ts:4654](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4654)* Interprets number as a time (hours/minutes/seconds). For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // pass a number to be interpreted as a time // should return {hours: 26, minutes: 24} for this example const timeFromNumber = hfInstance.numberToTime(1.1); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `inputNumber` | number | time in 24h units. | **Returns:** *[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)* ___ ### simpleCellAddressFromString ▸ **simpleCellAddressFromString**(`cellAddress`: string, `contextSheetId`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | undefined* *Defined in [src/HyperFormula.ts:3024](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3024)* Computes the simple (absolute) address of a cell address, based on its string representation. - If a sheet name is present in the string representation but is not present in the engine, returns `undefined`. - If no sheet name is present in the string representation, uses `contextSheetId` as a sheet id in the returned address. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 // returns { sheet: 42, col: 0, row: 0 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('A1', 42); // returns { sheet: 0, col: 0, row: 5 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet0!A6', 42); // returns { sheet: 0, col: 0, row: 5 } const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet0!$A$6', 42); // returns 'undefined', as there's no 'Sheet 2' in the HyperFormula instance const simpleCellAddress = hfInstance.simpleCellAddressFromString('Sheet2!A6', 42); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellAddress` | string | string representation of cell address in A1 notation | `contextSheetId` | number | sheet id used to construct the simple address in case of missing sheet name in `cellAddress` argument | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | undefined* ___ ### simpleCellAddressToString ▸ **simpleCellAddressToString**(`cellAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `optionsOrContextSheetId`: object | number): *undefined | string* *Defined in [src/HyperFormula.ts:3093](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3093)* Computes string representation of an absolute address in A1 notation. If `cellAddress.sheet` is not present in the engine, returns `undefined`. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if its arguments are of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 const addr = { sheet: 0, col: 1, row: 1 }; // should return 'B2' const A1Notation = hfInstance.simpleCellAddressToString(addr); // should return 'B2' const A1Notation = hfInstance.simpleCellAddressToString(addr, { includeSheetName: false }); // should return 'Sheet0!B2' const A1Notation = hfInstance.simpleCellAddressToString(addr, { includeSheetName: true }); // should return 'B2' as context sheet id is the same as addr.sheet const A1Notation = hfInstance.simpleCellAddressToString(addr, 0); // should return 'Sheet0!B2' as context sheet id is different from addr.sheet const A1Notation = hfInstance.simpleCellAddressToString(addr, 42); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `cellAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | - | object representation of an absolute address | `optionsOrContextSheetId` | object | number | {} | options object or number used as context sheet id to construct the string address (see examples) | **Returns:** *undefined | string* ___ ### simpleCellRangeFromString ▸ **simpleCellRangeFromString**(`cellRange`: string, `contextSheetId`: number): *[SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | undefined* *Defined in [src/HyperFormula.ts:3053](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3053)* Computes simple (absolute) address of a cell range based on its string representation. If sheet name is present in string representation but not present in the engine, returns `undefined`. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 // should return { start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 1, row: 0 } } const simpleCellAddress = hfInstance.simpleCellRangeFromString('A1:A2', 0); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `cellRange` | string | string representation of cell range in A1 notation | `contextSheetId` | number | sheet id used to construct the simple address in case of missing sheet name in `cellRange` argument | **Returns:** *[SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | undefined* ___ ### simpleCellRangeToString ▸ **simpleCellRangeToString**(`cellRange`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md), `optionsOrContextSheetId`: object | number): *string | undefined* *Defined in [src/HyperFormula.ts:3146](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3146)* Computes string representation of an absolute range in A1 notation. Returns `undefined` if: - `cellRange` is not a valid range, - `cellRange.start.sheet` and `cellRange.start.end` are different, - `cellRange.start.sheet` is not present in the engine, - `cellRange.start.end` is not present in the engine. Note: This method is useful only for cell ranges; does not work with column ranges and row ranges. For more information, see the [Cell references guide](https://hyperformula.handsontable.com/docs/guide/cell-references.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if its arguments are of wrong type **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); hfInstance.addSheet('Sheet0'); //sheetId = 0 const range = { start: { sheet: 0, col: 1, row: 1 }, end: { sheet: 0, col: 2, row: 1 } }; // should return 'B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range); // should return 'B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range, { includeSheetName: false }); // should return 'Sheet0!B2:C2' const A1Notation = hfInstance.simpleCellRangeToString(range, { includeSheetName: true }); // should return 'B2:C2' as context sheet id is the same as range.start.sheet and range.end.sheet const A1Notation = hfInstance.simpleCellRangeToString(range, 0); // should return 'Sheet0!B2:C2' as context sheet id is different from range.start.sheet and range.end.sheet const A1Notation = hfInstance.simpleCellRangeToString(range, 42); ``` **Parameters:** Name | Type | Default | Description | ------ | ------ | ------ | ------ | `cellRange` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | - | object representation of an absolute range | `optionsOrContextSheetId` | object | number | {} | options object or number used as context sheet id to construct the string address (see examples) | **Returns:** *string | undefined* ___ ### validateFormula ▸ **validateFormula**(`formulaString`: string): *boolean* *Defined in [src/HyperFormula.ts:4424](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4424)* Validates the formula. If the provided string starts with "=" and is a parsable formula, the method returns `true`. The validation is purely grammatical: the method doesn't verify if the formula can be calculated or not. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js // checks if the given string is a valid formula, should return 'true' for this example const isFormula = hfInstance.validateFormula('=SUM(1, 2)'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `formulaString` | string | a formula in a proper format - it must start with "=" | **Returns:** *boolean* ___ ## Clipboard ### clearClipboard ▸ **clearClipboard**(): *void* *Defined in [src/HyperFormula.ts:2494](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2494)* Clears the clipboard content. **`example`** ```js // clears the clipboard, isClipboardEmpty() should return true if called afterwards hfInstance.clearClipboard(); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Returns:** *void* ___ ### copy ▸ **copy**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2354](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2354)* Stores a copy of the cell block in internal clipboard for the further paste. Returns the copied values for use in external clipboard. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // it copies [ [ 2 ] ] const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangle range to copy | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### cut ▸ **cut**(`source`: [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/HyperFormula.ts:2394](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2394)* Stores information of the cell block in internal clipboard for further paste. Calling [paste](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#paste) right after this method is equivalent to call [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#movecells). Almost any CRUD operation called after this method will abort the cut operation. Returns the cut values for use in external clipboard. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if source is of wrong type **`throws`** [SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md) if range provided has distinct sheet numbers for start and end **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // returns the values that were cut: [ [ 1 ] ] const clipboardContent = hfInstance.cut({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 0, row: 0 }, }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `source` | [SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange.md) | rectangle range to cut | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### isClipboardEmpty ▸ **isClipboardEmpty**(): *boolean* *Defined in [src/HyperFormula.ts:2477](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2477)* Returns information whether there is something in the clipboard. **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // copy desired content const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); // returns 'false', there is content in the clipboard const isClipboardEmpty = hfInstance.isClipboardEmpty(); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Returns:** *boolean* ___ ### paste ▸ **paste**(`targetLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:2445](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2445)* When called after [copy](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#copy) it pastes copied values and formulas into a cell block. When called after [cut](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#cut) it performs [moveCells](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#movecells) operation into the cell block. Does nothing if the clipboard is empty. For more information, see the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nosheetwithiderror) when the given sheet ID does not exist **`throws`** [EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-evaluationsuspendederror) when the evaluation is suspended **`throws`** [SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-sheetsizelimitexceedederror) when performing this operation would result in sheet size limits exceeding **`throws`** [NothingToPasteError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nothingtopasteerror) when clipboard is empty **`throws`** [TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-targetlocationhasarrayerror) when the selected target area has array inside **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if targetLeftCorner is of wrong type **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // [ [ 2 ] ] was copied const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); // returns a list of modified cells: their absolute addresses and new values const changes = hfInstance.paste({ sheet: 0, col: 1, row: 0 }); ``` The usage of the internal clipboard is described thoroughly in the [Clipboard Operations guide](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md). **Parameters:** Name | Type | Description | ------ | ------ | ------ | `targetLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | upper left address of the target cell block | **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Undo and Redo ### clearRedoStack ▸ **clearRedoStack**(): *void* *Defined in [src/HyperFormula.ts:2524](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2524)* Clears the redo stack in undoRedo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // do an operation, for example remove columns hfInstance.removeColumns(0, [0, 1]); // undo the operation hfInstance.undo(); // redo the operation hfInstance.redo(); // clear the redo stack hfInstance.clearRedoStack(); ``` **Returns:** *void* ___ ### clearUndoStack ▸ **clearUndoStack**(): *void* *Defined in [src/HyperFormula.ts:2551](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L2551)* Clears the undo stack in undoRedo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '3'], ]); // do an operation, for example remove columns hfInstance.removeColumns(0, [0, 1]); // undo the operation hfInstance.undo(); // clear the undo stack hfInstance.clearUndoStack(); ``` **Returns:** *void* ___ ### isThereSomethingToRedo ▸ **isThereSomethingToRedo**(): *boolean* *Defined in [src/HyperFormula.ts:1324](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1324)* Checks if there is at least one operation that can be re-done. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js hfInstance.undo(); // when there is an action to redo, this returns 'true' const isSomethingToRedo = hfInstance.isThereSomethingToRedo(); ``` **Returns:** *boolean* ___ ### isThereSomethingToUndo ▸ **isThereSomethingToUndo**(): *boolean* *Defined in [src/HyperFormula.ts:1305](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1305)* Checks if there is at least one operation that can be undone. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ['3'], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // should return 'true', it is possible to undo last operation // which is removing rows in this example const isSomethingToUndo = hfInstance.isThereSomethingToUndo(); ``` **Returns:** *boolean* ___ ### redo ▸ **redo**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1277](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1277)* Re-do recently undone operation. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoOperationToRedoError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nooperationtoredoerror) when there is no operation running that can be re-done **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1'], ['2'], ['3'], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // undo the operation, it should return previous values: [['1'], ['2'], ['3']] hfInstance.undo(); // do a redo, it should return the values after removing the second row: [['1'], ['3']] const changes = hfInstance.redo(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### undo ▸ **undo**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:1239](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L1239)* Undo the previous operation. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). Returns [an array of cells whose values changed as a result of this operation](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`throws`** [NoOperationToUndoError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-nooperationtoundoerror) when there is no operation running that can be undone **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ['3', ''], ]); // perform CRUD operation, for example remove the second row hfInstance.removeRows(0, [1, 1]); // undo the operation, it should return the changes const changes = hfInstance.undo(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ## Batch ### batch ▸ **batch**(`batchOperations`: function): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3714](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3714)* Runs the provided callback as a single [batch operation](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) and returns the changed cells. Returns [an array of cells whose values changed as a result of all batched operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). Note that this method may trigger dependency graph recalculation. **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`fires`** [evaluationSuspended](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationsuspended) always **`fires`** [evaluationResumed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationresumed) after the recomputation of necessary values **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // multiple operations in a single callback will trigger evaluation only once // and only one set of changes is returned as a combined result of all // the operations that were triggered within the callback const changes = hfInstance.batch(() => { hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setCellContents({ col: 4, row: 0, sheet: 0 }, [['=A1']]); }); ``` **Parameters:** ▪ **batchOperations**: *function* a function with operations to be performed ▸ (): *void* **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### isEvaluationSuspended ▸ **isEvaluationSuspended**(): *boolean* *Defined in [src/HyperFormula.ts:3823](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3823)* Checks if the dependency graph recalculation process is [suspended](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) or not. **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // suspend the evaluation hfInstance.suspendEvaluation(); // between suspendEvaluation() and resumeEvaluation() // or inside batch() callback it will return 'true', otherwise 'false' const isEvaluationSuspended = hfInstance.isEvaluationSuspended(); const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *boolean* ___ ### resumeEvaluation ▸ **resumeEvaluation**(): *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* *Defined in [src/HyperFormula.ts:3797](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3797)* Resumes the dependency graph recalculation that was [suspended](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) with [suspendEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#suspendevaluation). It also triggers the recalculation and returns [an array of cells whose values changed as a result of all batched operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). **`fires`** [valuesUpdated](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#valuesupdated) if recalculation was triggered by this change **`fires`** [evaluationResumed](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationresumed) after the recomputation of necessary values **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // similar to batch() but operations are not within a callback, // one method suspends the recalculation // the second will resume calculations and return the changes // first, suspend the evaluation hfInstance.suspendEvaluation(); // perform operations hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setSheetContent(1, [['50'], ['60']]); // resume the evaluation const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *[ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]* ___ ### suspendEvaluation ▸ **suspendEvaluation**(): *void* *Defined in [src/HyperFormula.ts:3761](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L3761)* Suspends the dependency graph recalculation to start a [batch operation](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). It allows optimizing the performance. With this method, multiple CRUD operations can be done without triggering recalculation after every operation. Suspending evaluation should result in an overall faster calculation compared to recalculating after each operation separately. To resume the evaluation use [resumeEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#resumeevaluation). **`fires`** [evaluationSuspended](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md#evaluationsuspended) always **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ], }); // similar to batch() but operations are not within a callback, // one method suspends the recalculation // the second will resume calculations and return the changes // suspend the evaluation with this method hfInstance.suspendEvaluation(); // perform operations hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); hfInstance.setSheetContent(1, [['50'], ['60']]); // use resumeEvaluation to resume const changes = hfInstance.resumeEvaluation(); ``` **Returns:** *void* ___ ## Events ### off ▸ **off**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4740](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4740)* Unsubscribes from an event or from all events. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // define a simple function to be called upon emitting an event const handler = ( ) => { console.log('baz') } // subscribe to a 'sheetAdded', pass the handler hfInstance.on('sheetAdded', handler); // add a sheet to trigger an event, // console should print 'baz' each time a sheet is added hfInstance.addSheet('FooBar'); // unsubscribe from a 'sheetAdded' hfInstance.off('sheetAdded', handler); // add a sheet, the console should not print anything hfInstance.addSheet('FooBaz'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ### on ▸ **on**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4680](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4680)* Subscribes to an event. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // subscribe to a 'sheetAdded', pass a simple handler hfInstance.on('sheetAdded', ( ) => { console.log('foo') }); // add a sheet to trigger an event, // console should print 'foo' after each time sheet is added in this example hfInstance.addSheet('FooBar'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ### once ▸ **once**‹**Event**›(`event`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/HyperFormula.ts:4706](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4706)* Subscribes to an event once. For the list of all available events, see [Listeners](https://hyperformula.handsontable.com/docs/api/interfaces/listeners.md). **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // subscribe to a 'sheetAdded', pass a simple handler hfInstance.once('sheetAdded', ( ) => { console.log('foo') }); // call addSheet twice, // console should print 'foo' only once when the sheet is added in this example hfInstance.addSheet('FooBar'); hfInstance.addSheet('FooBaz'); ``` **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | Description | ------ | ------ | ------ | `event` | Event | the name of the event to subscribe to | `listener` | Listeners[Event] | to be called when event is emitted | **Returns:** *void* ___ ## Custom Functions ### getAllFunctionPlugins ▸ **getAllFunctionPlugins**(): *FunctionPluginDefinition[]* *Defined in [src/HyperFormula.ts:4493](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4493)* Returns classes of all plugins registered in this instance of HyperFormula **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // return classes of all plugins registered, assign to a variable const allNames = hfInstance.getAllFunctionPlugins(); ``` **Returns:** *FunctionPluginDefinition[]* ___ ### getFunctionPlugin ▸ **getFunctionPlugin**(`functionId`: string): *FunctionPluginDefinition | undefined* *Defined in [src/HyperFormula.ts:4475](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4475)* Returns class of a plugin used by function with given id For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; const hfInstance = HyperFormula.buildEmpty(); // register a plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); // get the plugin const myPlugin = hfInstance.getFunctionPlugin('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | id of a function, e.g., 'SUMIF' | **Returns:** *FunctionPluginDefinition | undefined* ___ ### getRegisteredFunctionNames ▸ **getRegisteredFunctionNames**(): *string[]* *Defined in [src/HyperFormula.ts:4445](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L4445)* Returns translated names of all functions registered in this instance of HyperFormula according to the language set in the configuration **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // return translated names of all functions, assign to a variable const allNames = hfInstance.getRegisteredFunctionNames(); ``` **Returns:** *string[]* ___ ## Static Methods ### getAllFunctionPlugins ▸ **getAllFunctionPlugins**(): *FunctionPluginDefinition[]* *Defined in [src/HyperFormula.ts:652](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L652)* Returns classes of all plugins registered in HyperFormula. **`example`** ```js // return classes of all plugins const allClasses = HyperFormula.getAllFunctionPlugins(); ``` **Returns:** *FunctionPluginDefinition[]* ___ ### getFunctionPlugin ▸ **getFunctionPlugin**(`functionId`: string): *FunctionPluginDefinition | undefined* *Defined in [src/HyperFormula.ts:636](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L636)* Returns class of a plugin used by function with given id For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); // return the class of a given plugin const myFunctionClass = HyperFormula.getFunctionPlugin('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | id of a function, e.g., 'SUMIF' | **Returns:** *FunctionPluginDefinition | undefined* ___ ### getLanguage ▸ **getLanguage**(`languageCode`: string): *TranslationPackage* *Defined in [src/HyperFormula.ts:375](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L375)* Returns registered language from its code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-languagenotregisterederror) when trying to retrieve not registered language **`example`** ```js // return registered language const language = HyperFormula.getLanguage('enGB'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | **Returns:** *TranslationPackage* ___ ### getRegisteredFunctionNames ▸ **getRegisteredFunctionNames**(`code`: string): *string[]* *Defined in [src/HyperFormula.ts:606](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L606)* Returns translated names of all registered functions for a given language **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js // return a list of function names registered for enGB const allNames = HyperFormula.getRegisteredFunctionNames('enGB'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `code` | string | language code | **Returns:** *string[]* ___ ### getRegisteredLanguagesCodes ▸ **getRegisteredLanguagesCodes**(): *string[]* *Defined in [src/HyperFormula.ts:456](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L456)* Returns all registered languages codes. **`example`** ```js // should return all registered language codes: ['enGB', 'plPL'] const registeredLanguages = HyperFormula.getRegisteredLanguagesCodes(); ``` **Returns:** *string[]* ___ ### registerFunction ▸ **registerFunction**(`functionId`: string, `plugin`: FunctionPluginDefinition, `translations?`: FunctionTranslationsPackage): *void* *Defined in [src/HyperFormula.ts:540](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L540)* Registers a function with a given id if such exists in a plugin. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-functionpluginvalidationerror) when function with a given id does not exist in plugin or plugin class definition is not consistent with metadata **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-protectedfunctiontranslationerror) when trying to register translation for protected function **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a function HyperFormula.registerFunction('EXAMPLE', MyExamplePlugin); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | function id, e.g., 'SUMIF' | `plugin` | FunctionPluginDefinition | plugin class | `translations?` | FunctionTranslationsPackage | translations for the function name | **Returns:** *void* ___ ### registerFunctionPlugin ▸ **registerFunctionPlugin**(`plugin`: FunctionPluginDefinition, `translations?`: FunctionTranslationsPackage): *void* *Defined in [src/HyperFormula.ts:486](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L486)* Registers all functions in a given plugin with optional translations. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: FunctionPlugins must be registered prior to the creation of HyperFormula instances in which they are used. HyperFormula instances created prior to the registration of a FunctionPlugin are unable to access the FunctionPlugin. Registering a FunctionPlugin with [[custom-functions]] requires the translations parameter. **`throws`** [FunctionPluginValidationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-functionpluginvalidationerror) when plugin class definition is not consistent with metadata **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-protectedfunctiontranslationerror) when trying to register translation for protected function **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register the plugin HyperFormula.registerFunctionPlugin(MyExamplePlugin); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `plugin` | FunctionPluginDefinition | plugin class | `translations?` | FunctionTranslationsPackage | optional package of function names translations | **Returns:** *void* ___ ### registerLanguage ▸ **registerLanguage**(`languageCode`: string, `languagePackage`: RawTranslationPackage): *void* *Defined in [src/HyperFormula.ts:406](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L406)* Registers language under given code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-protectedfunctiontranslationerror) when trying to register translation for protected function **`throws`** [LanguageAlreadyRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-languagealreadyregisterederror) when given language is already registered **`example`** ```js // return registered language HyperFormula.registerLanguage('enUS', enUS); const engine = HyperFormula.buildEmpty({language: 'enUS'}); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | `languagePackage` | RawTranslationPackage | translation package to be registered | **Returns:** *void* ___ ### unregisterAllFunctions ▸ **unregisterAllFunctions**(): *void* *Defined in [src/HyperFormula.ts:587](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L587)* Clears function registry. Note: This method does not affect the existing HyperFormula instances. **`example`** ```js HyperFormula.unregisterAllFunctions(); ``` **Returns:** *void* ___ ### unregisterFunction ▸ **unregisterFunction**(`functionId`: string): *void* *Defined in [src/HyperFormula.ts:570](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L570)* Unregisters a function with a given id. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`example`** ```js // import your own plugin import { MyExamplePlugin } from './file_with_your_plugin'; // register a function HyperFormula.registerFunction('EXAMPLE', MyExamplePlugin); // unregister a function HyperFormula.unregisterFunction('EXAMPLE'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `functionId` | string | function id, e.g., 'SUMIF' | **Returns:** *void* ___ ### unregisterFunctionPlugin ▸ **unregisterFunctionPlugin**(`plugin`: FunctionPluginDefinition): *void* *Defined in [src/HyperFormula.ts:510](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L510)* Unregisters all functions defined in given plugin. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). Note: This method does not affect the existing HyperFormula instances. **`example`** ```js // get the class of a plugin const registeredPluginClass = HyperFormula.getFunctionPlugin('EXAMPLE'); // unregister all functions defined in a plugin of ID 'EXAMPLE' HyperFormula.unregisterFunctionPlugin(registeredPluginClass); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `plugin` | FunctionPluginDefinition | plugin class | **Returns:** *void* ___ ### unregisterLanguage ▸ **unregisterLanguage**(`languageCode`: string): *void* *Defined in [src/HyperFormula.ts:436](https://github.com/handsontable/hyperformula/blob/af2d59d/src/HyperFormula.ts#L436)* Unregisters language that is registered under given code string. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`throws`** [ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-expectedvalueoftypeerror) if any of its basic type argument is of wrong type **`throws`** [LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-languagenotregisterederror) when given language is not registered **`example`** ```js // register the language for the instance HyperFormula.registerLanguage('plPL', plPL); // unregister plPL HyperFormula.unregisterLanguage('plPL'); ``` **Parameters:** Name | Type | Description | ------ | ------ | ------ | `languageCode` | string | code string of the translation package | **Returns:** *void* --- ## InvalidAddressError URL: https://hyperformula.handsontable.com/docs/api/classes/invalidaddresserror # InvalidAddressError Error thrown when the given address is invalid. ## Constructors ### constructor \+ **new InvalidAddressError**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[InvalidAddressError](https://hyperformula.handsontable.com/docs/api/classes/invalidaddresserror.md)* *Defined in [src/errors.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L56)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[InvalidAddressError](https://hyperformula.handsontable.com/docs/api/classes/invalidaddresserror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## InternalNamedExpression URL: https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression # InternalNamedExpression ## Constructors ### constructor \+ **new InternalNamedExpression**(`displayName`: string, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `added`: boolean, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L24)* **Parameters:** Name | Type | ------ | ------ | `displayName` | string | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `added` | boolean | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ## Properties ### added • **added**: *boolean* *Defined in [src/NamedExpressions.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L28)* ___ ### address • **address**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/NamedExpressions.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L27)* ___ ### displayName • **displayName**: *string* *Defined in [src/NamedExpressions.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L26)* ___ ### options • **options**? : *[NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)* *Defined in [src/NamedExpressions.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L29)* ## Methods ### copy ▸ **copy**(): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L37)* **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ___ ### normalizeExpressionName ▸ **normalizeExpressionName**(): *string* *Defined in [src/NamedExpressions.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L33)* **Returns:** *string* --- ## InvalidArgumentsError URL: https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror # InvalidArgumentsError Error thrown when the given arguments are invalid ## Constructors ### constructor \+ **new InvalidArgumentsError**(`expectedArguments`: string): *[InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md)* *Defined in [src/errors.ts:65](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L65)* **Parameters:** Name | Type | ------ | ------ | `expectedArguments` | string | **Returns:** *[InvalidArgumentsError](https://hyperformula.handsontable.com/docs/api/classes/invalidargumentserror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## LanguageAlreadyRegisteredError URL: https://hyperformula.handsontable.com/docs/api/classes/languagealreadyregisterederror # LanguageAlreadyRegisteredError Error thrown when trying to register already registered language **`see`** [registerLanguage](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerlanguage) ## Constructors ### constructor \+ **new LanguageAlreadyRegisteredError**(): *[LanguageAlreadyRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagealreadyregisterederror.md)* *Defined in [src/errors.ts:302](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L302)* **Returns:** *[LanguageAlreadyRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagealreadyregisterederror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## LanguageNotRegisteredError URL: https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror # LanguageNotRegisteredError Error thrown when trying to retrieve not registered language **`see`** [getLanguage](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-getlanguage) **`see`** [unregisterLanguage](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-unregisterlanguage) ## Constructors ### constructor \+ **new LanguageNotRegisteredError**(): *[LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror.md)* *Defined in [src/errors.ts:291](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L291)* **Returns:** *[LanguageNotRegisteredError](https://hyperformula.handsontable.com/docs/api/classes/languagenotregisterederror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## LazilyTransformingAstService URL: https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice # LazilyTransformingAstService Manages lazy application of formula AST transformations. ## Problem Structural operations (adding/removing rows/columns, moving cells, renaming sheets) require updating every formula that references the affected area. Applying these transformations eagerly to all formulas after every operation is expensive, especially for large spreadsheets with many formulas. ## Solution: Lazy Transformation Instead of transforming all formulas immediately, this service stores transformations in a queue. Each formula vertex (FormulaVertex) and column index entry (ValueIndex) tracks its own version number. When a consumer needs up-to-date data, it calls `applyTransformations()` with its current version and receives all transformations accumulated since that version. ## Compaction Over time, the transformations array grows unboundedly. To prevent this memory leak, the engine periodically triggers compaction when the number of accumulated transformations reaches the configurable `maxPendingLazyTransformations`: 1. All FormulaVertex instances are forced to apply pending transformations (via `DependencyGraph.forceApplyPostponedTransformations()`). 2. All ColumnIndex entries are forced to apply pending transformations (via `ColumnSearchStrategy.forceApplyPostponedTransformations()`). 3. `compact()` is called, which advances `versionOffset` and clears the transformations array. 4. `UndoRedo.cleanupOrphanedOldData()` removes any oldData entries that were written during forced application but belong to already-evicted undo entries. The `versionOffset` ensures that version numbers remain globally consistent after compaction: `version() = versionOffset + transformations.length`. ## Constructors ### constructor \+ **new LazilyTransformingAstService**(`stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md), `maxPendingLazyTransformations`: number): *[LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md)* *Defined in [src/LazilyTransformingAstService.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L54)* **Parameters:** Name | Type | ------ | ------ | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | `maxPendingLazyTransformations` | number | **Returns:** *[LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md)* ## Properties ### parser • **parser**? : *ParserWithCaching* *Defined in [src/LazilyTransformingAstService.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L49)* ___ ### undoRedo • **undoRedo**? : *[UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)* *Defined in [src/LazilyTransformingAstService.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L50)* ## Methods ### addTransformation ▸ **addTransformation**(`transformation`: FormulaTransformer): *number* *Defined in [src/LazilyTransformingAstService.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L66)* **Parameters:** Name | Type | ------ | ------ | `transformation` | FormulaTransformer | **Returns:** *number* ___ ### applyTransformations ▸ **applyTransformations**(`ast`: Ast, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `version`: number): *[Ast, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), number]* *Defined in [src/LazilyTransformingAstService.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L88)* **Parameters:** Name | Type | ------ | ------ | `ast` | Ast | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `version` | number | **Returns:** *[Ast, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), number]* ___ ### beginCombinedMode ▸ **beginCombinedMode**(`sheet`: number): *void* *Defined in [src/LazilyTransformingAstService.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L75)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *void* ___ ### commitCombinedMode ▸ **commitCombinedMode**(): *number* *Defined in [src/LazilyTransformingAstService.ts:79](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L79)* **Returns:** *number* ___ ### compact ▸ **compact**(): *void* *Defined in [src/LazilyTransformingAstService.ts:135](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L135)* Compacts the transformations array by discarding all entries that have already been applied by every consumer. Safe to call only after all FormulaVertex and ColumnIndex consumers have been brought up to the current version. After calling, UndoRedo.cleanupOrphanedOldData() must be invoked to remove oldData entries written during forceApplyPostponedTransformations for already-evicted undo entries. **Returns:** *void* ___ ### getTransformationsFrom ▸ **getTransformationsFrom**(`version`: number, `filter?`: undefined | function): *IterableIterator‹FormulaTransformer›* *Defined in [src/LazilyTransformingAstService.ts:109](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L109)* **Parameters:** Name | Type | ------ | ------ | `version` | number | `filter?` | undefined | function | **Returns:** *IterableIterator‹FormulaTransformer›* ___ ### needsCompaction ▸ **needsCompaction**(): *boolean* *Defined in [src/LazilyTransformingAstService.ts:123](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L123)* Returns true when enough transformations have accumulated to justify the cost of forcing all consumers (FormulaVertex, ColumnIndex) to apply pending changes. **Returns:** *boolean* ___ ### version ▸ **version**(): *number* *Defined in [src/LazilyTransformingAstService.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/LazilyTransformingAstService.ts#L62)* **Returns:** *number* --- ## MissingTranslationError URL: https://hyperformula.handsontable.com/docs/api/classes/missingtranslationerror # MissingTranslationError Error thrown when translation is missing in translation package. ## Constructors ### constructor \+ **new MissingTranslationError**(`key`: string): *[MissingTranslationError](https://hyperformula.handsontable.com/docs/api/classes/missingtranslationerror.md)* *Defined in [src/errors.ts:266](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L266)* **Parameters:** Name | Type | ------ | ------ | `key` | string | **Returns:** *[MissingTranslationError](https://hyperformula.handsontable.com/docs/api/classes/missingtranslationerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## MoveCellsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry # MoveCellsUndoEntry ## Constructors ### constructor \+ **new MoveCellsUndoEntry**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number, `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `overwrittenCellsData`: [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][], `addedGlobalNamedExpressions`: string[], `version`: number): *[MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md)* *Defined in [src/UndoRedo.ts:68](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L68)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `overwrittenCellsData` | [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][] | `addedGlobalNamedExpressions` | string[] | `version` | number | **Returns:** *[MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md)* ## Properties ### addedGlobalNamedExpressions • **addedGlobalNamedExpressions**: *string[]* *Defined in [src/UndoRedo.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L75)* ___ ### destinationLeftCorner • **destinationLeftCorner**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/UndoRedo.ts:73](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L73)* ___ ### height • **height**: *number* *Defined in [src/UndoRedo.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L72)* ___ ### overwrittenCellsData • **overwrittenCellsData**: *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/UndoRedo.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L74)* ___ ### sourceLeftCorner • **sourceLeftCorner**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/UndoRedo.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L70)* ___ ### version • **version**: *number* *Defined in [src/UndoRedo.ts:76](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L76)* ___ ### width • **width**: *number* *Defined in [src/UndoRedo.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L71)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:85](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L85)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L81)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:89](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L89)* **Returns:** *number[]* --- ## MoveColumnsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry # MoveColumnsUndoEntry ## Constructors ### constructor \+ **new MoveColumnsUndoEntry**(`sheet`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number, `version`: number): *[MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md)* *Defined in [src/UndoRedo.ts:195](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L195)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startColumn` | number | `numberOfColumns` | number | `targetColumn` | number | `version` | number | **Returns:** *[MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md)* ## Properties ### numberOfColumns • **numberOfColumns**: *number* *Defined in [src/UndoRedo.ts:200](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L200)* ___ ### sheet • **sheet**: *number* *Defined in [src/UndoRedo.ts:198](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L198)* ___ ### startColumn • **startColumn**: *number* *Defined in [src/UndoRedo.ts:199](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L199)* ___ ### targetColumn • **targetColumn**: *number* *Defined in [src/UndoRedo.ts:201](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L201)* ___ ### undoEnd • **undoEnd**: *number* *Defined in [src/UndoRedo.ts:195](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L195)* ___ ### undoStart • **undoStart**: *number* *Defined in [src/UndoRedo.ts:194](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L194)* ___ ### version • **version**: *number* *Defined in [src/UndoRedo.ts:202](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L202)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:213](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L213)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:209](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L209)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:217](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L217)* **Returns:** *number[]* --- ## MoveRowsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry # MoveRowsUndoEntry ## Constructors ### constructor \+ **new MoveRowsUndoEntry**(`sheet`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number, `version`: number): *[MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md)* *Defined in [src/UndoRedo.ts:166](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L166)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startRow` | number | `numberOfRows` | number | `targetRow` | number | `version` | number | **Returns:** *[MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md)* ## Properties ### numberOfRows • **numberOfRows**: *number* *Defined in [src/UndoRedo.ts:171](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L171)* ___ ### sheet • **sheet**: *number* *Defined in [src/UndoRedo.ts:169](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L169)* ___ ### startRow • **startRow**: *number* *Defined in [src/UndoRedo.ts:170](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L170)* ___ ### targetRow • **targetRow**: *number* *Defined in [src/UndoRedo.ts:172](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L172)* ___ ### undoEnd • **undoEnd**: *number* *Defined in [src/UndoRedo.ts:166](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L166)* ___ ### undoStart • **undoStart**: *number* *Defined in [src/UndoRedo.ts:165](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L165)* ___ ### version • **version**: *number* *Defined in [src/UndoRedo.ts:173](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L173)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:184](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L184)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:180](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L180)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:188](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L188)* **Returns:** *number[]* --- ## NamedExpressionDoesNotExistError URL: https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror # NamedExpressionDoesNotExistError Error thrown when the given named expression does not exist. ## Constructors ### constructor \+ **new NamedExpressionDoesNotExistError**(`expressionName`: string): *[NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror.md)* *Defined in [src/errors.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L101)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[NamedExpressionDoesNotExistError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressiondoesnotexisterror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NamedExpressionNameIsAlreadyTakenError URL: https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisalreadytakenerror # NamedExpressionNameIsAlreadyTakenError Error thrown when the given named expression already exists in the workbook and therefore it cannot be added. ## Constructors ### constructor \+ **new NamedExpressionNameIsAlreadyTakenError**(`expressionName`: string): *[NamedExpressionNameIsAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisalreadytakenerror.md)* *Defined in [src/errors.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L83)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[NamedExpressionNameIsAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisalreadytakenerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NamedExpressionNameIsInvalidError URL: https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisinvaliderror # NamedExpressionNameIsInvalidError Error thrown when the name given for the named expression is invalid. ## Constructors ### constructor \+ **new NamedExpressionNameIsInvalidError**(`expressionName`: string): *[NamedExpressionNameIsInvalidError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisinvaliderror.md)* *Defined in [src/errors.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L92)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[NamedExpressionNameIsInvalidError](https://hyperformula.handsontable.com/docs/api/classes/namedexpressionnameisinvaliderror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NamedExpressions URL: https://hyperformula.handsontable.com/docs/api/classes/namedexpressions # NamedExpressions ## Properties ### SHEET_FOR_WORKBOOK_EXPRESSIONS ▪ **SHEET_FOR_WORKBOOK_EXPRESSIONS**: *number* = -1 *Defined in [src/NamedExpressions.ts:127](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L127)* ## Methods ### addNamedExpression ▸ **addNamedExpression**(`expressionName`: string, `sheetId?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:189](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L189)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ___ ### getAllNamedExpressions ▸ **getAllNamedExpressions**(): *object[]* *Defined in [src/NamedExpressions.ts:251](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L251)* **Returns:** *object[]* ___ ### getAllNamedExpressionsForScope ▸ **getAllNamedExpressionsForScope**(`scope?`: undefined | number): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* *Defined in [src/NamedExpressions.ts:273](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L273)* **Parameters:** Name | Type | ------ | ------ | `scope?` | undefined | number | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* ___ ### getAllNamedExpressionsNames ▸ **getAllNamedExpressionsNames**(): *string[]* *Defined in [src/NamedExpressions.ts:247](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L247)* **Returns:** *string[]* ___ ### getAllNamedExpressionsNamesInScope ▸ **getAllNamedExpressionsNamesInScope**(`sheetId?`: undefined | number): *string[]* *Defined in [src/NamedExpressions.ts:243](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L243)* **Parameters:** Name | Type | ------ | ------ | `sheetId?` | undefined | number | **Returns:** *string[]* ___ ### isExpressionInScope ▸ **isExpressionInScope**(`expressionName`: string, `sheetId`: number): *boolean* *Defined in [src/NamedExpressions.ts:162](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L162)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId` | number | **Returns:** *boolean* ___ ### isNameAvailable ▸ **isNameAvailable**(`expressionName`: string, `sheetId?`: undefined | number): *boolean* *Defined in [src/NamedExpressions.ts:133](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L133)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *boolean* ___ ### isNameValid ▸ **isNameValid**(`expressionName`: string): *boolean* *Defined in [src/NamedExpressions.ts:177](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L177)* Checks the validity of a named-expression's name. The name: - Must start with a Unicode letter or with an underscore (`_`). - Can contain only Unicode letters, numbers, underscores, and periods (`.`). - Can't be the same as any possible reference in the A1 notation (`[A-Za-z]+[0-9]+`). - Can't be the same as any possible reference in the R1C1 notation (`[rR][0-9]*[cC][0-9]*`). The naming rules follow the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html#__RefHeading__1017964_715980110) standard. **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *boolean* ___ ### namedExpressionForScope ▸ **namedExpressionForScope**(`expressionName`: string, `sheetId?`: undefined | number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:150](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L150)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### namedExpressionInAddress ▸ **namedExpressionInAddress**(`row`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:141](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L141)* **Parameters:** Name | Type | ------ | ------ | `row` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### namedExpressionOrPlaceholder ▸ **namedExpressionOrPlaceholder**(`expressionName`: string, `sheetId`: number): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:212](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L212)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId` | number | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ___ ### nearestNamedExpression ▸ **nearestNamedExpression**(`expressionName`: string, `sheetId`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:158](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L158)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### remove ▸ **remove**(`expressionName`: string, `sheetId?`: undefined | number): *void* *Defined in [src/NamedExpressions.ts:225](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L225)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *void* ___ ### restoreNamedExpression ▸ **restoreNamedExpression**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), `sheetId?`: undefined | number): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L204)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | `sheetId?` | undefined | number | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* ___ ### workbookNamedExpressionOrPlaceholder ▸ **workbookNamedExpressionOrPlaceholder**(`expressionName`: string): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/NamedExpressions.ts:216](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L216)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* --- ## NoOperationToRedoError URL: https://hyperformula.handsontable.com/docs/api/classes/nooperationtoredoerror # NoOperationToRedoError Error thrown when there are no operations to redo by the [redo](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#redo) method. ## Constructors ### constructor \+ **new NoOperationToRedoError**(): *[NoOperationToRedoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoredoerror.md)* *Defined in [src/errors.ts:119](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L119)* **Returns:** *[NoOperationToRedoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoredoerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NoOperationToUndoError URL: https://hyperformula.handsontable.com/docs/api/classes/nooperationtoundoerror # NoOperationToUndoError Error thrown when there are no operations to be undone by the [undo](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#undo) method. ## Constructors ### constructor \+ **new NoOperationToUndoError**(): *[NoOperationToUndoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoundoerror.md)* *Defined in [src/errors.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L110)* **Returns:** *[NoOperationToUndoError](https://hyperformula.handsontable.com/docs/api/classes/nooperationtoundoerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NoRelativeAddressesAllowedError URL: https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror # NoRelativeAddressesAllowedError Error thrown when named expression contains relative addresses. **`see`** [addNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md#addnamedexpression) **`see`** [changeNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#changenamedexpression) ## Constructors ### constructor \+ **new NoRelativeAddressesAllowedError**(): *[NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror.md)* *Defined in [src/errors.ts:378](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L378)* **Returns:** *[NoRelativeAddressesAllowedError](https://hyperformula.handsontable.com/docs/api/classes/norelativeaddressesallowederror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NoSheetWithIdError URL: https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror # NoSheetWithIdError Error thrown when the sheet of a given ID does not exist. ## Constructors ### constructor \+ **new NoSheetWithIdError**(`sheetId`: number): *[NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md)* *Defined in [src/errors.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L11)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *[NoSheetWithIdError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithiderror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NoSheetWithNameError URL: https://hyperformula.handsontable.com/docs/api/classes/nosheetwithnameerror # NoSheetWithNameError Error thrown when the sheet of a given name does not exist. ## Constructors ### constructor \+ **new NoSheetWithNameError**(`sheetName`: string): *[NoSheetWithNameError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithnameerror.md)* *Defined in [src/errors.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L20)* **Parameters:** Name | Type | ------ | ------ | `sheetName` | string | **Returns:** *[NoSheetWithNameError](https://hyperformula.handsontable.com/docs/api/classes/nosheetwithnameerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NotAFormulaError URL: https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror # NotAFormulaError Error thrown when the the provided string is not a valid formula, i.e does not start with "=" ## Constructors ### constructor \+ **new NotAFormulaError**(): *[NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md)* *Defined in [src/errors.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L47)* **Returns:** *[NotAFormulaError](https://hyperformula.handsontable.com/docs/api/classes/notaformulaerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NotComputedArray URL: https://hyperformula.handsontable.com/docs/api/classes/notcomputedarray # NotComputedArray ## Constructors ### constructor \+ **new NotComputedArray**(`size`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)): *[NotComputedArray](https://hyperformula.handsontable.com/docs/api/classes/notcomputedarray.md)* *Defined in [src/ArrayValue.ts:23](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L23)* **Parameters:** Name | Type | ------ | ------ | `size` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | **Returns:** *[NotComputedArray](https://hyperformula.handsontable.com/docs/api/classes/notcomputedarray.md)* ## Properties ### size • **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArrayValue.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L24)* ## Methods ### get ▸ **get**(`col`: number, `row`: number): *number* *Defined in [src/ArrayValue.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L36)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *number* ___ ### height ▸ **height**(): *number* *Defined in [src/ArrayValue.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L31)* **Returns:** *number* ___ ### simpleRangeValue ▸ **simpleRangeValue**(): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/ArrayValue.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L40)* **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### width ▸ **width**(): *number* *Defined in [src/ArrayValue.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L27)* **Returns:** *number* --- ## NothingToPasteError URL: https://hyperformula.handsontable.com/docs/api/classes/nothingtopasteerror # NothingToPasteError Error thrown when there is nothing to paste by the [paste](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#paste) method. ## Constructors ### constructor \+ **new NothingToPasteError**(): *[NothingToPasteError](https://hyperformula.handsontable.com/docs/api/classes/nothingtopasteerror.md)* *Defined in [src/errors.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L128)* **Returns:** *[NothingToPasteError](https://hyperformula.handsontable.com/docs/api/classes/nothingtopasteerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## NumberLiteralHelper URL: https://hyperformula.handsontable.com/docs/api/classes/numberliteralhelper # NumberLiteralHelper ## Constructors ### constructor \+ **new NumberLiteralHelper**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)): *[NumberLiteralHelper](https://hyperformula.handsontable.com/docs/api/classes/numberliteralhelper.md)* *Defined in [src/NumberLiteralHelper.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NumberLiteralHelper.ts#L11)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | **Returns:** *[NumberLiteralHelper](https://hyperformula.handsontable.com/docs/api/classes/numberliteralhelper.md)* ## Methods ### numericStringToMaybeNumber ▸ **numericStringToMaybeNumber**(`input`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹number›* *Defined in [src/NumberLiteralHelper.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NumberLiteralHelper.ts#L27)* **Parameters:** Name | Type | ------ | ------ | `input` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹number›* ___ ### numericStringToNumber ▸ **numericStringToNumber**(`input`: string): *number* *Defined in [src/NumberLiteralHelper.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NumberLiteralHelper.ts#L39)* **Parameters:** Name | Type | ------ | ------ | `input` | string | **Returns:** *number* --- ## Operations URL: https://hyperformula.handsontable.com/docs/api/classes/operations # Operations ## Constructors ### constructor \+ **new Operations**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `dependencyGraph`: DependencyGraph, `columnSearch`: [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md), `cellContentParser`: [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md), `parser`: ParserWithCaching, `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md), `lazilyTransformingAstService`: [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md), `namedExpressions`: [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md), `arraySizePredictor`: [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md)): *[Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md)* *Defined in [src/Operations.ts:160](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L160)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `dependencyGraph` | DependencyGraph | `columnSearch` | [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md) | `cellContentParser` | [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md) | `parser` | ParserWithCaching | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | `lazilyTransformingAstService` | [LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md) | `namedExpressions` | [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md) | `arraySizePredictor` | [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md) | **Returns:** *[Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md)* ## Methods ### addColumns ▸ **addColumns**(`cmd`: [AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md)): *void* *Defined in [src/Operations.ts:203](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L203)* **Parameters:** Name | Type | ------ | ------ | `cmd` | [AddColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/addcolumnscommand.md) | **Returns:** *void* ___ ### addNamedExpression ▸ **addNamedExpression**(`expressionName`: string, `expression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `sheetId?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *void* *Defined in [src/Operations.ts:420](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L420)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `expression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `sheetId?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *void* ___ ### addPlaceholderSheetWithId ▸ **addPlaceholderSheetWithId**(`sheetId`: number, `name`: string): *void* *Defined in [src/Operations.ts:253](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L253)* Adds a placeholder sheet with a specific ID for undo operations. Used to restore previously merged placeholder sheets. Note: Unlike `addSheetWithId`, this does NOT call `dependencyGraph.addSheet()` because placeholders don't need dirty marking or strategy changes - they only need to exist in the mappings so formulas can reference them again. **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `name` | string | **Returns:** *void* ___ ### addRows ▸ **addRows**(`cmd`: [AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md)): *void* *Defined in [src/Operations.ts:197](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L197)* **Parameters:** Name | Type | ------ | ------ | `cmd` | [AddRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/addrowscommand.md) | **Returns:** *void* ___ ### addSheet ▸ **addSheet**(`name?`: undefined | string): *object* *Defined in [src/Operations.ts:231](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L231)* Adds a new sheet to the workbook. **Parameters:** Name | Type | ------ | ------ | `name?` | undefined | string | **Returns:** *object* * **sheetId**: *number* * **sheetName**: *string* ___ ### addSheetWithId ▸ **addSheetWithId**(`sheetId`: number, `name`: string): *void* *Defined in [src/Operations.ts:240](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L240)* Adds a sheet with a specific ID for redo operations. **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `name` | string | **Returns:** *void* ___ ### changeNamedExpressionExpression ▸ **changeNamedExpressionExpression**(`expressionName`: string, `newExpression`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent), `sheetId?`: undefined | number, `options?`: [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)): *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* *Defined in [src/Operations.ts:433](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L433)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `newExpression` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | `sheetId?` | undefined | number | `options?` | [NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions) | **Returns:** *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* ___ ### clearSheet ▸ **clearSheet**(`sheetId`: number): *void* *Defined in [src/Operations.ts:223](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L223)* Clears the sheet content. **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### ensureItIsPossibleToMoveCells ▸ **ensureItIsPossibleToMoveCells**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number, `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Operations.ts:466](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L466)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### forceApplyPostponedTransformations ▸ **forceApplyPostponedTransformations**(): *void* *Defined in [src/Operations.ts:745](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L745)* Forces all formula vertices and column index entries to apply pending lazy transformations, bringing them up to the current LazilyTransformingAstService version. Called before undo of move operations and before compaction. **Returns:** *void* ___ ### getAndClearContentChanges ▸ **getAndClearContentChanges**(): *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* *Defined in [src/Operations.ts:734](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L734)* **Returns:** *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* ___ ### getClipboardCell ▸ **getClipboardCell**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)* *Defined in [src/Operations.ts:549](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L549)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)* ___ ### getOldContent ▸ **getOldContent**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* *Defined in [src/Operations.ts:530](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L530)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* ___ ### getRangeClipboardCells ▸ **getRangeClipboardCells**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)): *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:590](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L590)* **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | **Returns:** *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* ___ ### getSheetClipboardCells ▸ **getSheetClipboardCells**(`sheet`: number): *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/Operations.ts:574](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L574)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* ___ ### moveCells ▸ **moveCells**(`sourceLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number, `destinationLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[MoveCellsResult](https://hyperformula.handsontable.com/docs/api/interfaces/movecellsresult.md)* *Defined in [src/Operations.ts:343](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L343)* **Parameters:** Name | Type | ------ | ------ | `sourceLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | `destinationLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[MoveCellsResult](https://hyperformula.handsontable.com/docs/api/interfaces/movecellsresult.md)* ___ ### moveColumns ▸ **moveColumns**(`sheet`: number, `startColumn`: number, `numberOfColumns`: number, `targetColumn`: number): *number* *Defined in [src/Operations.ts:324](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L324)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startColumn` | number | `numberOfColumns` | number | `targetColumn` | number | **Returns:** *number* ___ ### moveRows ▸ **moveRows**(`sheet`: number, `startRow`: number, `numberOfRows`: number, `targetRow`: number): *number* *Defined in [src/Operations.ts:305](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L305)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `startRow` | number | `numberOfRows` | number | `targetRow` | number | **Returns:** *number* ___ ### removeColumns ▸ **removeColumns**(`cmd`: [RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md)): *[ColumnsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval.md)[]* *Defined in [src/Operations.ts:209](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L209)* **Parameters:** Name | Type | ------ | ------ | `cmd` | [RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md) | **Returns:** *[ColumnsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval.md)[]* ___ ### removeNamedExpression ▸ **removeNamedExpression**(`expressionName`: string, `sheetId?`: undefined | number): *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* *Defined in [src/Operations.ts:447](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L447)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | `sheetId?` | undefined | number | **Returns:** *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* ___ ### removeRows ▸ **removeRows**(`cmd`: [RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md)): *[RowsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval.md)[]* *Defined in [src/Operations.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L186)* **Parameters:** Name | Type | ------ | ------ | `cmd` | [RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md) | **Returns:** *[RowsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval.md)[]* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:261](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L261)* Removes a sheet from the workbook. **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* ___ ### removeSheetByName ▸ **removeSheetByName**(`sheetName`: string): *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)‹›, [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:273](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L273)* Removes a sheet from the workbook by name. **Parameters:** Name | Type | ------ | ------ | `sheetName` | string | **Returns:** *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)‹›, [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* ___ ### renameSheet ▸ **renameSheet**(`sheetId`: number, `newName`: string): *object* *Defined in [src/Operations.ts:281](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L281)* Renames a sheet in the workbook. **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `newName` | string | **Returns:** *object* * **mergedPlaceholderSheetId**? : *undefined | number* * **previousDisplayName**: *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* * **version**? : *undefined | number* ___ ### restoreCell ▸ **restoreCell**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `clipboardCell`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)): *void* *Defined in [src/Operations.ts:509](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L509)* Restores a single cell. **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `clipboardCell` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell) | **Returns:** *void* ___ ### restoreClipboardCells ▸ **restoreClipboardCells**(`sourceSheetId`: number, `cells`: IterableIterator‹[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]›): *string[]* *Defined in [src/Operations.ts:493](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L493)* **Parameters:** Name | Type | ------ | ------ | `sourceSheetId` | number | `cells` | IterableIterator‹[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]› | **Returns:** *string[]* ___ ### restoreNamedExpression ▸ **restoreNamedExpression**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), `content`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell), `sheetId?`: undefined | number): *void* *Defined in [src/Operations.ts:426](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L426)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | `content` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell) | `sheetId?` | undefined | number | **Returns:** *void* ___ ### rowEffectivelyNotInSheet ▸ **rowEffectivelyNotInSheet**(`row`: number, `sheet`: number): *boolean* *Defined in [src/Operations.ts:729](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L729)* Returns true if row number is outside of given sheet. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `row` | number | row number | `sheet` | number | sheet ID number | **Returns:** *boolean* ___ ### setCellContent ▸ **setCellContent**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `newCellContent`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)): *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* *Defined in [src/Operations.ts:598](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L598)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `newCellContent` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent) | **Returns:** *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)]* ___ ### setCellEmpty ▸ **setCellEmpty**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Operations.ts:695](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L695)* Sets cell content to an empty value. Creates an EmptyCellVertex and updates the dependency graph and column search index. **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### setColumnOrder ▸ **setColumnOrder**(`sheetId`: number, `columnMapping`: [number, number][]): *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:399](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L399)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | **Returns:** *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* ___ ### setFormulaToCell ▸ **setFormulaToCell**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `size`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md), `__namedParameters`: object): *void* *Defined in [src/Operations.ts:663](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L663)* Sets cell content to a formula. Creates a ScalarFormulaVertex and updates the dependency graph and column search index. **Parameters:** ▪ **address**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ▪ **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* ▪ **__namedParameters**: *object* Name | Type | ------ | ------ | `ast` | Ast | `dependencies` | RelativeDependency[] | `hasStructuralChangeFunction` | boolean | `hasVolatileFunction` | boolean | **Returns:** *void* ___ ### setFormulaToCellFromCache ▸ **setFormulaToCellFromCache**(`formulaHash`: string, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Operations.ts:709](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L709)* **Parameters:** Name | Type | ------ | ------ | `formulaHash` | string | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### setParsingErrorToCell ▸ **setParsingErrorToCell**(`rawInput`: string, `errors`: ParsingError[], `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Operations.ts:648](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L648)* Sets cell content to an instance of parsing error. Creates a ParsingErrorVertex and updates the dependency graph and column search index. **Parameters:** Name | Type | ------ | ------ | `rawInput` | string | `errors` | ParsingError[] | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### setRowOrder ▸ **setRowOrder**(`sheetId`: number, `rowMapping`: [number, number][]): *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:378](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L378)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `rowMapping` | [number, number][] | **Returns:** *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* ___ ### setSheetContent ▸ **setSheetContent**(`sheetId`: number, `newSheetContent`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *void* *Defined in [src/Operations.ts:634](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L634)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `newSheetContent` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | **Returns:** *void* ___ ### setValueToCell ▸ **setValueToCell**(`value`: RawAndParsedValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Operations.ts:681](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L681)* Sets cell content to a value. Creates a ValueCellVertex and updates the dependency graph and column search index. **Parameters:** Name | Type | ------ | ------ | `value` | RawAndParsedValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* --- ## ErroredArray URL: https://hyperformula.handsontable.com/docs/api/classes/erroredarray # ErroredArray ## Constructors ### constructor \+ **new ErroredArray**(`error`: [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md), `size`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)): *[ErroredArray](https://hyperformula.handsontable.com/docs/api/classes/erroredarray.md)* *Defined in [src/ArrayValue.ts:156](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L156)* **Parameters:** Name | Type | ------ | ------ | `error` | [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md) | `size` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | **Returns:** *[ErroredArray](https://hyperformula.handsontable.com/docs/api/classes/erroredarray.md)* ## Properties ### size • **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArrayValue.ts:159](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L159)* ## Methods ### get ▸ **get**(`col`: number, `row`: number): *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/ArrayValue.ts:164](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L164)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* ___ ### height ▸ **height**(): *number* *Defined in [src/ArrayValue.ts:172](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L172)* **Returns:** *number* ___ ### simpleRangeValue ▸ **simpleRangeValue**(): *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/ArrayValue.ts:176](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L176)* **Returns:** *[CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* ___ ### width ▸ **width**(): *number* *Defined in [src/ArrayValue.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L168)* **Returns:** *number* --- ## PasteUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry # PasteUndoEntry ## Constructors ### constructor \+ **new PasteUndoEntry**(`targetLeftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `oldContent`: [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][], `newContent`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][], `addedGlobalNamedExpressions`: string[]): *[PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md)* *Defined in [src/UndoRedo.ts:366](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L366)* **Parameters:** Name | Type | ------ | ------ | `targetLeftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `oldContent` | [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][] | `newContent` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][] | `addedGlobalNamedExpressions` | string[] | **Returns:** *[PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md)* ## Properties ### addedGlobalNamedExpressions • **addedGlobalNamedExpressions**: *string[]* *Defined in [src/UndoRedo.ts:371](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L371)* ___ ### newContent • **newContent**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/UndoRedo.ts:370](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L370)* ___ ### oldContent • **oldContent**: *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/UndoRedo.ts:369](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L369)* ___ ### targetLeftCorner • **targetLeftCorner**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/UndoRedo.ts:368](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L368)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:380](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L380)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:376](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L376)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## ProtectedFunctionTranslationError URL: https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror # ProtectedFunctionTranslationError Error thrown when trying to override protected translation. **`see`** [registerLanguage](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerlanguage) **`see`** [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunction) **`see`** [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunctionplugin) ## Constructors ### constructor \+ **new ProtectedFunctionTranslationError**(`key`: string): *[ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md)* *Defined in [src/errors.ts:279](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L279)* **Parameters:** Name | Type | ------ | ------ | `key` | string | **Returns:** *[ProtectedFunctionTranslationError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctiontranslationerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ProtectedFunctionError URL: https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror # ProtectedFunctionError Error thrown when trying to register, override or remove function with reserved id. **`see`** [registerFunctionPlugin](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunctionplugin) **`see`** [registerFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-registerfunction) **`see`** [unregisterFunction](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-unregisterfunction) ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* ## Methods ### cannotRegisterFunctionWithId ▸ **cannotRegisterFunctionWithId**(`functionId`: string): *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* *Defined in [src/errors.ts:334](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L334)* **Parameters:** Name | Type | ------ | ------ | `functionId` | string | **Returns:** *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* ___ ### cannotUnregisterFunctionWithId ▸ **cannotUnregisterFunctionWithId**(`functionId`: string): *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* *Defined in [src/errors.ts:338](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L338)* **Parameters:** Name | Type | ------ | ------ | `functionId` | string | **Returns:** *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* ___ ### cannotUnregisterProtectedPlugin ▸ **cannotUnregisterProtectedPlugin**(): *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* *Defined in [src/errors.ts:342](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L342)* **Returns:** *[ProtectedFunctionError](https://hyperformula.handsontable.com/docs/api/classes/protectedfunctionerror.md)* --- ## RemoveColumnsCommand URL: https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand # RemoveColumnsCommand ## Constructors ### constructor \+ **new RemoveColumnsCommand**(`sheet`: number, `indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md)* *Defined in [src/Operations.ts:114](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L114)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md)* ## Properties ### indexes • **indexes**: *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:117](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L117)* ___ ### sheet • **sheet**: *number* *Defined in [src/Operations.ts:116](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L116)* ## Methods ### columnsSpans ▸ **columnsSpans**(): *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)[]* *Defined in [src/Operations.ts:125](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L125)* **Returns:** *[ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)[]* ___ ### normalizedIndexes ▸ **normalizedIndexes**(): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:121](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L121)* **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* --- ## RemoveColumnsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry # RemoveColumnsUndoEntry ## Constructors ### constructor \+ **new RemoveColumnsUndoEntry**(`command`: [RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md), `columnsRemovals`: [ColumnsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval.md)[]): *[RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md)* *Defined in [src/UndoRedo.ts:238](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L238)* **Parameters:** Name | Type | ------ | ------ | `command` | [RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md) | `columnsRemovals` | [ColumnsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval.md)[] | **Returns:** *[RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md)* ## Properties ### columnsRemovals • **columnsRemovals**: *[ColumnsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval.md)[]* *Defined in [src/UndoRedo.ts:241](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L241)* ___ ### command • **command**: *[RemoveColumnsCommand](https://hyperformula.handsontable.com/docs/api/classes/removecolumnscommand.md)* *Defined in [src/UndoRedo.ts:240](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L240)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:250](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L250)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:246](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L246)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:254](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L254)* **Returns:** *number[]* --- ## RemoveNamedExpressionUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry # RemoveNamedExpressionUndoEntry ## Constructors ### constructor \+ **new RemoveNamedExpressionUndoEntry**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), `content`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell), `scope?`: undefined | number): *[RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md)* *Defined in [src/UndoRedo.ts:404](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L404)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | `content` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell) | `scope?` | undefined | number | **Returns:** *[RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md)* ## Properties ### content • **content**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)* *Defined in [src/UndoRedo.ts:407](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L407)* ___ ### namedExpression • **namedExpression**: *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)* *Defined in [src/UndoRedo.ts:406](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L406)* ___ ### scope • **scope**? : *undefined | number* *Defined in [src/UndoRedo.ts:408](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L408)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:417](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L417)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:413](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L413)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## RemoveRowsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry # RemoveRowsUndoEntry ## Constructors ### constructor \+ **new RemoveRowsUndoEntry**(`command`: [RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md), `rowsRemovals`: [RowsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval.md)[]): *[RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md)* *Defined in [src/UndoRedo.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L47)* **Parameters:** Name | Type | ------ | ------ | `command` | [RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md) | `rowsRemovals` | [RowsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval.md)[] | **Returns:** *[RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md)* ## Properties ### command • **command**: *[RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md)* *Defined in [src/UndoRedo.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L49)* ___ ### rowsRemovals • **rowsRemovals**: *[RowsRemoval](https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval.md)[]* *Defined in [src/UndoRedo.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L50)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:59](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L59)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L55)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L63)* **Returns:** *number[]* --- ## RemoveRowsCommand URL: https://hyperformula.handsontable.com/docs/api/classes/removerowscommand # RemoveRowsCommand ## Constructors ### constructor \+ **new RemoveRowsCommand**(`sheet`: number, `indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md)* *Defined in [src/Operations.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L60)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[RemoveRowsCommand](https://hyperformula.handsontable.com/docs/api/classes/removerowscommand.md)* ## Properties ### indexes • **indexes**: *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L63)* ___ ### sheet • **sheet**: *number* *Defined in [src/Operations.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L62)* ## Methods ### normalizedIndexes ▸ **normalizedIndexes**(): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L67)* **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* ___ ### rowsSpans ▸ **rowsSpans**(): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)[]* *Defined in [src/Operations.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L71)* **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)[]* --- ## RemoveSheetUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry # RemoveSheetUndoEntry ## Constructors ### constructor \+ **new RemoveSheetUndoEntry**(`sheetName`: string, `sheetId`: number, `oldSheetContent`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][], `scopedNamedExpressions`: [[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]): *[RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md)* *Defined in [src/UndoRedo.ts:276](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L276)* **Parameters:** Name | Type | ------ | ------ | `sheetName` | string | `sheetId` | number | `oldSheetContent` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][] | `scopedNamedExpressions` | [[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][] | **Returns:** *[RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md)* ## Properties ### oldSheetContent • **oldSheetContent**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/UndoRedo.ts:280](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L280)* ___ ### scopedNamedExpressions • **scopedNamedExpressions**: *[[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/UndoRedo.ts:281](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L281)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:279](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L279)* ___ ### sheetName • **sheetName**: *string* *Defined in [src/UndoRedo.ts:278](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L278)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:290](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L290)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:286](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L286)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## RenameSheetUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry # RenameSheetUndoEntry Undo entry for renaming a sheet. When renaming a sheet to a name that was previously referenced (but didn't exist), a placeholder sheet gets merged into the renamed sheet. In this case: - `version` contains the transformation version for restoring formulas during undo - `mergedPlaceholderSheetId` contains the ID of the placeholder sheet that was merged When renaming to a name not previously referenced, both optional params are undefined. ## Constructors ### constructor \+ **new RenameSheetUndoEntry**(`sheetId`: number, `oldName`: string, `newName`: string, `version?`: undefined | number, `mergedPlaceholderSheetId?`: undefined | number): *[RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md)* *Defined in [src/UndoRedo.ts:305](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L305)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `oldName` | string | `newName` | string | `version?` | undefined | number | `mergedPlaceholderSheetId?` | undefined | number | **Returns:** *[RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md)* ## Properties ### mergedPlaceholderSheetId • **mergedPlaceholderSheetId**? : *undefined | number* *Defined in [src/UndoRedo.ts:311](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L311)* ___ ### newName • **newName**: *string* *Defined in [src/UndoRedo.ts:309](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L309)* ___ ### oldName • **oldName**: *string* *Defined in [src/UndoRedo.ts:308](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L308)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:307](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L307)* ___ ### version • **version**? : *undefined | number* *Defined in [src/UndoRedo.ts:310](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L310)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:320](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L320)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:316](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L316)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:324](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L324)* **Returns:** *number[]* --- ## RowSearchStrategy URL: https://hyperformula.handsontable.com/docs/api/classes/rowsearchstrategy # RowSearchStrategy ## Constructors ### constructor \+ **new RowSearchStrategy**(`dependencyGraph`: DependencyGraph): *[RowSearchStrategy](https://hyperformula.handsontable.com/docs/api/classes/rowsearchstrategy.md)* *Defined in [src/Lookup/RowSearchStrategy.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/RowSearchStrategy.ts#L12)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | **Returns:** *[RowSearchStrategy](https://hyperformula.handsontable.com/docs/api/classes/rowsearchstrategy.md)* ## Methods ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `__namedParameters`: object): *number* *Defined in [src/Lookup/AdvancedFind.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/AdvancedFind.ts#L27)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **rangeValue**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪`Default value` **__namedParameters**: *object*= { returnOccurrence: 'first' } Name | Type | ------ | ------ | `returnOccurrence` | undefined | "first" | "last" | **Returns:** *number* ___ ### find ▸ **find**(`searchKey`: RawNoErrorScalarValue, `rangeValue`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `searchOptions`: [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md)): *number* *Defined in [src/Lookup/RowSearchStrategy.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/RowSearchStrategy.ts#L20)* **Parameters:** Name | Type | ------ | ------ | `searchKey` | RawNoErrorScalarValue | `rangeValue` | [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | `searchOptions` | [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md) | **Returns:** *number* --- ## RowsSpan URL: https://hyperformula.handsontable.com/docs/api/classes/rowsspan # RowsSpan ## Constructors ### constructor \+ **new RowsSpan**(`sheet`: number, `rowStart`: number, `rowEnd`: number): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)* *Defined in [src/Span.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L11)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `rowStart` | number | `rowEnd` | number | **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)* ## Properties ### rowEnd • **rowEnd**: *number* *Defined in [src/Span.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L16)* ___ ### rowStart • **rowStart**: *number* *Defined in [src/Span.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L15)* ___ ### sheet • **sheet**: *number* *Defined in [src/Span.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L14)* ## Accessors ### end • **get end**(): *number* *Defined in [src/Span.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L34)* **Returns:** *number* ___ ### numberOfRows • **get numberOfRows**(): *number* *Defined in [src/Span.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L26)* **Returns:** *number* ___ ### start • **get start**(): *number* *Defined in [src/Span.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L30)* **Returns:** *number* ## Methods ### firstRow ▸ **firstRow**(): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)* *Defined in [src/Span.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L64)* **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)* ___ ### intersect ▸ **intersect**(`otherSpan`: [RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md) | null* *Defined in [src/Span.ts:52](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L52)* **Parameters:** Name | Type | ------ | ------ | `otherSpan` | [RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md) | **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md) | null* ___ ### rows ▸ **rows**(): *IterableIterator‹number›* *Defined in [src/Span.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L46)* **Returns:** *IterableIterator‹number›* ___ ### fromNumberOfRows ▸ **fromNumberOfRows**(`sheet`: number, `rowStart`: number, `numberOfRows`: number): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)‹›* *Defined in [src/Span.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L38)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `rowStart` | number | `numberOfRows` | number | **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)‹›* ___ ### fromRowStartAndEnd ▸ **fromRowStartAndEnd**(`sheet`: number, `rowStart`: number, `rowEnd`: number): *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)‹›* *Defined in [src/Span.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L42)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `rowStart` | number | `rowEnd` | number | **Returns:** *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md)‹›* --- ## Serialization URL: https://hyperformula.handsontable.com/docs/api/classes/serialization # Serialization ## Constructors ### constructor \+ **new Serialization**(`dependencyGraph`: DependencyGraph, `unparser`: Unparser, `exporter`: [Exporter](https://hyperformula.handsontable.com/docs/api/classes/exporter.md)): *[Serialization](https://hyperformula.handsontable.com/docs/api/classes/serialization.md)* *Defined in [src/Serialization.ts:23](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L23)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | `unparser` | Unparser | `exporter` | [Exporter](https://hyperformula.handsontable.com/docs/api/classes/exporter.md) | **Returns:** *[Serialization](https://hyperformula.handsontable.com/docs/api/classes/serialization.md)* ## Methods ### genericAllSheetsGetter ▸ **genericAllSheetsGetter**‹**T**›(`sheetGetter`: function): *Record‹string, T›* *Defined in [src/Serialization.ts:115](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L115)* **Type parameters:** ▪ **T** **Parameters:** ▪ **sheetGetter**: *function* ▸ (`sheet`: number): *T* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *Record‹string, T›* ___ ### genericSheetGetter ▸ **genericSheetGetter**‹**T**›(`sheet`: number, `getter`: function): *T[][]* *Defined in [src/Serialization.ts:84](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L84)* **Type parameters:** ▪ **T** **Parameters:** ▪ **sheet**: *number* ▪ **getter**: *function* ▸ (`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *T* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *T[][]* ___ ### getAllNamedExpressionsSerialized ▸ **getAllNamedExpressionsSerialized**(): *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* *Defined in [src/Serialization.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L140)* **Returns:** *[SerializedNamedExpression](https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression.md)[]* ___ ### getAllSheetsFormulas ▸ **getAllSheetsFormulas**(): *Record‹string, [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›[][]›* *Defined in [src/Serialization.ts:132](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L132)* **Returns:** *Record‹string, [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›[][]›* ___ ### getAllSheetsSerialized ▸ **getAllSheetsSerialized**(): *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* *Defined in [src/Serialization.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L136)* **Returns:** *Record‹string, [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]›* ___ ### getAllSheetsValues ▸ **getAllSheetsValues**(): *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* *Defined in [src/Serialization.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L128)* **Returns:** *Record‹string, [CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]›* ___ ### getCellFormula ▸ **getCellFormula**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `targetAddress?`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/Serialization.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L42)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `targetAddress?` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* ___ ### getCellHyperlink ▸ **getCellHyperlink**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/Serialization.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L31)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* ___ ### getCellSerialized ▸ **getCellSerialized**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `targetAddress?`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/Serialization.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `targetAddress?` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* ___ ### getCellValue ▸ **getCellValue**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* *Defined in [src/Serialization.ts:68](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L68)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)* ___ ### getRawValue ▸ **getRawValue**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/Serialization.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L72)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* ___ ### getSheetFormulas ▸ **getSheetFormulas**(`sheet`: number): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›[][]* *Defined in [src/Serialization.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L80)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›[][]* ___ ### getSheetSerialized ▸ **getSheetSerialized**(`sheet`: number): *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/Serialization.ts:124](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L124)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* ___ ### getSheetValues ▸ **getSheetValues**(`sheet`: number): *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* *Defined in [src/Serialization.ts:76](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L76)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | **Returns:** *[CellValue](https://hyperformula.handsontable.com/docs/api/globals.md#cellvalue)[][]* ___ ### withNewConfig ▸ **withNewConfig**(`newConfig`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `namedExpressions`: [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md)): *[Serialization](https://hyperformula.handsontable.com/docs/api/classes/serialization.md)* *Defined in [src/Serialization.ts:158](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L158)* **Parameters:** Name | Type | ------ | ------ | `newConfig` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `namedExpressions` | [NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md) | **Returns:** *[Serialization](https://hyperformula.handsontable.com/docs/api/classes/serialization.md)* --- ## SetCellContentsUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry # SetCellContentsUndoEntry ## Constructors ### constructor \+ **new SetCellContentsUndoEntry**(`cellContents`: object[]): *[SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md)* *Defined in [src/UndoRedo.ts:346](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L346)* **Parameters:** Name | Type | ------ | ------ | `cellContents` | object[] | **Returns:** *[SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md)* ## Properties ### cellContents • **cellContents**: *object[]* *Defined in [src/UndoRedo.ts:348](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L348)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:361](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L361)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:357](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L357)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## SetColumnOrderUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry # SetColumnOrderUndoEntry ## Constructors ### constructor \+ **new SetColumnOrderUndoEntry**(`sheetId`: number, `columnMapping`: [number, number][], `oldContent`: [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]): *[SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md)* *Defined in [src/UndoRedo.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L128)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `columnMapping` | [number, number][] | `oldContent` | [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][] | **Returns:** *[SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md)* ## Properties ### columnMapping • **columnMapping**: *[number, number][]* *Defined in [src/UndoRedo.ts:131](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L131)* ___ ### oldContent • **oldContent**: *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/UndoRedo.ts:132](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L132)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:130](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L130)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:141](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L141)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:137](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L137)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## SetSheetContentUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry # SetSheetContentUndoEntry ## Constructors ### constructor \+ **new SetSheetContentUndoEntry**(`sheetId`: number, `oldSheetContent`: [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][], `newSheetContent`: [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]): *[SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md)* *Defined in [src/UndoRedo.ts:146](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L146)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `oldSheetContent` | [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][] | `newSheetContent` | [RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][] | **Returns:** *[SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md)* ## Properties ### newSheetContent • **newSheetContent**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/UndoRedo.ts:150](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L150)* ___ ### oldSheetContent • **oldSheetContent**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)[][]* *Defined in [src/UndoRedo.ts:149](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L149)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:148](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L148)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:159](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L159)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:155](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L155)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## SetRowOrderUndoEntry URL: https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry # SetRowOrderUndoEntry ## Constructors ### constructor \+ **new SetRowOrderUndoEntry**(`sheetId`: number, `rowMapping`: [number, number][], `oldContent`: [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]): *[SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md)* *Defined in [src/UndoRedo.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L110)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | `rowMapping` | [number, number][] | `oldContent` | [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][] | **Returns:** *[SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md)* ## Properties ### oldContent • **oldContent**: *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/UndoRedo.ts:114](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L114)* ___ ### rowMapping • **rowMapping**: *[number, number][]* *Defined in [src/UndoRedo.ts:113](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L113)* ___ ### sheetId • **sheetId**: *number* *Defined in [src/UndoRedo.ts:112](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L112)* ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:123](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L123)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:119](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L119)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L42)* Returns LazilyTransformingAstService version keys referenced by this entry's oldData. Default implementation returns empty — override in entries that store oldData. **Returns:** *number[]* --- ## SheetNameAlreadyTakenError URL: https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror # SheetNameAlreadyTakenError Error thrown when the sheet of a given name already exists. ## Constructors ### constructor \+ **new SheetNameAlreadyTakenError**(`sheetName`: string): *[SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror.md)* *Defined in [src/errors.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L29)* **Parameters:** Name | Type | ------ | ------ | `sheetName` | string | **Returns:** *[SheetNameAlreadyTakenError](https://hyperformula.handsontable.com/docs/api/classes/sheetnamealreadytakenerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## SheetSizeLimitExceededError URL: https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror # SheetSizeLimitExceededError Error thrown when loaded sheet size exceeds configured limits. ## Constructors ### constructor \+ **new SheetSizeLimitExceededError**(): *[SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md)* *Defined in [src/errors.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L38)* **Returns:** *[SheetSizeLimitExceededError](https://hyperformula.handsontable.com/docs/api/classes/sheetsizelimitexceedederror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## SheetsNotEqual URL: https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal # SheetsNotEqual Error thrown when the given sheets are not equal. ## Constructors ### constructor \+ **new SheetsNotEqual**(`sheet1`: number, `sheet2`: number): *[SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md)* *Defined in [src/errors.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L74)* **Parameters:** Name | Type | ------ | ------ | `sheet1` | number | `sheet2` | number | **Returns:** *[SheetsNotEqual](https://hyperformula.handsontable.com/docs/api/classes/sheetsnotequal.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## SimpleStrategy URL: https://hyperformula.handsontable.com/docs/api/classes/simplestrategy # SimpleStrategy ## Constructors ### constructor \+ **new SimpleStrategy**(`dependencyGraph`: DependencyGraph, `columnIndex`: [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md), `parser`: ParserWithCaching, `stats`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md), `cellContentParser`: [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md), `arraySizePredictor`: [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md)): *[SimpleStrategy](https://hyperformula.handsontable.com/docs/api/classes/simplestrategy.md)* *Defined in [src/GraphBuilder.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L67)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | `columnIndex` | [ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md) | `parser` | ParserWithCaching | `stats` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | `cellContentParser` | [CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md) | `arraySizePredictor` | [ArraySizePredictor](https://hyperformula.handsontable.com/docs/api/classes/arraysizepredictor.md) | **Returns:** *[SimpleStrategy](https://hyperformula.handsontable.com/docs/api/classes/simplestrategy.md)* ## Methods ### run ▸ **run**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets)): *[Dependencies](https://hyperformula.handsontable.com/docs/api/globals.md#dependencies)* *Defined in [src/GraphBuilder.ts:78](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L78)* **Parameters:** Name | Type | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | **Returns:** *[Dependencies](https://hyperformula.handsontable.com/docs/api/globals.md#dependencies)* --- ## SimpleRangeValue URL: https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue # SimpleRangeValue A class that represents a range of data. ## Constructors ### constructor \+ **new SimpleRangeValue**(`_data?`: InternalScalarValue[][], `range?`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md), `dependencyGraph?`: DependencyGraph, `_hasOnlyNumbers?`: undefined | false | true): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L21)* In most cases, it's more convenient to create a `SimpleRangeValue` object by calling one of the [static factory methods](#fromrange). **Parameters:** Name | Type | ------ | ------ | `_data?` | InternalScalarValue[][] | `range?` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | `dependencyGraph?` | DependencyGraph | `_hasOnlyNumbers?` | undefined | false | true | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ## Properties ### range • **range**? : *[AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md)* *Defined in [src/SimpleRangeValue.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L33)* A property that represents the address of the range. ___ ### size • **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/SimpleRangeValue.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L21)* A property that represents the size of the range. ## Accessors ### data • **get data**(): *InternalScalarValue[][]* *Defined in [src/SimpleRangeValue.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L45)* Returns the range data as a 2D array. **Returns:** *InternalScalarValue[][]* ## Methods ### effectiveAddressesFromData ▸ **effectiveAddressesFromData**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* *Defined in [src/SimpleRangeValue.ts:125](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L125)* Generates the addresses of the cells contained in the range assuming the provided address is the left corner of the range. **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *IterableIterator‹[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)›* ___ ### entriesFromTopLeftCorner ▸ **entriesFromTopLeftCorner**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *IterableIterator‹[InternalScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›* *Defined in [src/SimpleRangeValue.ts:139](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L139)* Generates values and addresses of the cells contained in the range assuming the provided address is the left corner of the range. This method combines the functionalities of [`iterateValuesFromTopLeftCorner()`](#iteratevaluesfromtopleftcorner) and [`effectiveAddressesFromData()`](#effectiveaddressesfromdata). **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *IterableIterator‹[InternalScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›* ___ ### hasOnlyNumbers ▸ **hasOnlyNumbers**(): *boolean* *Defined in [src/SimpleRangeValue.ts:165](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L165)* Returns `true` if and only if the range contains only numeric values. **Returns:** *boolean* ___ ### height ▸ **height**(): *number* *Defined in [src/SimpleRangeValue.ts:102](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L102)* Returns the number of rows contained in the range. **Returns:** *number* ___ ### isAdHoc ▸ **isAdHoc**(): *boolean* *Defined in [src/SimpleRangeValue.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L88)* Returns `true` if and only if the `SimpleRangeValue` has no address set. **Returns:** *boolean* ___ ### iterateValuesFromTopLeftCorner ▸ **iterateValuesFromTopLeftCorner**(): *IterableIterator‹InternalScalarValue›* *Defined in [src/SimpleRangeValue.ts:151](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L151)* Generates the values of the cells contained in the range assuming the provided address is the left corner of the range. **Returns:** *IterableIterator‹InternalScalarValue›* ___ ### numberOfElements ▸ **numberOfElements**(): *number* *Defined in [src/SimpleRangeValue.ts:158](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L158)* Returns the number of cells contained in the range. **Returns:** *number* ___ ### rawData ▸ **rawData**(): *InternalScalarValue[][]* *Defined in [src/SimpleRangeValue.ts:196](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L196)* Returns the range data as a 2D array. Internal use only. **Returns:** *InternalScalarValue[][]* ___ ### rawNumbers ▸ **rawNumbers**(): *number[][]* *Defined in [src/SimpleRangeValue.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L186)* Returns the range data as a 2D array of numbers. Internal use only. **Returns:** *number[][]* ___ ### sameDimensionsAs ▸ **sameDimensionsAs**(`other`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)): *boolean* *Defined in [src/SimpleRangeValue.ts:204](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L204)* Returns `true` if and only if the range has the same width and height as the `other` range object. **Parameters:** Name | Type | ------ | ------ | `other` | [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | **Returns:** *boolean* ___ ### valuesFromTopLeftCorner ▸ **valuesFromTopLeftCorner**(): *InternalScalarValue[]* *Defined in [src/SimpleRangeValue.ts:109](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L109)* Returns the range data as a 1D array. **Returns:** *InternalScalarValue[]* ___ ### width ▸ **width**(): *number* *Defined in [src/SimpleRangeValue.ts:95](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L95)* Returns the number of columns contained in the range. **Returns:** *number* ___ ### fromRange ▸ **fromRange**(`data`: InternalScalarValue[][], `range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md), `dependencyGraph`: DependencyGraph): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L53)* A factory method. Returns a `SimpleRangeValue` object with the provided range address and the provided data. **Parameters:** Name | Type | ------ | ------ | `data` | InternalScalarValue[][] | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | `dependencyGraph` | DependencyGraph | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### fromScalar ▸ **fromScalar**(`scalar`: InternalScalarValue): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L81)* A factory method. Returns a `SimpleRangeValue` object that contains a single value. **Parameters:** Name | Type | ------ | ------ | `scalar` | InternalScalarValue | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### onlyNumbers ▸ **onlyNumbers**(`data`: number[][]): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L60)* A factory method. Returns a `SimpleRangeValue` object with the provided numeric data. **Parameters:** Name | Type | ------ | ------ | `data` | number[][] | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### onlyRange ▸ **onlyRange**(`range`: [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md), `dependencyGraph`: DependencyGraph): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L74)* A factory method. Returns a `SimpleRangeValue` object with the provided range address. **Parameters:** Name | Type | ------ | ------ | `range` | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | `dependencyGraph` | DependencyGraph | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ___ ### onlyValues ▸ **onlyValues**(`data`: InternalScalarValue[][]): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* *Defined in [src/SimpleRangeValue.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/SimpleRangeValue.ts#L67)* A factory method. Returns a `SimpleRangeValue` object with the provided data. **Parameters:** Name | Type | ------ | ------ | `data` | InternalScalarValue[][] | **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* --- ## SourceLocationHasArrayError URL: https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror # SourceLocationHasArrayError Error thrown when selected source location has an array. ## Constructors ### constructor \+ **new SourceLocationHasArrayError**(): *[SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md)* *Defined in [src/errors.ts:350](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L350)* **Returns:** *[SourceLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/sourcelocationhasarrayerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## Statistics URL: https://hyperformula.handsontable.com/docs/api/classes/statistics # Statistics Provides tracking performance statistics to the engine ## Methods ### end ▸ **end**(`name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)): *void* *Defined in [src/statistics/Statistics.ts:59](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L59)* Stops tracking particular statistic. Raise error if tracking statistic wasn't started. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `name` | [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md) | statistic to stop tracking | **Returns:** *void* ___ ### incrementCriterionFunctionFullCacheUsed ▸ **incrementCriterionFunctionFullCacheUsed**(): *void* *Defined in [src/statistics/Statistics.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L18)* **Returns:** *void* ___ ### incrementCriterionFunctionPartialCacheUsed ▸ **incrementCriterionFunctionPartialCacheUsed**(): *void* *Defined in [src/statistics/Statistics.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L24)* **Returns:** *void* ___ ### measure ▸ **measure**‹**T**›(`name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), `func`: function): *T* *Defined in [src/statistics/Statistics.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L80)* Measure given statistic as execution of given function. **Type parameters:** ▪ **T** **Parameters:** ▪ **name**: *[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)* statistic to track ▪ **func**: *function* function to call ▸ (): *T* **Returns:** *T* result of the function call ___ ### reset ▸ **reset**(): *void* *Defined in [src/statistics/Statistics.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L33)* Resets statistics **Returns:** *void* ___ ### snapshot ▸ **snapshot**(): *Map‹[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), number›* *Defined in [src/statistics/Statistics.ts:90](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L90)* Returns the snapshot of current results **Returns:** *Map‹[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), number›* ___ ### start ▸ **start**(`name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)): *void* *Defined in [src/statistics/Statistics.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L45)* Starts tracking particular statistic. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `name` | [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md) | statistic to start tracking | **Returns:** *void* --- ## TargetLocationHasArrayError URL: https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror # TargetLocationHasArrayError Error thrown when selected target location has an array. **`see`** [addRows](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md#addrows) **`see`** [addColumns](https://hyperformula.handsontable.com/docs/api/classes/arrayvalue.md#addcolumns) **`see`** [moveCells](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#movecells) **`see`** [moveRows](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#moverows) **`see`** [moveColumns](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#movecolumns) **`see`** [paste](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md#paste) ## Constructors ### constructor \+ **new TargetLocationHasArrayError**(): *[TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md)* *Defined in [src/errors.ts:366](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L366)* **Returns:** *[TargetLocationHasArrayError](https://hyperformula.handsontable.com/docs/api/classes/targetlocationhasarrayerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## UnableToParseError URL: https://hyperformula.handsontable.com/docs/api/classes/unabletoparseerror # UnableToParseError Error thrown when the given value cannot be parsed. Checks against the validity in: **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [[setCellsContents]] ## Constructors ### constructor \+ **new UnableToParseError**(`value`: any): *[UnableToParseError](https://hyperformula.handsontable.com/docs/api/classes/unabletoparseerror.md)* *Defined in [src/errors.ts:160](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L160)* **Parameters:** Name | Type | ------ | ------ | `value` | any | **Returns:** *[UnableToParseError](https://hyperformula.handsontable.com/docs/api/classes/unabletoparseerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## UndoRedo URL: https://hyperformula.handsontable.com/docs/api/classes/undoredo # UndoRedo Manages undo/redo stacks for all spreadsheet operations. ## oldData: Preserving Formula ASTs Across Irreversible Transformations Some structural operations (e.g., removing rows/columns, moving cells) destroy formula information that cannot be reconstructed from the transformation alone. For example, when a row is removed, formulas referencing that row are rewritten to `#REF!` — an irreversible change. To support undo of such operations, `oldData` stores snapshots of formula AST hashes keyed by the LazilyTransformingAstService version at which the irreversible transformation was applied. Each entry maps a version number to an array of `[cellAddress, astHash]` pairs that can be used to restore the original formula from the parser cache. ### Memory Management Without cleanup, `oldData` grows indefinitely as undo entries are evicted but their oldData keys remain. Three mechanisms prevent this: 1. **Eviction cleanup**: When undo entries are evicted (due to `undoLimit`), `cleanupOldDataForEntries()` deletes their referenced oldData keys (unless still needed by entries on the other stack). 2. **Orphan cleanup**: Compaction may force lazy formula evaluation, which writes new oldData entries for already-evicted undo entries. After compaction, `cleanupOrphanedOldData()` removes any keys not referenced by entries on either stack or the in-progress batch. 3. **Short-circuit**: When `undoLimit` is 0 (undo disabled), `storeDataForVersion()` returns immediately to avoid storing data that would never be used. ## Constructors ### constructor \+ **new UndoRedo**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `operations`: [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md)): *[UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)* *Defined in [src/UndoRedo.ts:505](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L505)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `operations` | [Operations](https://hyperformula.handsontable.com/docs/api/classes/operations.md) | **Returns:** *[UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)* ## Properties ### oldData • **oldData**: *Map‹number, [[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), string][]›* = new Map() *Defined in [src/UndoRedo.ts:501](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L501)* ## Methods ### beginBatchMode ▸ **beginBatchMode**(): *void* *Defined in [src/UndoRedo.ts:522](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L522)* **Returns:** *void* ___ ### cleanupOrphanedOldData ▸ **cleanupOrphanedOldData**(): *void* *Defined in [src/UndoRedo.ts:880](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L880)* Removes oldData entries whose version keys are not referenced by any entry on the undo stack, redo stack, or in-progress batch. Called after compaction forces lazy formula evaluation, which may insert oldData for already-evicted entries. **Returns:** *void* ___ ### clearRedoStack ▸ **clearRedoStack**(): *void* *Defined in [src/UndoRedo.ts:550](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L550)* Clears the redo stack and removes oldData entries no longer referenced by any remaining entry. **Returns:** *void* ___ ### clearUndoStack ▸ **clearUndoStack**(): *void* *Defined in [src/UndoRedo.ts:556](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L556)* Clears the undo stack and removes oldData entries no longer referenced by any remaining entry. **Returns:** *void* ___ ### commitBatchMode ▸ **commitBatchMode**(): *void* *Defined in [src/UndoRedo.ts:526](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L526)* **Returns:** *void* ___ ### isRedoStackEmpty ▸ **isRedoStackEmpty**(): *boolean* *Defined in [src/UndoRedo.ts:565](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L565)* **Returns:** *boolean* ___ ### isUndoStackEmpty ▸ **isUndoStackEmpty**(): *boolean* *Defined in [src/UndoRedo.ts:561](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L561)* **Returns:** *boolean* ___ ### redo ▸ **redo**(): *void* *Defined in [src/UndoRedo.ts:756](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L756)* **Returns:** *void* ___ ### redoAddColumns ▸ **redoAddColumns**(`operation`: [AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:808](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L808)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md) | **Returns:** *void* ___ ### redoAddNamedExpression ▸ **redoAddNamedExpression**(`operation`: [AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:841](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L841)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md) | **Returns:** *void* ___ ### redoAddRows ▸ **redoAddRows**(`operation`: [AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:804](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L804)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md) | **Returns:** *void* ___ ### redoAddSheet ▸ **redoAddSheet**(`operation`: [AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:816](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L816)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md) | **Returns:** *void* ___ ### redoBatch ▸ **redoBatch**(`batchOperation`: [BatchUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/batchundoentry.md)): *void* *Defined in [src/UndoRedo.ts:768](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L768)* **Parameters:** Name | Type | ------ | ------ | `batchOperation` | [BatchUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/batchundoentry.md) | **Returns:** *void* ___ ### redoChangeNamedExpression ▸ **redoChangeNamedExpression**(`operation`: [ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:849](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L849)* **Parameters:** Name | Type | ------ | ------ | `operation` | [ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md) | **Returns:** *void* ___ ### redoClearSheet ▸ **redoClearSheet**(`operation`: [ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:832](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L832)* **Parameters:** Name | Type | ------ | ------ | `operation` | [ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md) | **Returns:** *void* ___ ### redoMoveCells ▸ **redoMoveCells**(`operation`: [MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:778](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L778)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md) | **Returns:** *void* ___ ### redoMoveColumns ▸ **redoMoveColumns**(`operation`: [MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:828](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L828)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md) | **Returns:** *void* ___ ### redoMoveRows ▸ **redoMoveRows**(`operation`: [MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:824](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L824)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md) | **Returns:** *void* ___ ### redoPaste ▸ **redoPaste**(`operation`: [PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md)): *void* *Defined in [src/UndoRedo.ts:786](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L786)* **Parameters:** Name | Type | ------ | ------ | `operation` | [PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md) | **Returns:** *void* ___ ### redoRemoveColumns ▸ **redoRemoveColumns**(`operation`: [RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:782](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L782)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md) | **Returns:** *void* ___ ### redoRemoveNamedExpression ▸ **redoRemoveNamedExpression**(`operation`: [RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:845](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L845)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md) | **Returns:** *void* ___ ### redoRemoveRows ▸ **redoRemoveRows**(`operation`: [RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:774](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L774)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md) | **Returns:** *void* ___ ### redoRemoveSheet ▸ **redoRemoveSheet**(`operation`: [RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:812](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L812)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md) | **Returns:** *void* ___ ### redoRenameSheet ▸ **redoRenameSheet**(`operation`: [RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:820](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L820)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md) | **Returns:** *void* ___ ### redoSetCellContents ▸ **redoSetCellContents**(`operation`: [SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:798](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L798)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md) | **Returns:** *void* ___ ### redoSetColumnOrder ▸ **redoSetColumnOrder**(`operation`: [SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md)): *void* *Defined in [src/UndoRedo.ts:857](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L857)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md) | **Returns:** *void* ___ ### redoSetRowOrder ▸ **redoSetRowOrder**(`operation`: [SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md)): *void* *Defined in [src/UndoRedo.ts:853](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L853)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md) | **Returns:** *void* ___ ### redoSetSheetContent ▸ **redoSetSheetContent**(`operation`: [SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md)): *void* *Defined in [src/UndoRedo.ts:836](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L836)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md) | **Returns:** *void* ___ ### saveOperation ▸ **saveOperation**(`operation`: [UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md)): *void* *Defined in [src/UndoRedo.ts:514](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L514)* **Parameters:** Name | Type | ------ | ------ | `operation` | [UndoEntry](https://hyperformula.handsontable.com/docs/api/interfaces/undoentry.md) | **Returns:** *void* ___ ### storeDataForVersion ▸ **storeDataForVersion**(`version`: number, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `astHash`: string): *void* *Defined in [src/UndoRedo.ts:538](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L538)* Stores a formula AST hash snapshot for the given LazilyTransformingAstService version. Skipped when `undoLimit` is 0 (undo disabled) to avoid storing data that would never be used. **Parameters:** Name | Type | ------ | ------ | `version` | number | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `astHash` | string | **Returns:** *void* ___ ### undo ▸ **undo**(): *void* *Defined in [src/UndoRedo.ts:569](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L569)* **Returns:** *void* ___ ### undoAddColumns ▸ **undoAddColumns**(`operation`: [AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:626](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L626)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addcolumnsundoentry.md) | **Returns:** *void* ___ ### undoAddNamedExpression ▸ **undoAddNamedExpression**(`operation`: [AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:736](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L736)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addnamedexpressionundoentry.md) | **Returns:** *void* ___ ### undoAddRows ▸ **undoAddRows**(`operation`: [AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:618](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L618)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addrowsundoentry.md) | **Returns:** *void* ___ ### undoAddSheet ▸ **undoAddSheet**(`operation`: [AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:678](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L678)* **Parameters:** Name | Type | ------ | ------ | `operation` | [AddSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/addsheetundoentry.md) | **Returns:** *void* ___ ### undoBatch ▸ **undoBatch**(`batchOperation`: [BatchUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/batchundoentry.md)): *void* *Defined in [src/UndoRedo.ts:580](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L580)* **Parameters:** Name | Type | ------ | ------ | `batchOperation` | [BatchUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/batchundoentry.md) | **Returns:** *void* ___ ### undoChangeNamedExpression ▸ **undoChangeNamedExpression**(`operation`: [ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:744](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L744)* **Parameters:** Name | Type | ------ | ------ | `operation` | [ChangeNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/changenamedexpressionundoentry.md) | **Returns:** *void* ___ ### undoClearSheet ▸ **undoClearSheet**(`operation`: [ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:711](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L711)* **Parameters:** Name | Type | ------ | ------ | `operation` | [ClearSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/clearsheetundoentry.md) | **Returns:** *void* ___ ### undoMoveCells ▸ **undoMoveCells**(`operation`: [MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:666](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L666)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveCellsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecellsundoentry.md) | **Returns:** *void* ___ ### undoMoveColumns ▸ **undoMoveColumns**(`operation`: [MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:659](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L659)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/movecolumnsundoentry.md) | **Returns:** *void* ___ ### undoMoveRows ▸ **undoMoveRows**(`operation`: [MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:652](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L652)* **Parameters:** Name | Type | ------ | ------ | `operation` | [MoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/moverowsundoentry.md) | **Returns:** *void* ___ ### undoPaste ▸ **undoPaste**(`operation`: [PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md)): *void* *Defined in [src/UndoRedo.ts:645](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L645)* **Parameters:** Name | Type | ------ | ------ | `operation` | [PasteUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/pasteundoentry.md) | **Returns:** *void* ___ ### undoRemoveColumns ▸ **undoRemoveColumns**(`operation`: [RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:602](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L602)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveColumnsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removecolumnsundoentry.md) | **Returns:** *void* ___ ### undoRemoveNamedExpression ▸ **undoRemoveNamedExpression**(`operation`: [RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md)): *void* *Defined in [src/UndoRedo.ts:740](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L740)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveNamedExpressionUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removenamedexpressionundoentry.md) | **Returns:** *void* ___ ### undoRemoveRows ▸ **undoRemoveRows**(`operation`: [RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:586](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L586)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveRowsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removerowsundoentry.md) | **Returns:** *void* ___ ### undoRemoveSheet ▸ **undoRemoveSheet**(`operation`: [RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:683](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L683)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RemoveSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/removesheetundoentry.md) | **Returns:** *void* ___ ### undoRenameSheet ▸ **undoRenameSheet**(`operation`: [RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md)): *void* *Defined in [src/UndoRedo.ts:701](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L701)* **Parameters:** Name | Type | ------ | ------ | `operation` | [RenameSheetUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/renamesheetundoentry.md) | **Returns:** *void* ___ ### undoSetCellContents ▸ **undoSetCellContents**(`operation`: [SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md)): *void* *Defined in [src/UndoRedo.ts:634](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L634)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetCellContentsUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcellcontentsundoentry.md) | **Returns:** *void* ___ ### undoSetColumnOrder ▸ **undoSetColumnOrder**(`operation`: [SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md)): *void* *Defined in [src/UndoRedo.ts:752](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L752)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetColumnOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setcolumnorderundoentry.md) | **Returns:** *void* ___ ### undoSetRowOrder ▸ **undoSetRowOrder**(`operation`: [SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md)): *void* *Defined in [src/UndoRedo.ts:748](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L748)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetRowOrderUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setroworderundoentry.md) | **Returns:** *void* ___ ### undoSetSheetContent ▸ **undoSetSheetContent**(`operation`: [SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md)): *void* *Defined in [src/UndoRedo.ts:723](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L723)* **Parameters:** Name | Type | ------ | ------ | `operation` | [SetSheetContentUndoEntry](https://hyperformula.handsontable.com/docs/api/classes/setsheetcontentundoentry.md) | **Returns:** *void* --- ## WorkbookStore URL: https://hyperformula.handsontable.com/docs/api/classes/workbookstore # WorkbookStore ## Methods ### add ▸ **add**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)): *void* *Defined in [src/NamedExpressions.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L55)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | **Returns:** *void* ___ ### get ▸ **get**(`expressionName`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:59](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L59)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### getAllNamedExpressions ▸ **getAllNamedExpressions**(): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* *Defined in [src/NamedExpressions.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L80)* **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* ___ ### getExisting ▸ **getExisting**(`expressionName`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L63)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### has ▸ **has**(`expressionName`: string): *boolean* *Defined in [src/NamedExpressions.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L45)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *boolean* ___ ### isNameAvailable ▸ **isNameAvailable**(`expressionName`: string): *boolean* *Defined in [src/NamedExpressions.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L49)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *boolean* ___ ### remove ▸ **remove**(`expressionName`: string): *void* *Defined in [src/NamedExpressions.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L72)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *void* --- ## WorksheetStore URL: https://hyperformula.handsontable.com/docs/api/classes/worksheetstore # WorksheetStore ## Properties ### mapping • **mapping**: *Map‹string, [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)‹››* = new Map() *Defined in [src/NamedExpressions.ts:90](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L90)* ## Methods ### add ▸ **add**(`namedExpression`: [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)): *void* *Defined in [src/NamedExpressions.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L92)* **Parameters:** Name | Type | ------ | ------ | `namedExpression` | [InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md) | **Returns:** *void* ___ ### get ▸ **get**(`expressionName`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* *Defined in [src/NamedExpressions.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L96)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)›* ___ ### getAllNamedExpressions ▸ **getAllNamedExpressions**(): *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* *Defined in [src/NamedExpressions.ts:104](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L104)* **Returns:** *[InternalNamedExpression](https://hyperformula.handsontable.com/docs/api/classes/internalnamedexpression.md)[]* ___ ### has ▸ **has**(`expressionName`: string): *boolean* *Defined in [src/NamedExpressions.ts:100](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L100)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *boolean* ___ ### isNameAvailable ▸ **isNameAvailable**(`expressionName`: string): *boolean* *Defined in [src/NamedExpressions.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L108)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *boolean* ___ ### remove ▸ **remove**(`expressionName`: string): *void* *Defined in [src/NamedExpressions.ts:113](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L113)* **Parameters:** Name | Type | ------ | ------ | `expressionName` | string | **Returns:** *void* --- ## ErrorMessage URL: https://hyperformula.handsontable.com/docs/api/classes/errormessage # ErrorMessage This is a class for detailed error messages across HyperFormula. ## Properties ### ArrayDimensions ▪ **ArrayDimensions**: *string* = "Array dimensions are not compatible." *Defined in [src/error-message.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L14)* ___ ### BadCriterion ▪ **BadCriterion**: *string* = "Incorrect criterion." *Defined in [src/error-message.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L18)* ___ ### BadMode ▪ **BadMode**: *string* = "Mode not recognized." *Defined in [src/error-message.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L26)* ___ ### BadRef ▪ **BadRef**: *string* = "Address is not correct." *Defined in [src/error-message.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L39)* ___ ### BitshiftLong ▪ **BitshiftLong**: *string* = "Result of bitshift is too long." *Defined in [src/error-message.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L58)* ___ ### CellRangeExpected ▪ **CellRangeExpected**: *string* = "Cell range expected." *Defined in [src/error-message.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L20)* ___ ### CellRefExpected ▪ **CellRefExpected**: *string* = "Cell reference expected." *Defined in [src/error-message.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L37)* ___ ### CharacterCodeBounds ▪ **CharacterCodeBounds**: *string* = "Character code out of bounds." *Defined in [src/error-message.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L67)* ___ ### ComplexNumberExpected ▪ **ComplexNumberExpected**: *string* = "Complex number expected." *Defined in [src/error-message.ts:73](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L73)* ___ ### DateBounds ▪ **DateBounds**: *string* = "Date outside of bounds." *Defined in [src/error-message.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L27)* ___ ### DistinctSigns ▪ **DistinctSigns**: *string* = "Distinct signs." *Defined in [src/error-message.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L10)* ___ ### EmptyArg ▪ **EmptyArg**: *string* = "Empty function argument." *Defined in [src/error-message.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L12)* ___ ### EmptyArray ▪ **EmptyArray**: *string* = "Empty array not allowed." *Defined in [src/error-message.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L13)* ___ ### EmptyRange ▪ **EmptyRange**: *string* = "Empty range not allowed." *Defined in [src/error-message.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L38)* ___ ### EmptyString ▪ **EmptyString**: *string* = "Empty-string argument not allowed." *Defined in [src/error-message.ts:59](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L59)* ___ ### EndStartPeriod ▪ **EndStartPeriod**: *string* = "End period needs to be at least start period." *Defined in [src/error-message.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L36)* ___ ### EqualLength ▪ **EqualLength**: *string* = "Ranges need to be of equal length." *Defined in [src/error-message.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L31)* ___ ### Formula ▪ **Formula**: *string* = "Expected formula." *Defined in [src/error-message.ts:52](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L52)* ___ ### IncorrectDateTime ▪ **IncorrectDateTime**: *string* = "String does not represent correct DateTime." *Defined in [src/error-message.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L66)* ___ ### IndexBounds ▪ **IndexBounds**: *string* = "Index out of bounds." *Defined in [src/error-message.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L50)* ___ ### IndexLarge ▪ **IndexLarge**: *string* = "Index too large." *Defined in [src/error-message.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L51)* ___ ### IntegerExpected ▪ **IntegerExpected**: *string* = "Value needs to be an integer." *Defined in [src/error-message.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L25)* ___ ### InvalidDate ▪ **InvalidDate**: *string* = "Invalid date." *Defined in [src/error-message.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L57)* ___ ### InvalidRoman ▪ **InvalidRoman**: *string* = "Invalid roman numeral." *Defined in [src/error-message.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L71)* ___ ### LengthBounds ▪ **LengthBounds**: *string* = "Length out of bounds." *Defined in [src/error-message.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L60)* ___ ### LessThanOne ▪ **LessThanOne**: *string* = "Argument cannot be less than 1." *Defined in [src/error-message.ts:69](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L69)* ___ ### NaN ▪ **NaN**: *string* = "NaN or infinite value encountered." *Defined in [src/error-message.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L30)* ___ ### Negative ▪ **Negative**: *string* = "Value cannot be negative." *Defined in [src/error-message.ts:32](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L32)* ___ ### NegativeCount ▪ **NegativeCount**: *string* = "Count cannot be negative." *Defined in [src/error-message.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L53)* ___ ### NegativeLength ▪ **NegativeLength**: *string* = "Length cannot be negative." *Defined in [src/error-message.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L45)* ___ ### NegativeTime ▪ **NegativeTime**: *string* = "Time cannot be negative." *Defined in [src/error-message.ts:61](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L61)* ___ ### NoConditionMet ▪ **NoConditionMet**: *string* = "None of the conditions were met." *Defined in [src/error-message.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L63)* ___ ### NoDefault ▪ **NoDefault**: *string* = "No default option." *Defined in [src/error-message.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L62)* ___ ### NoSpaceForArrayResult ▪ **NoSpaceForArrayResult**: *string* = "No space for array result." *Defined in [src/error-message.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L15)* ___ ### NonZero ▪ **NonZero**: *string* = "Argument cannot be 0." *Defined in [src/error-message.ts:68](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L68)* ___ ### NotBinary ▪ **NotBinary**: *string* = "String does not represent a binary number." *Defined in [src/error-message.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L33)* ___ ### NotHex ▪ **NotHex**: *string* = "String does not represent a hexadecimal number." *Defined in [src/error-message.ts:35](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L35)* ___ ### NotOctal ▪ **NotOctal**: *string* = "String does not represent an octal number." *Defined in [src/error-message.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L34)* ___ ### NumberCoercion ▪ **NumberCoercion**: *string* = "Value cannot be coerced to number." *Defined in [src/error-message.ts:23](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L23)* ___ ### NumberExpected ▪ **NumberExpected**: *string* = "Number argument expected." *Defined in [src/error-message.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L24)* ___ ### NumberRange ▪ **NumberRange**: *string* = "Number-only range expected." *Defined in [src/error-message.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L40)* ___ ### OneValue ▪ **OneValue**: *string* = "Needs at least one value." *Defined in [src/error-message.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L47)* ___ ### OutOfSheet ▪ **OutOfSheet**: *string* = "Resulting reference is out of the sheet." *Defined in [src/error-message.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L28)* ___ ### ParseError ▪ **ParseError**: *string* = "Parsing error." *Defined in [src/error-message.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L54)* ___ ### PatternNotFound ▪ **PatternNotFound**: *string* = "Pattern not found." *Defined in [src/error-message.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L46)* ___ ### PeriodLong ▪ **PeriodLong**: *string* = "Period number cannot exceed life length." *Defined in [src/error-message.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L56)* ___ ### RangeManySheets ▪ **RangeManySheets**: *string* = "Range spans more than one sheet." *Defined in [src/error-message.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L19)* ___ ### ResultTooLong ▪ **ResultTooLong**: *string* = "Result exceeds the maximum allowed length." *Defined in [src/error-message.ts:76](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L76)* ___ ### ScalarExpected ▪ **ScalarExpected**: *string* = "Cell range not allowed." *Defined in [src/error-message.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L22)* ___ ### Selector ▪ **Selector**: *string* = "Selector cannot exceed the number of arguments." *Defined in [src/error-message.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L64)* ___ ### SheetRef ▪ **SheetRef**: *string* = "Sheet does not exist." *Defined in [src/error-message.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L55)* ___ ### ShouldBeIorJ ▪ **ShouldBeIorJ**: *string* = "Should be 'i' or 'j'." *Defined in [src/error-message.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L74)* ___ ### SizeMismatch ▪ **SizeMismatch**: *string* = "Array dimensions mismatched." *Defined in [src/error-message.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L75)* ___ ### StartEndDate ▪ **StartEndDate**: *string* = "Start date needs to be earlier than end date." *Defined in [src/error-message.ts:65](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L65)* ___ ### ThreeValues ▪ **ThreeValues**: *string* = "Range needs to contain at least three elements." *Defined in [src/error-message.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L49)* ___ ### TwoValues ▪ **TwoValues**: *string* = "Range needs to contain at least two elements." *Defined in [src/error-message.ts:48](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L48)* ___ ### ValueBaseLarge ▪ **ValueBaseLarge**: *string* = "Value in base too large." *Defined in [src/error-message.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L42)* ___ ### ValueBaseLong ▪ **ValueBaseLong**: *string* = "Value in base too long." *Defined in [src/error-message.ts:44](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L44)* ___ ### ValueBaseSmall ▪ **ValueBaseSmall**: *string* = "Value in base too small." *Defined in [src/error-message.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L43)* ___ ### ValueLarge ▪ **ValueLarge**: *string* = "Value too large." *Defined in [src/error-message.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L17)* ___ ### ValueNotFound ▪ **ValueNotFound**: *string* = "Value not found." *Defined in [src/error-message.ts:41](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L41)* ___ ### ValueSmall ▪ **ValueSmall**: *string* = "Value too small." *Defined in [src/error-message.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L16)* ___ ### WeekendString ▪ **WeekendString**: *string* = "Incorrect weekend bitmask string." *Defined in [src/error-message.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L70)* ___ ### WrongArgNumber ▪ **WrongArgNumber**: *string* = "Wrong number of arguments." *Defined in [src/error-message.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L11)* ___ ### WrongDimension ▪ **WrongDimension**: *string* = "Wrong range dimension." *Defined in [src/error-message.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L21)* ___ ### WrongOrder ▪ **WrongOrder**: *string* = "Wrong order of values." *Defined in [src/error-message.ts:72](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L72)* ___ ### WrongType ▪ **WrongType**: *string* = "Wrong type of argument." *Defined in [src/error-message.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L29)* ## Methods ### FunctionName ▸ **FunctionName**(`arg`: string): *string* *Defined in [src/error-message.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L77)* **Parameters:** Name | Type | ------ | ------ | `arg` | string | **Returns:** *string* ___ ### LicenseKey ▸ **LicenseKey**(`arg`: string): *string* *Defined in [src/error-message.ts:79](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L79)* **Parameters:** Name | Type | ------ | ------ | `arg` | string | **Returns:** *string* ___ ### NamedExpressionName ▸ **NamedExpressionName**(`arg`: string): *string* *Defined in [src/error-message.ts:78](https://github.com/handsontable/hyperformula/blob/af2d59d/src/error-message.ts#L78)* **Parameters:** Name | Type | ------ | ------ | `arg` | string | **Returns:** *string* --- ## CellValueNoNumber URL: https://hyperformula.handsontable.com/docs/api/enums/cellvaluenonumber # CellValueNoNumber ## Enumeration members ### BOOLEAN • **BOOLEAN**: = "BOOLEAN" *Defined in [src/Cell.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L83)* ___ ### EMPTY • **EMPTY**: = "EMPTY" *Defined in [src/Cell.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L80)* ___ ### ERROR • **ERROR**: = "ERROR" *Defined in [src/Cell.ts:84](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L84)* ___ ### NUMBER • **NUMBER**: = "NUMBER" *Defined in [src/Cell.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L81)* ___ ### STRING • **STRING**: = "STRING" *Defined in [src/Cell.ts:82](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L82)* --- ## CellValueJustNumber URL: https://hyperformula.handsontable.com/docs/api/enums/cellvaluejustnumber # CellValueJustNumber ## Enumeration members ### NUMBER • **NUMBER**: = "NUMBER" *Defined in [src/Cell.ts:88](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L88)* --- ## CellType URL: https://hyperformula.handsontable.com/docs/api/enums/celltype # CellType ## Enumeration members ### ARRAY • **ARRAY**: = "ARRAY" *Defined in [src/Cell.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L56)* ___ ### ARRAYFORMULA • **ARRAYFORMULA**: = "ARRAYFORMULA" *Defined in [src/Cell.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L58)* ___ ### EMPTY • **EMPTY**: = "EMPTY" *Defined in [src/Cell.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L57)* ___ ### FORMULA • **FORMULA**: = "FORMULA" *Defined in [src/Cell.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L54)* ___ ### VALUE • **VALUE**: = "VALUE" *Defined in [src/Cell.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L55)* --- ## EvaluationSuspendedError URL: https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror # EvaluationSuspendedError Error thrown when computations become suspended. To perform any other action wait for the batch to complete or resume the evaluation. Relates to: **`see`** [batch](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#batch) **`see`** [suspendEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#suspendevaluation) **`see`** [resumeEvaluation](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#resumeevaluation) ## Constructors ### constructor \+ **new EvaluationSuspendedError**(): *[EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md)* *Defined in [src/errors.ts:257](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L257)* **Returns:** *[EvaluationSuspendedError](https://hyperformula.handsontable.com/docs/api/classes/evaluationsuspendederror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ClipboardOperationType URL: https://hyperformula.handsontable.com/docs/api/enums/clipboardoperationtype # ClipboardOperationType ## Enumeration members ### COPY • **COPY**: *Defined in [src/ClipboardOperations.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L19)* ___ ### CUT • **CUT**: *Defined in [src/ClipboardOperations.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L20)* --- ## ErrorType URL: https://hyperformula.handsontable.com/docs/api/enums/errortype # ErrorType Possible errors returned by our interpreter. ## Enumeration members ### CYCLE • **CYCLE**: = "CYCLE" *Defined in [src/Cell.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L36)* Cyclic dependency. ___ ### DIV_BY_ZERO • **DIV_BY_ZERO**: = "DIV_BY_ZERO" *Defined in [src/Cell.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L27)* Division by zero. ___ ### ERROR • **ERROR**: = "ERROR" *Defined in [src/Cell.ts:48](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L48)* Generic error ___ ### LIC • **LIC**: = "LIC" *Defined in [src/Cell.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L45)* Invalid/missing licence error. ___ ### NA • **NA**: = "NA" *Defined in [src/Cell.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L33)* ___ ### NAME • **NAME**: = "NAME" *Defined in [src/Cell.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L30)* Unknown function name. ___ ### NUM • **NUM**: = "NUM" *Defined in [src/Cell.ts:32](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L32)* ___ ### REF • **REF**: = "REF" *Defined in [src/Cell.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L39)* Wrong address reference. ___ ### SPILL • **SPILL**: = "SPILL" *Defined in [src/Cell.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L42)* Array spill error. ___ ### VALUE • **VALUE**: = "VALUE" *Defined in [src/Cell.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L31)* --- ## ClipboardCellType URL: https://hyperformula.handsontable.com/docs/api/enums/clipboardcelltype # ClipboardCellType ## Enumeration members ### EMPTY • **EMPTY**: *Defined in [src/ClipboardOperations.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L25)* ___ ### FORMULA • **FORMULA**: *Defined in [src/ClipboardOperations.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L26)* ___ ### PARSING_ERROR • **PARSING_ERROR**: *Defined in [src/ClipboardOperations.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L27)* ___ ### VALUE • **VALUE**: *Defined in [src/ClipboardOperations.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L24)* --- ## Events URL: https://hyperformula.handsontable.com/docs/api/enums/events # Events ## Enumeration members ### EvaluationResumed • **EvaluationResumed**: = "evaluationResumed" *Defined in [src/Emitter.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L17)* ___ ### EvaluationSuspended • **EvaluationSuspended**: = "evaluationSuspended" *Defined in [src/Emitter.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L16)* ___ ### NamedExpressionAdded • **NamedExpressionAdded**: = "namedExpressionAdded" *Defined in [src/Emitter.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L13)* ___ ### NamedExpressionRemoved • **NamedExpressionRemoved**: = "namedExpressionRemoved" *Defined in [src/Emitter.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L14)* ___ ### SheetAdded • **SheetAdded**: = "sheetAdded" *Defined in [src/Emitter.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L10)* ___ ### SheetRemoved • **SheetRemoved**: = "sheetRemoved" *Defined in [src/Emitter.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L11)* ___ ### SheetRenamed • **SheetRenamed**: = "sheetRenamed" *Defined in [src/Emitter.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L12)* ___ ### ValuesUpdated • **ValuesUpdated**: = "valuesUpdated" *Defined in [src/Emitter.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L15)* --- ## LicenseKeyValidityState URL: https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate # LicenseKeyValidityState The list of all available states which the license checker can return. ## Enumeration members ### EXPIRED • **EXPIRED**: = "expired" *Defined in [src/helpers/licenseKeyValidator.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L14)* ___ ### INVALID • **INVALID**: = "invalid" *Defined in [src/helpers/licenseKeyValidator.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L13)* ___ ### MISSING • **MISSING**: = "missing" *Defined in [src/helpers/licenseKeyValidator.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L15)* ___ ### VALID • **VALID**: = "valid" *Defined in [src/helpers/licenseKeyValidator.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L12)* --- ## FormatExpressionType URL: https://hyperformula.handsontable.com/docs/api/enums/formatexpressiontype # FormatExpressionType ## Enumeration members ### DATE • **DATE**: = "DATE" *Defined in [src/format/parser.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L29)* ___ ### NUMBER • **NUMBER**: = "NUMBER" *Defined in [src/format/parser.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L30)* ___ ### STRING • **STRING**: = "STRING" *Defined in [src/format/parser.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L31)* --- ## StatType URL: https://hyperformula.handsontable.com/docs/api/enums/stattype # StatType **`license`** Copyright (c) 2025 Handsoncode. All rights reserved. ## Enumeration members ### ADJUSTING_ADDRESS_MAPPING • **ADJUSTING_ADDRESS_MAPPING**: = "ADJUSTING_ADDRESS_MAPPING" *Defined in [src/statistics/StatType.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L20)* ___ ### ADJUSTING_ARRAY_MAPPING • **ADJUSTING_ARRAY_MAPPING**: = "ADJUSTING_ARRAY_MAPPING" *Defined in [src/statistics/StatType.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L21)* ___ ### ADJUSTING_GRAPH • **ADJUSTING_GRAPH**: = "ADJUSTING_GRAPH" *Defined in [src/statistics/StatType.ts:23](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L23)* ___ ### ADJUSTING_RANGES • **ADJUSTING_RANGES**: = "ADJUSTING_RANGES" *Defined in [src/statistics/StatType.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L22)* ___ ### BUILD_COLUMN_INDEX • **BUILD_COLUMN_INDEX**: = "BUILD_COLUMN_INDEX" *Defined in [src/statistics/StatType.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L14)* ___ ### BUILD_ENGINE_TOTAL • **BUILD_ENGINE_TOTAL**: = "BUILD_ENGINE_TOTAL" *Defined in [src/statistics/StatType.ts:8](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L8)* ___ ### COLLECT_DEPENDENCIES • **COLLECT_DEPENDENCIES**: = "COLLECT_DEPENDENCIES" *Defined in [src/statistics/StatType.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L11)* ___ ### CRITERION_FUNCTION_FULL_CACHE_USED • **CRITERION_FUNCTION_FULL_CACHE_USED**: = "CRITERION_FUNCTION_FULL_CACHE_USED" *Defined in [src/statistics/StatType.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L25)* ___ ### CRITERION_FUNCTION_PARTIAL_CACHE_USED • **CRITERION_FUNCTION_PARTIAL_CACHE_USED**: = "CRITERION_FUNCTION_PARTIAL_CACHE_USED" *Defined in [src/statistics/StatType.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L26)* ___ ### EVALUATION • **EVALUATION**: = "EVALUATION" *Defined in [src/statistics/StatType.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L15)* ___ ### GRAPH_BUILD • **GRAPH_BUILD**: = "GRAPH_BUILD" *Defined in [src/statistics/StatType.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L10)* ___ ### PARSER • **PARSER**: = "PARSER" *Defined in [src/statistics/StatType.ts:9](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L9)* ___ ### PROCESS_DEPENDENCIES • **PROCESS_DEPENDENCIES**: = "PROCESS_DEPENDENCIES" *Defined in [src/statistics/StatType.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L12)* ___ ### TOP_SORT • **TOP_SORT**: = "TOP_SORT" *Defined in [src/statistics/StatType.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L13)* ___ ### TRANSFORM_ASTS • **TRANSFORM_ASTS**: = "TRANSFORM_ASTS" *Defined in [src/statistics/StatType.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L18)* ___ ### TRANSFORM_ASTS_POSTPONED • **TRANSFORM_ASTS_POSTPONED**: = "TRANSFORM_ASTS_POSTPONED" *Defined in [src/statistics/StatType.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L19)* ___ ### VLOOKUP • **VLOOKUP**: = "VLOOKUP" *Defined in [src/statistics/StatType.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/StatType.ts#L16)* --- ## AdvancedFindOptions URL: https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions # AdvancedFindOptions ## Properties ### returnOccurrence • **returnOccurrence**? : *"first" | "last"* *Defined in [src/Lookup/SearchStrategy.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L24)* --- ## CellArray URL: https://hyperformula.handsontable.com/docs/api/interfaces/cellarray # CellArray ## Properties ### size • **size**: *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArrayValue.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L12)* ## Methods ### get ▸ **get**(`col`: number, `row`: number): *InternalScalarValue* *Defined in [src/ArrayValue.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L18)* **Parameters:** Name | Type | ------ | ------ | `col` | number | `row` | number | **Returns:** *InternalScalarValue* ___ ### height ▸ **height**(): *number* *Defined in [src/ArrayValue.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L16)* **Returns:** *number* ___ ### simpleRangeValue ▸ **simpleRangeValue**(): *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* *Defined in [src/ArrayValue.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L20)* **Returns:** *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | [CellError](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md)* ___ ### width ▸ **width**(): *number* *Defined in [src/ArrayValue.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArrayValue.ts#L14)* **Returns:** *number* --- ## CellRange URL: https://hyperformula.handsontable.com/docs/api/interfaces/cellrange # CellRange ## Properties ### end • **end**: *CellAddress* *Defined in [src/Cell.ts:237](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L237)* ___ ### start • **start**: *CellAddress* *Defined in [src/Cell.ts:236](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L236)* --- ## TokenType URL: https://hyperformula.handsontable.com/docs/api/enums/tokentype # TokenType ## Enumeration members ### FORMAT • **FORMAT**: = "FORMAT" *Defined in [src/format/parser.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L12)* ___ ### FREE_TEXT • **FREE_TEXT**: = "FREE_TEXT" *Defined in [src/format/parser.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L13)* --- ## API Reference Overview URL: https://hyperformula.handsontable.com/docs/api/globals # API Reference Overview ## Type aliases ### CellDependency Ƭ **CellDependency**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | [AbsoluteCellRange](https://hyperformula.handsontable.com/docs/api/classes/absolutecellrange.md) | NamedExpressionDependency* *Defined in [src/CellDependency.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellDependency.ts#L10)* ___ ### CellValue Ƭ **CellValue**: *[NoErrorCellValue](https://hyperformula.handsontable.com/docs/api/globals.md#noerrorcellvalue) | [DetailedCellError](https://hyperformula.handsontable.com/docs/api/classes/detailedcellerror.md)* *Defined in [src/CellValue.ts:9](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L9)* ___ ### CellValueDetailedType Ƭ **CellValueDetailedType**: *[CellValueNoNumber](https://hyperformula.handsontable.com/docs/api/enums/cellvaluenonumber.md) | NumberType* *Defined in [src/Cell.ts:94](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L94)* ___ ### CellValueType Ƭ **CellValueType**: *[CellValueNoNumber](https://hyperformula.handsontable.com/docs/api/enums/cellvaluenonumber.md) | [CellValueJustNumber](https://hyperformula.handsontable.com/docs/api/enums/cellvaluejustnumber.md)* *Defined in [src/Cell.ts:91](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L91)* ___ ### ChangeList Ƭ **ChangeList**: *[CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[]* *Defined in [src/ContentChanges.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L20)* ___ ### ClipboardCell Ƭ **ClipboardCell**: *[ClipboardCellValue](https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellvalue.md) | [ClipboardCellFormula](https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellformula.md) | [ClipboardCellEmpty](https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellempty.md) | [ClipboardCellParsingError](https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellparsingerror.md)* *Defined in [src/ClipboardOperations.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L16)* ___ ### ColumnMap Ƭ **ColumnMap**: *Map‹RawInterpreterValue, [ValueIndex](https://hyperformula.handsontable.com/docs/api/interfaces/valueindex.md)›* *Defined in [src/Lookup/ColumnIndex.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L30)* ___ ### ColumnRowIndex Ƭ **ColumnRowIndex**: *[number, number]* *Defined in [src/CrudOperations.ts:65](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L65)* ___ ### ConfigParamsList Ƭ **ConfigParamsList**: *keyof ConfigParams* *Defined in [src/ConfigParams.ts:450](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L450)* ___ ### ConsoleMessages Ƭ **ConsoleMessages**: *object* *Defined in [src/helpers/licenseKeyValidator.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L24)* #### Type declaration: ___ ### DateTime Ƭ **DateTime**: *[SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md) | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime)* *Defined in [src/DateTimeHelper.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L31)* ___ ### Dependencies Ƭ **Dependencies**: *Map‹Vertex, [CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]›* *Defined in [src/GraphBuilder.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L25)* ___ ### EngineState Ƭ **EngineState**: *object* *Defined in [src/BuildEngineFactory.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/BuildEngineFactory.ts#L33)* #### Type declaration: * **cellContentParser**: *[CellContentParser](https://hyperformula.handsontable.com/docs/api/classes/cellcontentparser.md)* * **columnSearch**: *[ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md)* * **config**: *[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)* * **crudOperations**: *[CrudOperations](https://hyperformula.handsontable.com/docs/api/classes/crudoperations.md)* * **dependencyGraph**: *DependencyGraph* * **evaluator**: *[Evaluator](https://hyperformula.handsontable.com/docs/api/classes/evaluator.md)* * **exporter**: *[Exporter](https://hyperformula.handsontable.com/docs/api/classes/exporter.md)* * **functionRegistry**: *FunctionRegistry* * **lazilyTransformingAstService**: *[LazilyTransformingAstService](https://hyperformula.handsontable.com/docs/api/classes/lazilytransformingastservice.md)* * **namedExpressions**: *[NamedExpressions](https://hyperformula.handsontable.com/docs/api/classes/namedexpressions.md)* * **parser**: *ParserWithCaching* * **serialization**: *[Serialization](https://hyperformula.handsontable.com/docs/api/classes/serialization.md)* * **stats**: *[Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md)* * **unparser**: *Unparser* ___ ### ExportedChange Ƭ **ExportedChange**: *[ExportedCellChange](https://hyperformula.handsontable.com/docs/api/classes/exportedcellchange.md) | [ExportedNamedExpressionChange](https://hyperformula.handsontable.com/docs/api/classes/exportednamedexpressionchange.md)* *Defined in [src/Exporter.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Exporter.ts#L18)* ___ ### LicenseKeyInvalidState Ƭ **LicenseKeyInvalidState**: *Exclude‹[LicenseKeyValidityState](https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate.md), [VALID](https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate.md#valid)›* *Defined in [src/helpers/licenseKeyValidator.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L18)* ___ ### Maybe Ƭ **Maybe**: *T | undefined* *Defined in [src/Maybe.ts:6](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Maybe.ts#L6)* **`license`** Copyright (c) 2025 Handsoncode. All rights reserved. ___ ### MessageDescriptor Ƭ **MessageDescriptor**: *object* *Defined in [src/helpers/licenseKeyValidator.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L28)* #### Type declaration: * **template**: *[LicenseKeyValidityState](https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate.md)* * **vars**: *[TemplateVars](https://hyperformula.handsontable.com/docs/api/interfaces/templatevars.md)* ___ ### NamedExpressionOptions Ƭ **NamedExpressionOptions**: *Record‹string, string | number | boolean›* *Defined in [src/NamedExpressions.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L22)* ___ ### NoErrorCellValue Ƭ **NoErrorCellValue**: *number | string | boolean | null* *Defined in [src/CellValue.ts:8](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellValue.ts#L8)* ___ ### RawCellContent Ƭ **RawCellContent**: *Date | string | number | boolean | null | undefined* *Defined in [src/CellContentParser.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L25)* ___ ### Sheet Ƭ **Sheet**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)[][]* *Defined in [src/Sheet.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L12)* Two-dimenstional array representation of sheet ___ ### SheetDimensions Ƭ **SheetDimensions**: *object* *Defined in [src/Sheet.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L19)* Represents size of a sheet #### Type declaration: * **height**: *number* * **width**: *number* ___ ### SheetIndex Ƭ **SheetIndex**: *[ColumnMap](https://hyperformula.handsontable.com/docs/api/globals.md#columnmap)[]* *Defined in [src/Lookup/ColumnIndex.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L37)* ___ ### Sheets Ƭ **Sheets**: *Record‹string, [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet)›* *Defined in [src/Sheet.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L14)* ___ ### SimpleDateTime Ƭ **SimpleDateTime**: *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) & [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)* *Defined in [src/DateTimeHelper.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L29)* ___ ### Span Ƭ **Span**: *[RowsSpan](https://hyperformula.handsontable.com/docs/api/classes/rowsspan.md) | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)* *Defined in [src/Span.ts:6](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Span.ts#L6)* **`license`** Copyright (c) 2025 Handsoncode. All rights reserved. ___ ### TranslatableErrorType Ƭ **TranslatableErrorType**: *Exclude‹[ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype), [LIC](https://hyperformula.handsontable.com/docs/api/enums/errortype.md#lic)›* *Defined in [src/Cell.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L51)* ## Variables ### DATE_SEPARATOR_REGEXP • **DATE_SEPARATOR_REGEXP**: *RegExp‹›* = new RegExp('[ /.-]') *Defined in [src/DateTimeDefault.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L13)* ___ ### HOURS_PER_DAY • **HOURS_PER_DAY**: *24* = 24 *Defined in [src/DateTimeHelper.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L15)* ___ ### LCID_CURRENCY_TAG • **LCID_CURRENCY_TAG**: *RegExp‹›* = /\[\$[^\-\]]+-/ *Defined in [src/format/format.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L26)* Detects Excel LCID-tagged currency tags (`[$SYMBOL-LCID]` with a non-empty SYMBOL portion). Shared by `defaultStringifyDateTime` and `defaultStringifyDuration` so a format string carrying such a tag short- circuits both date and duration dispatch and falls through to the number formatter (or the user-supplied `stringifyCurrency` callback). The pattern is intentionally unanchored: any occurrence of `[$SYMBOL-` in the format string triggers the guard. Excel does not mix date/time tokens with a currency tag in the same format string, so a mid-string match cannot misclassify a legitimate composite — every observed format string with a currency tag is currency-only. ___ ### MINUTES_PER_HOUR • **MINUTES_PER_HOUR**: *60* = 60 *Defined in [src/DateTimeHelper.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L14)* ___ ### NOT_FOUND • **NOT_FOUND**: *-1* = -1 *Defined in [src/Lookup/AdvancedFind.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/AdvancedFind.ts#L19)* ___ ### QUICK_CHECK_REGEXP • **QUICK_CHECK_REGEXP**: *RegExp‹›* = new RegExp('^[0-9/.\\-: ]+[ap]?m?$') *Defined in [src/DateTimeDefault.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L11)* ___ ### SECONDS_PER_MINUTE • **SECONDS_PER_MINUTE**: *60* = 60 *Defined in [src/DateTimeHelper.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L13)* ___ ### SECONDS_PRECISION • **SECONDS_PRECISION**: *1000* = 1000 *Defined in [src/DateTimeDefault.ts:15](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L15)* ___ ### TIME_FORMAT_SECONDS_ITEM_REGEXP • **TIME_FORMAT_SECONDS_ITEM_REGEXP**: *RegExp‹›* = new RegExp('^ss(\\.(s+|0+))?$') *Defined in [src/DateTimeDefault.ts:9](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L9)* ___ ### TIME_SEPARATOR • **TIME_SEPARATOR**: *":"* = ":" *Defined in [src/DateTimeDefault.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L14)* ___ ### WHITESPACE_REGEXP • **WHITESPACE_REGEXP**: *RegExp‹›* = new RegExp('\\s+') *Defined in [src/DateTimeDefault.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L12)* ___ ### WRONG_RANGE_SIZE • **WRONG_RANGE_SIZE**: *"AbsoluteCellRange: Wrong range size"* = "AbsoluteCellRange: Wrong range size" *Defined in [src/AbsoluteCellRange.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L22)* ___ ### _notified • **_notified**: *boolean* = false *Defined in [src/helpers/licenseKeyValidator.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L43)* ___ ### _rl • **_rl**: *"length"* = "length" *Defined in [src/helpers/licenseKeyHelper.ts:9](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L9)* **`license`** Copyright (c) 2025 Handsoncode. All rights reserved. ___ ### dateFormatRegex • **dateFormatRegex**: *RegExp‹›* = /(\\.|dd|DD|d|D|mm|MM|m|M|YYYY|YY|yyyy|yy|HH|hh|H|h|ss(\.(0+|s+))?|s|AM\/PM|am\/pm|A\/P|a\/p|\[mm]|\[MM]|\[hh]|\[HH])/g *Defined in [src/format/parser.ts:8](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L8)* ___ ### defaultLanguage • **defaultLanguage**: *string* = Config.defaultConfig.language *Defined in [src/index.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/index.ts#L108)* ___ ### memoizedParseDateFormat • **memoizedParseDateFormat**: *(Anonymous function)* = memoize(parseDateFormat) *Defined in [src/DateTimeDefault.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L17)* ___ ### memoizedParseTimeFormat • **memoizedParseTimeFormat**: *(Anonymous function)* = memoize(parseTimeFormat) *Defined in [src/DateTimeDefault.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L16)* ___ ### numDays • **numDays**: *number[]* = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] *Defined in [src/DateTimeHelper.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L10)* ___ ### numberFormatRegex • **numberFormatRegex**: *RegExp‹›* = /(\\.|[#0]+(\.[#0]*)?)/g *Defined in [src/format/parser.ts:9](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L9)* ___ ### prefSumDays • **prefSumDays**: *number[]* = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] *Defined in [src/DateTimeHelper.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L11)* ___ ### privatePool • **privatePool**: *WeakMap‹[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), object›* = new WeakMap() *Defined in [src/Config.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L27)* ## Functions ### CellValueTypeOrd ▸ **CellValueTypeOrd**(`arg`: [CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)): *number* *Defined in [src/Cell.ts:97](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L97)* **Parameters:** Name | Type | ------ | ------ | `arg` | [CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype) | **Returns:** *number* ___ ### _cp ▸ **_cp**(`v`: any): *number* *Defined in [src/helpers/licenseKeyHelper.ts:14](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L14)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *number* ___ ### _hd ▸ **_hd**(`v`: any): *number* *Defined in [src/helpers/licenseKeyHelper.ts:10](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L10)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *number* ___ ### _nm ▸ **_nm**(`v`: any): *string* *Defined in [src/helpers/licenseKeyHelper.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L12)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *string* ___ ### _pi ▸ **_pi**(`v`: any): *number* *Defined in [src/helpers/licenseKeyHelper.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L11)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *number* ___ ### _ss ▸ **_ss**(`v`: any, `s`: any, `l`: any): *any* *Defined in [src/helpers/licenseKeyHelper.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L13)* **Parameters:** Name | Type | ------ | ------ | `v` | any | `s` | any | `l` | any | **Returns:** *any* ___ ### absoluteSheetReference ▸ **absoluteSheetReference**(`address`: AddressWithSheet, `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *number* *Defined in [src/Cell.ts:222](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L222)* **Parameters:** Name | Type | ------ | ------ | `address` | AddressWithSheet | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *number* ___ ### absolutizeDependencies ▸ **absolutizeDependencies**(`deps`: RelativeDependency[], `baseAddress`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]* *Defined in [src/absolutizeDependencies.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/absolutizeDependencies.ts#L17)* Converts dependencies from maybe relative addressing to absolute addressing. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `deps` | RelativeDependency[] | list of addresses in R0C0 format | `baseAddress` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | base address with regard to which make a convertion | **Returns:** *[CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]* ___ ### addressKey ▸ **addressKey**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *string* *Defined in [src/Cell.ts:209](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L209)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *string* ___ ### arraySizeForBinaryOp ▸ **arraySizeForBinaryOp**(`leftArraySize`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md), `rightArraySize`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArraySize.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L34)* **Parameters:** Name | Type | ------ | ------ | `leftArraySize` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | `rightArraySize` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* ___ ### arraySizeForUnaryOp ▸ **arraySizeForUnaryOp**(`arraySize`: [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)): *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* *Defined in [src/ArraySize.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArraySize.ts#L38)* **Parameters:** Name | Type | ------ | ------ | `arraySize` | [ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) | **Returns:** *[ArraySize](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md)* ___ ### buildColumnSearchStrategy ▸ **buildColumnSearchStrategy**(`dependencyGraph`: DependencyGraph, `config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `statistics`: [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md)): *[ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md)* *Defined in [src/Lookup/SearchStrategy.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L63)* **Parameters:** Name | Type | ------ | ------ | `dependencyGraph` | DependencyGraph | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `statistics` | [Statistics](https://hyperformula.handsontable.com/docs/api/classes/statistics.md) | **Returns:** *[ColumnSearchStrategy](https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy.md)* ___ ### checkKeySchema ▸ **checkKeySchema**(`v`: any): *boolean* *Defined in [src/helpers/licenseKeyHelper.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L20)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *boolean* ___ ### checkLicenseKeyValidity ▸ **checkLicenseKeyValidity**(`licenseKey`: string): *[LicenseKeyValidityState](https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate.md)* *Defined in [src/helpers/licenseKeyValidator.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L51)* Checks if the provided license key is grammatically valid or not expired. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `licenseKey` | string | The license key to check. | **Returns:** *[LicenseKeyValidityState](https://hyperformula.handsontable.com/docs/api/enums/licensekeyvaliditystate.md)* Returns the checking state. ___ ### collatorFromConfig ▸ **collatorFromConfig**(`config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)): *Collator* *Defined in [src/StringHelper.ts:8](https://github.com/handsontable/hyperformula/blob/af2d59d/src/StringHelper.ts#L8)* **Parameters:** Name | Type | ------ | ------ | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | **Returns:** *Collator* ___ ### configCheckIfParametersNotInConflict ▸ **configCheckIfParametersNotInConflict**(...`params`: object[]): *void* *Defined in [src/ArgumentSanitization.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L57)* **Parameters:** Name | Type | ------ | ------ | `...params` | object[] | **Returns:** *void* ___ ### configValueFromParam ▸ **configValueFromParam**(`inputValue`: any, `expectedType`: string | string[], `paramName`: [ConfigParamsList](https://hyperformula.handsontable.com/docs/api/globals.md#configparamslist)): *any* *Defined in [src/ArgumentSanitization.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L16)* **Parameters:** Name | Type | ------ | ------ | `inputValue` | any | `expectedType` | string | string[] | `paramName` | [ConfigParamsList](https://hyperformula.handsontable.com/docs/api/globals.md#configparamslist) | **Returns:** *any* ___ ### configValueFromParamCheck ▸ **configValueFromParamCheck**(`inputValue`: any, `typeCheck`: function, `expectedType`: string, `paramName`: [ConfigParamsList](https://hyperformula.handsontable.com/docs/api/globals.md#configparamslist)): *any* *Defined in [src/ArgumentSanitization.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L47)* **Parameters:** ▪ **inputValue**: *any* ▪ **typeCheck**: *function* ▸ (`object`: any): *boolean* **Parameters:** Name | Type | ------ | ------ | `object` | any | ▪ **expectedType**: *string* ▪ **paramName**: *[ConfigParamsList](https://hyperformula.handsontable.com/docs/api/globals.md#configparamslist)* **Returns:** *any* ___ ### countChars ▸ **countChars**(`text`: string, `char`: string): *number* *Defined in [src/format/format.ts:74](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L74)* **Parameters:** Name | Type | ------ | ------ | `text` | string | `char` | string | **Returns:** *number* ___ ### createTokens ▸ **createTokens**(`regexTokens`: RegExpExecArray[], `str`: string): *[FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)[]* *Defined in [src/format/parser.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L66)* **Parameters:** Name | Type | ------ | ------ | `regexTokens` | RegExpExecArray[] | `str` | string | **Returns:** *[FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)[]* ___ ### dayToMonth ▸ **dayToMonth**(`dayOfYear`: number): *number* *Defined in [src/DateTimeHelper.ts:270](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L270)* **Parameters:** Name | Type | ------ | ------ | `dayOfYear` | number | **Returns:** *number* ___ ### defaultParseToDate ▸ **defaultParseToDate**(`dateItems`: string[], `dateFormat`: [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)›* *Defined in [src/DateTimeDefault.ts:137](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L137)* Parses a date value from a string if the string matches the given date format. **Parameters:** Name | Type | ------ | ------ | `dateItems` | string[] | `dateFormat` | [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string› | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)›* ___ ### defaultParseToDateTime ▸ **defaultParseToDateTime**(`text`: string, `dateFormat`: [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›, `timeFormat`: [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)›* *Defined in [src/DateTimeDefault.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L30)* Parses a DateTime value from a string if the string matches the given date format and time format. Idea for more readable implementation: - divide string into parts by a regexp [date_regexp]? [time_regexp]? [ampm_regexp]? - start by finding the time part, because it is unambiguous '([0-9]+:[0-9:.]+ ?[ap]?m?)$', before it is the date part - OR split by spaces - last segment is ampm token, second to last is time (with or without ampm), rest is date If applied: - date parsing might work differently after these changes but still according to the docs - make sure to test edge cases like timeFormats: ['hh', 'ss.ss'] etc, string: '01-01-2019 AM', 'PM' **Parameters:** Name | Type | ------ | ------ | `text` | string | `dateFormat` | [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string› | `timeFormat` | [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string› | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)›* ___ ### defaultParseToTime ▸ **defaultParseToTime**(`timeItems`: string[], `timeFormat`: [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)›* *Defined in [src/DateTimeDefault.ts:82](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L82)* Parses a time value from a string if the string matches the given time format. **Parameters:** Name | Type | ------ | ------ | `timeItems` | string[] | `timeFormat` | [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string› | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)›* ___ ### defaultStringifyCurrency ▸ **defaultStringifyCurrency**(`_value`: number, `_formatArg`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/format/format.ts:328](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L328)* Default implementation of the `stringifyCurrency` config option. Returning `undefined` instructs the formatter to fall through to the built-in number formatter, preserving HyperFormula's zero-dependency default behavior. Replace this default by setting the [`stringifyCurrency`](https://hyperformula.handsontable.com/api/interfaces/configparams.md#stringifycurrency) config option. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `_value` | number | the numeric value to format (unused in default). | `_formatArg` | string | the format string passed to `TEXT` (unused in default). | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* `undefined` — caller should fall through to the built-in formatter. ___ ### defaultStringifyDateTime ▸ **defaultStringifyDateTime**(`dateTime`: [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime), `formatArg`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/format/format.ts:224](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L224)* Default `stringifyDateTime` callback — formats a date/time value against an Excel-style format string (e.g. `YYYY-MM-DD HH:mm:ss`). Returns `undefined` for format strings that are not date/time formats so the dispatcher in `format()` can fall through to `parseForNumberFormat` (or to a user-supplied `stringifyCurrency` callback for currency-tagged formats). **LCID currency-tag guard** — explicitly returns `undefined` for Excel currency tags `[$SYMBOL-LCID]` (non-empty SYMBOL portion). Without the guard, `parseForDateTimeFormat` greedily consumes letters like `D`/`M`/`S`/`Y`/`H` inside the currency code (e.g. `D` in USD, `H` in CHF, `M`+`D` in AMD), mangling the output of an `[$USD-409] #,##0.00` format into `[$US9-409] #,##0.00` because `D` is read as a day token. The pre-HF-24 behaviour was to mis-format; the guarded return is the deliberate correction, not a regression. Bit-for-bit compatibility is preserved for every non-currency format (dates, durations, `$#,##0.00`, etc.). The guard pattern (`/\[\$[^\-\]]+-/`) requires ≥1 character between `[$` and `-` so it distinguishes currency tags (`[$USD-409]`, `[$€-2]`) from Excel's locale-only modifier (`[$-409]`, `[$-F800]`), which is valid on date/time formats and must continue to flow through this function. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `dateTime` | [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime) | parsed date/time value to render | `formatArg` | string | Excel-style format string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* formatted string, or `undefined` to defer to the next dispatch step ___ ### defaultStringifyDuration ▸ **defaultStringifyDuration**(`time`: [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md), `formatArg`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* *Defined in [src/format/format.ts:132](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L132)* Default `stringifyDuration` callback — formats a duration value against an Excel-style time format string (e.g. `[hh]:mm:ss`). Returns `undefined` for format strings that are not duration formats so the dispatcher in `format()` can fall through to other handlers. **LCID currency-tag guard** — sibling to the same guard in `defaultStringifyDateTime`; explicitly returns `undefined` for Excel currency tags `[$SYMBOL-LCID]` because the SYMBOL portion contains duration-token letters (`H` in CHF/HUF, `m` in AMD/HMD) that `parseForDateTimeFormat` would otherwise interpret as time tokens and mangle the output. See `defaultStringifyDateTime` for the full symbol-vs-locale-modifier rationale and the historical pre-HF-24 behaviour the guard corrects. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `time` | [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md) | parsed duration value to render | `formatArg` | string | Excel-style format string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* formatted string, or `undefined` to defer to the next dispatch step ___ ### doesContainRelativeReferences ▸ **doesContainRelativeReferences**(`ast`: Ast): *boolean* *Defined in [src/NamedExpressions.ts:299](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L299)* **Parameters:** Name | Type | ------ | ------ | `ast` | Ast | **Returns:** *boolean* ___ ### doesItLookLikeADateTimeQuickCheck ▸ **doesItLookLikeADateTimeQuickCheck**(`text`: string): *boolean* *Defined in [src/DateTimeDefault.ts:222](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L222)* If this function returns false, the string is not parsable as a date time. Otherwise, it might be. This is a quick check that is used to avoid running the more expensive parsing operations. **Parameters:** Name | Type | ------ | ------ | `text` | string | **Returns:** *boolean* ___ ### empty ▸ **empty**‹**T**›(): *IterableIterator‹T›* *Defined in [src/generatorUtils.ts:8](https://github.com/handsontable/hyperformula/blob/af2d59d/src/generatorUtils.ts#L8)* **Type parameters:** ▪ **T** **Returns:** *IterableIterator‹T›* ___ ### equalSimpleCellAddress ▸ **equalSimpleCellAddress**(`left`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `right`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/Cell.ts:226](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L226)* **Parameters:** Name | Type | ------ | ------ | `left` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `right` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *boolean* ___ ### extractTime ▸ **extractTime**(`v`: any): *number* *Defined in [src/helpers/licenseKeyHelper.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyHelper.ts#L16)* **Parameters:** Name | Type | ------ | ------ | `v` | any | **Returns:** *number* ___ ### filterDependenciesOutOfScope ▸ **filterDependenciesOutOfScope**(`deps`: [CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]): *[CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]* *Defined in [src/absolutizeDependencies.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/absolutizeDependencies.ts#L21)* **Parameters:** Name | Type | ------ | ------ | `deps` | [CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[] | **Returns:** *[CellDependency](https://hyperformula.handsontable.com/docs/api/globals.md#celldependency)[]* ___ ### findBoundaries ▸ **findBoundaries**(`sheet`: [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet)): *[SheetBoundaries](https://hyperformula.handsontable.com/docs/api/interfaces/sheetboundaries.md)* *Defined in [src/Sheet.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L49)* Returns actual width, height and fill ratio of a sheet **Parameters:** Name | Type | Description | ------ | ------ | ------ | `sheet` | [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) | two-dimmensional array sheet representation | **Returns:** *[SheetBoundaries](https://hyperformula.handsontable.com/docs/api/interfaces/sheetboundaries.md)* ___ ### findInOrderedArray ▸ **findInOrderedArray**(`key`: number, `values`: number[], `handlingMisses`: "lowerBound" | "upperBound"): *number* *Defined in [src/Lookup/ColumnIndex.ts:339](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L339)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `key` | number | - | `values` | number[] | - | `handlingMisses` | "lowerBound" | "upperBound" | "upperBound" | **Returns:** *number* ___ ### first ▸ **first**‹**T**›(`iterable`: IterableIterator‹T›): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹T›* *Defined in [src/generatorUtils.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/generatorUtils.ts#L22)* **Type parameters:** ▪ **T** **Parameters:** Name | Type | ------ | ------ | `iterable` | IterableIterator‹T› | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹T›* ___ ### format ▸ **format**(`value`: number, `formatArg`: string, `config`: [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md), `dateHelper`: [DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md)): *RawScalarValue* *Defined in [src/format/format.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L28)* **Parameters:** Name | Type | ------ | ------ | `value` | number | `formatArg` | string | `config` | [Config](https://hyperformula.handsontable.com/docs/api/classes/config.md) | `dateHelper` | [DateTimeHelper](https://hyperformula.handsontable.com/docs/api/classes/datetimehelper.md) | **Returns:** *RawScalarValue* ___ ### formatDate ▸ **formatDate**(`date`: Date): *string* *Defined in [src/helpers/licenseKeyValidator.ts:91](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L91)* Formats a Date instance to hard-coded format MMMM DD, YYYY. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `date` | Date | The date to format. | **Returns:** *string* ___ ### formatToken ▸ **formatToken**(`type`: [TokenType](https://hyperformula.handsontable.com/docs/api/enums/tokentype.md), `value`: string): *[FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)* *Defined in [src/format/parser.ts:21](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L21)* **Parameters:** Name | Type | ------ | ------ | `type` | [TokenType](https://hyperformula.handsontable.com/docs/api/enums/tokentype.md) | `value` | string | **Returns:** *[FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)* ___ ### getCellType ▸ **getCellType**(`vertex`: [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹CellVertex›, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* *Defined in [src/Cell.ts:61](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L61)* **Parameters:** Name | Type | ------ | ------ | `vertex` | [Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹CellVertex› | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *[CellType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-celltype)* ___ ### getCellValueDetailedType ▸ **getCellValueDetailedType**(`cellValue`: InterpreterValue): *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* *Defined in [src/Cell.ts:133](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L133)* **Parameters:** Name | Type | ------ | ------ | `cellValue` | InterpreterValue | **Returns:** *[CellValueDetailedType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluedetailedtype)* ___ ### getCellValueFormat ▸ **getCellValueFormat**(`cellValue`: InterpreterValue): *string | undefined* *Defined in [src/Cell.ts:141](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L141)* **Parameters:** Name | Type | ------ | ------ | `cellValue` | InterpreterValue | **Returns:** *string | undefined* ___ ### getCellValueType ▸ **getCellValueType**(`cellValue`: InterpreterValue): *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* *Defined in [src/Cell.ts:113](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L113)* **Parameters:** Name | Type | ------ | ------ | `cellValue` | InterpreterValue | **Returns:** *[CellValueType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-cellvaluetype)* ___ ### getDefaultConfig ▸ **getDefaultConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/Config.ts:354](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L354)* **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ___ ### getFullConfigFromPartial ▸ **getFullConfigFromPartial**(`partialConfig`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/Config.ts:340](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L340)* **Parameters:** Name | Type | ------ | ------ | `partialConfig` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ___ ### instanceOfSimpleDate ▸ **instanceOfSimpleDate**(`obj`: any): *obj is SimpleDate* *Defined in [src/DateTimeHelper.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L34)* **Parameters:** Name | Type | ------ | ------ | `obj` | any | **Returns:** *obj is SimpleDate* ___ ### instanceOfSimpleTime ▸ **instanceOfSimpleTime**(`obj`: any): *obj is SimpleTime* *Defined in [src/DateTimeHelper.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L43)* **Parameters:** Name | Type | ------ | ------ | `obj` | any | **Returns:** *obj is SimpleTime* ___ ### invalidSimpleColumnAddress ▸ **invalidSimpleColumnAddress**(`address`: [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)): *boolean* *Defined in [src/Cell.ts:190](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L190)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md) | **Returns:** *boolean* ___ ### invalidSimpleRowAddress ▸ **invalidSimpleRowAddress**(`address`: [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)): *boolean* *Defined in [src/Cell.ts:181](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L181)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md) | **Returns:** *boolean* ___ ### isBoolean ▸ **isBoolean**(`text`: string): *boolean* *Defined in [src/CellContentParser.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L81)* **Parameters:** Name | Type | ------ | ------ | `text` | string | **Returns:** *boolean* ___ ### isColOrRowInvalid ▸ **isColOrRowInvalid**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *boolean* *Defined in [src/Cell.ts:203](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L203)* Checks if the column or row id is negative. **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *boolean* ___ ### isError ▸ **isError**(`text`: string, `errorMapping`: Record‹string, [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype)›): *boolean* *Defined in [src/CellContentParser.ts:86](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L86)* **Parameters:** Name | Type | ------ | ------ | `text` | string | `errorMapping` | Record‹string, [ErrorType](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#static-errortype)› | **Returns:** *boolean* ___ ### isEscapeToken ▸ **isEscapeToken**(`token`: RegExpExecArray): *boolean* *Defined in [src/format/parser.ts:131](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L131)* **Parameters:** Name | Type | ------ | ------ | `token` | RegExpExecArray | **Returns:** *boolean* ___ ### isFormula ▸ **isFormula**(`text`: string): *boolean* *Defined in [src/CellContentParser.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L77)* Checks whether string looks like formula or not. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `text` | string | formula | **Returns:** *boolean* ___ ### isNonnegativeInteger ▸ **isNonnegativeInteger**(`x`: number): *boolean* *Defined in [src/CrudOperations.ts:657](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L657)* **Parameters:** Name | Type | ------ | ------ | `x` | number | **Returns:** *boolean* ___ ### isPositiveInteger ▸ **isPositiveInteger**(`x`: number): *boolean* *Defined in [src/CrudOperations.ts:653](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CrudOperations.ts#L653)* **Parameters:** Name | Type | ------ | ------ | `x` | number | **Returns:** *boolean* ___ ### isRowOrColumnRange ▸ **isRowOrColumnRange**(`leftCorner`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `width`: number, `height`: number): *boolean* *Defined in [src/Operations.ts:1100](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L1100)* **Parameters:** Name | Type | ------ | ------ | `leftCorner` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `width` | number | `height` | number | **Returns:** *boolean* ___ ### isSimpleCellAddress ▸ **isSimpleCellAddress**(`obj`: unknown): *obj is SimpleCellAddress* *Defined in [src/Cell.ts:214](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L214)* Checks if the object is a simple cell address. **Parameters:** Name | Type | ------ | ------ | `obj` | unknown | **Returns:** *obj is SimpleCellAddress* ___ ### isSimpleCellRange ▸ **isSimpleCellRange**(`val`: unknown): *val is SimpleCellRange* *Defined in [src/AbsoluteCellRange.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L34)* Type guard that checks if an object is a valid SimpleCellRange. **Parameters:** Name | Type | Description | ------ | ------ | ------ | `val` | unknown | Value to check | **Returns:** *val is SimpleCellRange* True if and only if the object is a valid SimpleCellRange ___ ### matchDateFormat ▸ **matchDateFormat**(`str`: string): *RegExpExecArray[]* *Defined in [src/format/parser.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L39)* **Parameters:** Name | Type | ------ | ------ | `str` | string | **Returns:** *RegExpExecArray[]* ___ ### matchNumberFormat ▸ **matchNumberFormat**(`str`: string): *RegExpExecArray[]* *Defined in [src/format/parser.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L55)* **Parameters:** Name | Type | ------ | ------ | `str` | string | **Returns:** *RegExpExecArray[]* ___ ### memoize ▸ **memoize**‹**T**›(`fn`: function): *(Anonymous function)* *Defined in [src/DateTimeDefault.ts:229](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L229)* Function memoization for improved performance. **Type parameters:** ▪ **T** **Parameters:** ▪ **fn**: *function* ▸ (`arg`: string): *T* **Parameters:** Name | Type | ------ | ------ | `arg` | string | **Returns:** *(Anonymous function)* ___ ### movedSimpleCellAddress ▸ **movedSimpleCellAddress**(`address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `toSheet`: number, `toRight`: number, `toBottom`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/Cell.ts:205](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L205)* **Parameters:** Name | Type | ------ | ------ | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `toSheet` | number | `toRight` | number | `toBottom` | number | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### normalizeAddedIndexes ▸ **normalizeAddedIndexes**(`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:1068](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L1068)* **Parameters:** Name | Type | ------ | ------ | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* ___ ### normalizeRemovedIndexes ▸ **normalizeRemovedIndexes**(`indexes`: [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]): *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* *Defined in [src/Operations.ts:1037](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L1037)* **Parameters:** Name | Type | ------ | ------ | `indexes` | [ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[] | **Returns:** *[ColumnRowIndex](https://hyperformula.handsontable.com/docs/api/globals.md#columnrowindex)[]* ___ ### numberFormat ▸ **numberFormat**(`tokens`: [FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)[], `value`: number): *RawScalarValue* *Defined in [src/format/format.ts:78](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L78)* **Parameters:** Name | Type | ------ | ------ | `tokens` | [FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)[] | `value` | number | **Returns:** *RawScalarValue* ___ ### numberToSimpleTime ▸ **numberToSimpleTime**(`arg`: number): *[SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)* *Defined in [src/DateTimeHelper.ts:304](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L304)* **Parameters:** Name | Type | ------ | ------ | `arg` | number | **Returns:** *[SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)* ___ ### objectDestroy ▸ **objectDestroy**(`object`: any): *void* *Defined in [src/Destroy.ts:6](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Destroy.ts#L6)* **`license`** Copyright (c) 2025 Handsoncode. All rights reserved. **Parameters:** Name | Type | ------ | ------ | `object` | any | **Returns:** *void* ___ ### offsetMonth ▸ **offsetMonth**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md), `offset`: number): *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/DateTimeHelper.ts:286](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L286)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | `offset` | number | **Returns:** *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* ___ ### padLeft ▸ **padLeft**(`number`: number | string, `size`: number): *string* *Defined in [src/format/format.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L58)* **Parameters:** Name | Type | ------ | ------ | `number` | number | string | `size` | number | **Returns:** *string* ___ ### padRight ▸ **padRight**(`number`: number | string, `size`: number): *string* *Defined in [src/format/format.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/format.ts#L66)* **Parameters:** Name | Type | ------ | ------ | `number` | number | string | `size` | number | **Returns:** *string* ___ ### parse ▸ **parse**(`str`: string): *[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)* *Defined in [src/format/parser.ts:121](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L121)* **Parameters:** Name | Type | ------ | ------ | `str` | string | **Returns:** *[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)* ___ ### parseDateFormat ▸ **parseDateFormat**(`dateFormat`: string): *object* *Defined in [src/DateTimeDefault.ts:206](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L206)* Parses a date format string into a format object. **Parameters:** Name | Type | ------ | ------ | `dateFormat` | string | **Returns:** *object* * **dayItem**: *number* * **itemsCount**: *number* * **longYearItem**: *number* * **monthItem**: *number* * **shortYearItem**: *number* ___ ### parseForDateTimeFormat ▸ **parseForDateTimeFormat**(`str`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)›* *Defined in [src/format/parser.ts:96](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L96)* **Parameters:** Name | Type | ------ | ------ | `str` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)›* ___ ### parseForNumberFormat ▸ **parseForNumberFormat**(`str`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)›* *Defined in [src/format/parser.ts:109](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L109)* **Parameters:** Name | Type | ------ | ------ | `str` | string | **Returns:** *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[FormatExpression](https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression.md)›* ___ ### parseTimeFormat ▸ **parseTimeFormat**(`timeFormat`: string): *object* *Defined in [src/DateTimeDefault.ts:186](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeDefault.ts#L186)* Parses a time format string into a format object. **Parameters:** Name | Type | ------ | ------ | `timeFormat` | string | **Returns:** *object* * **hourItem**: *number* * **itemsCount**: *number* * **minuteItem**: *number* * **secondItem**: *number* ___ ### postMortem ▸ **postMortem**(`method`: any): *(Anonymous function)* *Defined in [src/Destroy.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Destroy.ts#L16)* **Parameters:** Name | Type | ------ | ------ | `method` | any | **Returns:** *(Anonymous function)* ___ ### replacer ▸ **replacer**(`key`: string, `val`: any): *any* *Defined in [src/errors.ts:134](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L134)* **Parameters:** Name | Type | ------ | ------ | `key` | string | `val` | any | **Returns:** *any* ___ ### roundToEpsilon ▸ **roundToEpsilon**(`arg`: number, `epsilon`: number): *number* *Defined in [src/DateTimeHelper.ts:299](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L299)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `arg` | number | - | `epsilon` | number | 1 | **Returns:** *number* ___ ### roundToNearestSecond ▸ **roundToNearestSecond**(`arg`: number): *number* *Defined in [src/DateTimeHelper.ts:295](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L295)* **Parameters:** Name | Type | ------ | ------ | `arg` | number | **Returns:** *number* ___ ### simpleCellAddress ▸ **simpleCellAddress**(`sheet`: number, `col`: number, `row`: number): *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/Cell.ts:198](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L198)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `col` | number | `row` | number | **Returns:** *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### simpleCellRange ▸ **simpleCellRange**(`start`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `end`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *object* *Defined in [src/AbsoluteCellRange.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L43)* **Parameters:** Name | Type | ------ | ------ | `start` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `end` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *object* * **end**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* * **start**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* ___ ### simpleColumnAddress ▸ **simpleColumnAddress**(`sheet`: number, `col`: number): *[SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)* *Defined in [src/Cell.ts:188](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L188)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `col` | number | **Returns:** *[SimpleColumnAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress.md)* ___ ### simpleRowAddress ▸ **simpleRowAddress**(`sheet`: number, `row`: number): *[SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)* *Defined in [src/Cell.ts:179](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L179)* **Parameters:** Name | Type | ------ | ------ | `sheet` | number | `row` | number | **Returns:** *[SimpleRowAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress.md)* ___ ### split ▸ **split**‹**T**›(`iterable`: IterableIterator‹T›): *object* *Defined in [src/generatorUtils.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/generatorUtils.ts#L11)* **Type parameters:** ▪ **T** **Parameters:** Name | Type | ------ | ------ | `iterable` | IterableIterator‹T› | **Returns:** *object* * **rest**: *IterableIterator‹T›* * **value**? : *T* ___ ### timeToNumber ▸ **timeToNumber**(`time`: [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md)): *number* *Defined in [src/DateTimeHelper.ts:315](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L315)* **Parameters:** Name | Type | ------ | ------ | `time` | [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md) | **Returns:** *number* ___ ### toBasisEU ▸ **toBasisEU**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/DateTimeHelper.ts:319](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L319)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* ___ ### truncateDayInMonth ▸ **truncateDayInMonth**(`date`: [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)): *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/DateTimeHelper.ts:291](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L291)* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md) | **Returns:** *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* ___ ### validateArgToType ▸ **validateArgToType**(`inputValue`: any, `expectedType`: string, `paramName`: string): *void* *Defined in [src/ArgumentSanitization.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L81)* **Parameters:** Name | Type | ------ | ------ | `inputValue` | any | `expectedType` | string | `paramName` | string | **Returns:** *void* ___ ### validateAsSheet ▸ **validateAsSheet**(`sheet`: [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet)): *void* *Defined in [src/Sheet.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L33)* **Parameters:** Name | Type | ------ | ------ | `sheet` | [Sheet](https://hyperformula.handsontable.com/docs/api/globals.md#sheet) | **Returns:** *void* ___ ### validateNumberToBeAtLeast ▸ **validateNumberToBeAtLeast**(`value`: number, `paramName`: string, `minimum`: number): *void* *Defined in [src/ArgumentSanitization.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L34)* **Parameters:** Name | Type | ------ | ------ | `value` | number | `paramName` | string | `minimum` | number | **Returns:** *void* ___ ### validateNumberToBeAtMost ▸ **validateNumberToBeAtMost**(`value`: number, `paramName`: string, `maximum`: number): *void* *Defined in [src/ArgumentSanitization.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ArgumentSanitization.ts#L40)* **Parameters:** Name | Type | ------ | ------ | `value` | number | `paramName` | string | `maximum` | number | **Returns:** *void* ## Object literals ### CellValueDetailedType ### ▪ **CellValueDetailedType**: *object* *Defined in [src/Cell.ts:95](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L95)* ___ ### CellValueType ### ▪ **CellValueType**: *object* *Defined in [src/Cell.ts:92](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L92)* ___ ### consoleMessages ### ▪ **consoleMessages**: *object* *Defined in [src/helpers/licenseKeyValidator.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L36)* List of all not valid messages which may occur. ### expired ▸ **expired**(`__namedParameters`: object): *string* *Defined in [src/helpers/licenseKeyValidator.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L38)* **Parameters:** ▪ **__namedParameters**: *object* Name | Type | ------ | ------ | `keyValidityDate` | string | **Returns:** *string* ### invalid ▸ **invalid**(): *string* *Defined in [src/helpers/licenseKeyValidator.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L37)* **Returns:** *string* ### missing ▸ **missing**(): *string* *Defined in [src/helpers/licenseKeyValidator.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/helpers/licenseKeyValidator.ts#L40)* **Returns:** *string* ___ ### maxDate ### ▪ **maxDate**: *object* *Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L51)* ### day • **day**: *number* = 31 *Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L51)* ### month • **month**: *number* = 12 *Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L51)* ### year • **year**: *number* = 9999 *Defined in [src/DateTimeHelper.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L51)* --- ## CellValueChange URL: https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange # CellValueChange ## Properties ### address • **address**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/ContentChanges.ts:11](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L11)* ___ ### oldValue • **oldValue**? : *InterpreterValue* *Defined in [src/ContentChanges.ts:13](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L13)* ___ ### value • **value**: *InterpreterValue* *Defined in [src/ContentChanges.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L12)* --- ## ChangedCell URL: https://hyperformula.handsontable.com/docs/api/interfaces/changedcell # ChangedCell ## Properties ### address • **address**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/Operations.ts:133](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L133)* ___ ### cellType • **cellType**: *[ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)* *Defined in [src/Operations.ts:134](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L134)* --- ## ChangeExporter URL: https://hyperformula.handsontable.com/docs/api/interfaces/changeexporter # ChangeExporter ## Properties ### exportChange • **exportChange**: *function* *Defined in [src/ContentChanges.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L17)* #### Type declaration: ▸ (`arg`: [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)): *T | T[]* **Parameters:** Name | Type | ------ | ------ | `arg` | [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md) | --- ## ClipboardCellEmpty URL: https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellempty # ClipboardCellEmpty ## Properties ### type • **type**: *[EMPTY](https://hyperformula.handsontable.com/docs/api/enums/clipboardcelltype.md#empty)* *Defined in [src/ClipboardOperations.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L37)* --- ## ClipboardCellFormula URL: https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellformula # ClipboardCellFormula ## Properties ### hash • **hash**: *string* *Defined in [src/ClipboardOperations.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L42)* ___ ### type • **type**: *[FORMULA](https://hyperformula.handsontable.com/docs/api/enums/clipboardcelltype.md#formula)* *Defined in [src/ClipboardOperations.ts:41](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L41)* --- ## Config URL: https://hyperformula.handsontable.com/docs/api/classes/config # Config ## Constructors ### constructor \+ **new Config**(`options`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›, `showDeprecatedWarns`: boolean): *[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)* *Defined in [src/Config.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L168)* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `options` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | {} | `showDeprecatedWarns` | boolean | true | **Returns:** *[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)* ## Properties ### accentSensitive • **accentSensitive**: *boolean* *Defined in [src/Config.ts:81](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L81)* When set to `true`, makes string comparison accent-sensitive. Applies only to comparison operators. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### arrayColumnSeparator • **arrayColumnSeparator**: *"," | ";"* *Defined in [src/Config.ts:91](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L91)* Sets a column separator symbol for array notation. For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** ',' ___ ### arrayRowSeparator • **arrayRowSeparator**: *";" | "|"* *Defined in [src/Config.ts:93](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L93)* Sets a row separator symbol for array notation. For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** ';' ___ ### caseFirst • **caseFirst**: *"upper" | "lower" | "false"* *Defined in [src/Config.ts:83](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L83)* When set to `upper`, upper case sorts first. When set to `lower`, lower case sorts first. When set to `false`, uses the locale's default. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** 'lower' ___ ### caseSensitive • **caseSensitive**: *boolean* *Defined in [src/Config.ts:77](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L77)* When set to `true`, makes string comparison case-sensitive. Applies to comparison operators only. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### chooseAddressMappingPolicy • **chooseAddressMappingPolicy**: *ChooseAddressMapping* *Defined in [src/Config.ts:79](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L79)* Sets the address mapping policy to be used. Built-in implementations: - `DenseSparseChooseBasedOnThreshold`: sets the address mapping policy separately for each sheet, based on fill ratio. - `AlwaysDense`: uses `DenseStrategy` for all sheets. - `AlwaysSparse`: uses `SparseStrategy` for all sheets. For more information, see the [Performance guide](https://hyperformula.handsontable.com/docs/guide/performance.md). **`default`** AlwaysDense ___ ### context • **context**: *unknown* *Defined in [src/Config.ts:144](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L144)* A generic parameter that can be used to pass data to custom functions. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`default`** undefined ___ ### currencySymbol • **currencySymbol**: *string[]* *Defined in [src/Config.ts:138](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L138)* Sets symbols that denote currency numbers. For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** ['$'] ___ ### dateFormats • **dateFormats**: *string[]* *Defined in [src/Config.ts:85](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L85)* Sets the date formats accepted by the date-parsing function. A format must be specified as a string consisting of tokens and separators. Supported tokens: - `DD` (day of month) - `MM` (month as a number) - `YYYY` (year as a 4-digit number) - `YY` (year as a 2-digit number) Supported separators: - `/` (slash) - `-` (dash) - `.` (dot) - ` ` (empty space) Regardless of the separator specified in the format string, all of the above are accepted by the date-parsing function. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** ['DD/MM/YYYY', 'DD/MM/YY'] ___ ### decimalSeparator • **decimalSeparator**: *"." | ","* *Defined in [src/Config.ts:95](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L95)* Sets a decimal separator used for parsing numerical literals. Can be one of the following: - `.` (period) - `,` (comma) Must be different from [thousandSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) and [functionArgSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** '.' ___ ### evaluateNullToZero • **evaluateNullToZero**: *boolean* *Defined in [src/Config.ts:114](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L114)* When set to `true`, formulas evaluating to `null` evaluate to `0` instead. **`default`** false ___ ### functionArgSeparator • **functionArgSeparator**: *string* *Defined in [src/Config.ts:89](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L89)* Sets a separator character that separates procedure arguments in formulas. Must be different from [decimalSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) and [thousandSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** ',' ___ ### functionPlugins • **functionPlugins**: *FunctionPluginDefinition[]* *Defined in [src/Config.ts:106](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L106)* Lists additional function plugins to be used by the formula interpreter. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`default`** [] ___ ### ignorePunctuation • **ignorePunctuation**: *boolean* *Defined in [src/Config.ts:110](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L110)* When set to `true`, string comparison ignores punctuation. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### ignoreWhiteSpace • **ignoreWhiteSpace**: *"standard" | "any"* *Defined in [src/Config.ts:101](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L101)* Controls the set of whitespace characters that are allowed inside a formula. When set to `'standard'`, allows only SPACE (U+0020), CHARACTER TABULATION (U+0009), LINE FEED (U+000A), and CARRIAGE RETURN (U+000D) (compliant with OpenFormula Standard 1.3) When set to `'any'`, allows all whitespace characters that would be captured by the `\s` character class of the JavaScript regular expressions. **`default`** 'standard' ___ ### language • **language**: *string* *Defined in [src/Config.ts:99](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L99)* Sets a translation package for function and error names. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`default`** 'enGB' ___ ### leapYear1900 • **leapYear1900**: *boolean* *Defined in [src/Config.ts:108](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L108)* Sets year 1900 as a leap year. For compatibility with Lotus 1-2-3 and Microsoft Excel, set this option to `true`. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md) and [nullDate](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nulldate). **`default`** false ___ ### licenseKey • **licenseKey**: *string* *Defined in [src/Config.ts:103](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L103)* Sets your HyperFormula license key. To use HyperFormula on the GPLv3 license terms, set this option to `gpl-v3`. To use HyperFormula with your proprietary license, set this option to your valid license key string. For more information, go [here](https://hyperformula.handsontable.com/docs/guide/license-key.md). **`default`** undefined ___ ### localeLang • **localeLang**: *string* *Defined in [src/Config.ts:112](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L112)* Sets the locale for language-sensitive string comparison. Accepts **IETF BCP 47** language tags. For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** 'en' ___ ### matchWholeCell • **matchWholeCell**: *boolean* *Defined in [src/Config.ts:168](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L168)* When set to `true`, function criteria require whole cells to match the pattern. When set to `false`, function criteria require just a sub-word to match the pattern. **`default`** true ___ ### maxColumns • **maxColumns**: *number* *Defined in [src/Config.ts:155](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L155)* Sets the maximum number of columns. **`default`** 18.278 (Columns A, B, ..., ZZZ) ___ ### maxPendingLazyTransformations • **maxPendingLazyTransformations**: *number* *Defined in [src/Config.ts:142](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L142)* Controls memory usage for long-running instances by limiting the number of pending lazy transformations before cleanup occurs. Structural operations (adding/removing rows/columns, moving cells) create transformations that are applied lazily to formulas. This setting determines how many can accumulate before they are flushed and memory is reclaimed. Lower values reduce peak memory usage but may slightly increase CPU overhead. Higher values reduce overhead but allow more memory accumulation. **`default`** 50 ___ ### maxRows • **maxRows**: *number* *Defined in [src/Config.ts:153](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L153)* Sets the maximum number of rows. **`default`** 40.000 ___ ### nullDate • **nullDate**: *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/Config.ts:136](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L136)* Internally, each date is represented as a number of days that passed since `nullDate`. This option sets a specific date from which that number of days is counted. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** {year: 1899, month: 12, day: 30} ___ ### nullYear • **nullYear**: *number* *Defined in [src/Config.ts:116](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L116)* Sets the interpretation of two-digit year values. Two-digit year values (`xx`) can either become `19xx` or `20xx`. If `xx` is less or equal to `nullYear`, two-digit year values become `20xx`. If `xx` is more than `nullYear`, two-digit year values become `19xx`. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** 30 ___ ### parseDateTime • **parseDateTime**: *function* *Defined in [src/Config.ts:118](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L118)* Sets a function that parses strings representing date-time into actual date-time values. The function should return a [DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime) object or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultParseToDateTime #### Type declaration: ▸ (`dateTimeString`: string, `dateFormat?`: undefined | string, `timeFormat?`: undefined | string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)›* **Parameters:** Name | Type | ------ | ------ | `dateTimeString` | string | `dateFormat?` | undefined | string | `timeFormat?` | undefined | string | ___ ### precisionEpsilon • **precisionEpsilon**: *number* *Defined in [src/Config.ts:126](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L126)* Sets how far two numerical values need to be from each other to be treated as non-equal. `a` and `b` are equal if all three of the following conditions are met: - Both `a` and `b` are of the same sign - `abs(a)` <= `(1+precisionEpsilon) * abs(b)` - `abs(b)` <= `(1+precisionEpsilon) * abs(a)` Additionally, this option controls the snap-to-zero behavior for additions and subtractions: - For `c=a+b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0` - For `c=a-b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0` **`default`** 1e-13 ___ ### precisionRounding • **precisionRounding**: *number* *Defined in [src/Config.ts:128](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L128)* Sets the precision level of calculations' output. Internally, all arithmetic operations are performed using JavaScript's built-in numbers. But when HyperFormula exports a cell's value, it rounds the output to the `precisionRounding` number of significant digits. Setting `precisionRounding` too low can cause large numbers' imprecision (for example, with `precisionRounding` set to `4`, 100005 becomes 100010). Setting precisionRounding too high will expose the floating-point calculation errors. For example, with `precisionRounding` set to `15`, `0.1 + 0.2` results in `0.3000000000000001`. **`default`** 10 ___ ### smartRounding • **smartRounding**: *boolean* *Defined in [src/Config.ts:130](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L130)* When set to `false`, no rounding happens, and numbers are equal if and only if they are of truly identical value. For more information, see [precisionEpsilon](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#precisionepsilon). **`default`** true ___ ### stringifyCurrency • **stringifyCurrency**: *function* *Defined in [src/Config.ts:124](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L124)* Sets a function that converts numeric values into currency-formatted strings. The function receives the raw value and the format string passed to `TEXT` and should return a string or `undefined`. The formatter calls this for every format string that reaches it, not only currency-shaped ones — return `undefined` for any format your callback does not handle and HyperFormula will fall through to the built-in number formatter. For more information, see the [Currency handling guide](https://hyperformula.handsontable.com/docs/guide/currency-handling.md). **`default`** defaultStringifyCurrency #### Type declaration: ▸ (`value`: number, `currencyFormat`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `value` | number | `currencyFormat` | string | ___ ### stringifyDateTime • **stringifyDateTime**: *function* *Defined in [src/Config.ts:120](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L120)* Sets a function that converts date-time values into strings. The function should return a string or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultStringifyDateTime #### Type declaration: ▸ (`date`: [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime), `formatArg`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `date` | [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime) | `formatArg` | string | ___ ### stringifyDuration • **stringifyDuration**: *function* *Defined in [src/Config.ts:122](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L122)* Sets a function that converts time duration values into strings. The function should return a string or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultStringifyDuration #### Type declaration: ▸ (`time`: [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md), `formatArg`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `time` | [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md) | `formatArg` | string | ___ ### thousandSeparator • **thousandSeparator**: *"" | "," | " " | "."* *Defined in [src/Config.ts:97](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L97)* Sets the thousands' separator symbol for parsing numerical literals. Can be one of the following: - empty - `,` (comma) - ` ` (empty space) Must be different from [decimalSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) and [functionArgSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** '' ___ ### timeFormats • **timeFormats**: *string[]* *Defined in [src/Config.ts:87](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L87)* Sets the time formats accepted by the time-parsing function. A format must be specified as a string consisting of at least two tokens separated by `:` (a colon). Supported tokens: - `hh` (hours) - `mm` (minutes) - `ss`, `ss.s`, `ss.ss`, `ss.sss`, `ss.ssss`, etc. (seconds) The number of decimal places in the seconds token does not matter. All versions of the seconds token are equivalent in the context of parsing time values. Regardless of the time format specified, the hours-minutes-seconds value may be followed by the AM/PM designator. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`example`** E.g., for `timeFormats = ['hh:mm:ss.sss']`, valid time strings include: - `1:33:33` - `1:33:33.3` - `1:33:33.33` - `1:33:33.333` - `01:33:33` - `1:33:33 AM` - `1:33:33 PM` - `1:33:33 am` - `1:33:33 pm` - `1:33:33AM` - `1:33:33PM` **`default`** ['hh:mm', 'hh:mm:ss.sss'] ___ ### undoLimit • **undoLimit**: *number* *Defined in [src/Config.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L140)* Sets the number of elements kept in the undo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`default`** 20 ___ ### useArrayArithmetic • **useArrayArithmetic**: *boolean* *Defined in [src/Config.ts:75](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L75)* When set to `true`, array arithmetic is enabled globally. When set to `false`, array arithmetic is enabled only inside array functions (`ARRAYFORMULA`, `FILTER`, and `ARRAY_CONSTRAIN`). For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** false ___ ### useColumnIndex • **useColumnIndex**: *boolean* *Defined in [src/Config.ts:132](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L132)* When set to `true`, switches column search strategy from binary search to column index. Using column index improves efficiency of the `VLOOKUP` and `MATCH` functions, but increases memory usage. When searching with wildcards or regular expressions, column search strategy falls back to binary search (even with `useColumnIndex` set to `true`). For more information, see the [Performance guide](https://hyperformula.handsontable.com/docs/guide/performance.md). **`default`** false ___ ### useRegularExpressions • **useRegularExpressions**: *boolean* *Defined in [src/Config.ts:164](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L164)* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) are allowed to use regular expressions. **`default`** false ___ ### useStats • **useStats**: *boolean* *Defined in [src/Config.ts:134](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L134)* When set to `true`, enables gathering engine statistics and timings. Useful for testing and benchmarking. **`default`** false ___ ### useWildcards • **useWildcards**: *boolean* *Defined in [src/Config.ts:166](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L166)* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) can use the `*` and `?` wildcards. **`default`** true ## Methods ### getConfig ▸ **getConfig**(): *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* *Defined in [src/Config.ts:311](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L311)* **Returns:** *[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)* ___ ### mergeConfig ▸ **mergeConfig**(`init`: Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)›): *[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)* *Defined in [src/Config.ts:315](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L315)* **Parameters:** Name | Type | ------ | ------ | `init` | Partial‹[ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md)› | **Returns:** *[Config](https://hyperformula.handsontable.com/docs/api/classes/config.md)* ## Object literals ### defaultConfig ### ▪ **defaultConfig**: *object* *Defined in [src/Config.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L31)* ### accentSensitive • **accentSensitive**: *false* = false *Defined in [src/Config.ts:32](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L32)* ### arrayColumnSeparator • **arrayColumnSeparator**: *","* = "," *Defined in [src/Config.ts:50](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L50)* ### arrayRowSeparator • **arrayRowSeparator**: *";"* = ";" *Defined in [src/Config.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L51)* ### caseFirst • **caseFirst**: *"lower"* = "lower" *Defined in [src/Config.ts:35](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L35)* ### caseSensitive • **caseSensitive**: *false* = false *Defined in [src/Config.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L34)* ### chooseAddressMappingPolicy • **chooseAddressMappingPolicy**: *AlwaysDense‹›* = new AlwaysDense() *Defined in [src/Config.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L37)* ### context • **context**: *undefined* = undefined *Defined in [src/Config.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L36)* ### currencySymbol • **currencySymbol**: *string[]* = ['$'] *Defined in [src/Config.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L33)* ### dateFormats • **dateFormats**: *string[]* = ['DD/MM/YYYY', 'DD/MM/YY'] *Defined in [src/Config.ts:38](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L38)* ### decimalSeparator • **decimalSeparator**: *"."* = "." *Defined in [src/Config.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L39)* ### evaluateNullToZero • **evaluateNullToZero**: *false* = false *Defined in [src/Config.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L40)* ### functionArgSeparator • **functionArgSeparator**: *string* = "," *Defined in [src/Config.ts:41](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L41)* ### functionPlugins • **functionPlugins**: *never[]* = [] *Defined in [src/Config.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L42)* ### ignorePunctuation • **ignorePunctuation**: *false* = false *Defined in [src/Config.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L43)* ### ignoreWhiteSpace • **ignoreWhiteSpace**: *"standard"* = "standard" *Defined in [src/Config.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L45)* ### language • **language**: *string* = "enGB" *Defined in [src/Config.ts:44](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L44)* ### leapYear1900 • **leapYear1900**: *false* = false *Defined in [src/Config.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L47)* ### licenseKey • **licenseKey**: *string* = "" *Defined in [src/Config.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L46)* ### localeLang • **localeLang**: *string* = "en" *Defined in [src/Config.ts:48](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L48)* ### matchWholeCell • **matchWholeCell**: *true* = true *Defined in [src/Config.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L49)* ### maxColumns • **maxColumns**: *number* = 18278 *Defined in [src/Config.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L53)* ### maxPendingLazyTransformations • **maxPendingLazyTransformations**: *number* = 50 *Defined in [src/Config.ts:66](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L66)* ### maxRows • **maxRows**: *number* = 40000 *Defined in [src/Config.ts:52](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L52)* ### nullYear • **nullYear**: *number* = 30 *Defined in [src/Config.ts:54](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L54)* ### parseDateTime • **parseDateTime**: *[defaultParseToDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#defaultparsetodatetime)* = defaultParseToDateTime *Defined in [src/Config.ts:56](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L56)* ### precisionEpsilon • **precisionEpsilon**: *number* = 1e-13 *Defined in [src/Config.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L57)* ### precisionRounding • **precisionRounding**: *number* = 10 *Defined in [src/Config.ts:58](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L58)* ### smartRounding • **smartRounding**: *true* = true *Defined in [src/Config.ts:59](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L59)* ### stringifyCurrency • **stringifyCurrency**: *[defaultStringifyCurrency](https://hyperformula.handsontable.com/docs/api/globals.md#defaultstringifycurrency)* = defaultStringifyCurrency *Defined in [src/Config.ts:62](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L62)* ### stringifyDateTime • **stringifyDateTime**: *[defaultStringifyDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#defaultstringifydatetime)* = defaultStringifyDateTime *Defined in [src/Config.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L60)* ### stringifyDuration • **stringifyDuration**: *[defaultStringifyDuration](https://hyperformula.handsontable.com/docs/api/globals.md#defaultstringifyduration)* = defaultStringifyDuration *Defined in [src/Config.ts:61](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L61)* ### thousandSeparator • **thousandSeparator**: *""* = "" *Defined in [src/Config.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L64)* ### timeFormats • **timeFormats**: *string[]* = ['hh:mm', 'hh:mm:ss.sss'] *Defined in [src/Config.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L63)* ### undoLimit • **undoLimit**: *number* = 20 *Defined in [src/Config.ts:65](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L65)* ### useArrayArithmetic • **useArrayArithmetic**: *false* = false *Defined in [src/Config.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L71)* ### useColumnIndex • **useColumnIndex**: *false* = false *Defined in [src/Config.ts:69](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L69)* ### useRegularExpressions • **useRegularExpressions**: *false* = false *Defined in [src/Config.ts:67](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L67)* ### useStats • **useStats**: *false* = false *Defined in [src/Config.ts:70](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L70)* ### useWildcards • **useWildcards**: *true* = true *Defined in [src/Config.ts:68](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L68)* ▪ **nullDate**: *object* *Defined in [src/Config.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Config.ts#L55)* * **day**: *number* = 30 * **month**: *number* = 12 * **year**: *number* = 1899 --- ## ColumnsRemoval URL: https://hyperformula.handsontable.com/docs/api/interfaces/columnsremoval # ColumnsRemoval ## Properties ### columnCount • **columnCount**: *number* *Defined in [src/Operations.ts:146](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L146)* ___ ### columnFrom • **columnFrom**: *number* *Defined in [src/Operations.ts:145](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L145)* ___ ### removedCells • **removedCells**: *[ChangedCell](https://hyperformula.handsontable.com/docs/api/interfaces/changedcell.md)[]* *Defined in [src/Operations.ts:148](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L148)* ___ ### version • **version**: *number* *Defined in [src/Operations.ts:147](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L147)* --- ## ClipboardCellValue URL: https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellvalue # ClipboardCellValue ## Properties ### parsedValue • **parsedValue**: *ValueCellVertexValue* *Defined in [src/ClipboardOperations.ts:32](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L32)* ___ ### rawValue • **rawValue**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/ClipboardOperations.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L33)* ___ ### type • **type**: *[VALUE](https://hyperformula.handsontable.com/docs/api/enums/clipboardcelltype.md#value)* *Defined in [src/ClipboardOperations.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L31)* --- ## ClipboardCellParsingError URL: https://hyperformula.handsontable.com/docs/api/interfaces/clipboardcellparsingerror # ClipboardCellParsingError ## Properties ### errors • **errors**: *ParsingError[]* *Defined in [src/ClipboardOperations.ts:48](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L48)* ___ ### rawInput • **rawInput**: *string* *Defined in [src/ClipboardOperations.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L47)* ___ ### type • **type**: *[PARSING_ERROR](https://hyperformula.handsontable.com/docs/api/enums/clipboardcelltype.md#parsing_error)* *Defined in [src/ClipboardOperations.ts:46](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ClipboardOperations.ts#L46)* --- ## ConfigParams URL: https://hyperformula.handsontable.com/docs/api/interfaces/configparams # ConfigParams ## License ### licenseKey • **licenseKey**: *string* *Defined in [src/ConfigParams.ts:182](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L182)* Sets your HyperFormula license key. To use HyperFormula on the GPLv3 license terms, set this option to `gpl-v3`. To use HyperFormula with your proprietary license, set this option to your valid license key string. For more information, go [here](https://hyperformula.handsontable.com/docs/guide/license-key.md). **`default`** undefined ___ ## Engine ### chooseAddressMappingPolicy • **chooseAddressMappingPolicy**: *ChooseAddressMapping* *Defined in [src/ConfigParams.ts:55](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L55)* Sets the address mapping policy to be used. Built-in implementations: - `DenseSparseChooseBasedOnThreshold`: sets the address mapping policy separately for each sheet, based on fill ratio. - `AlwaysDense`: uses `DenseStrategy` for all sheets. - `AlwaysSparse`: uses `SparseStrategy` for all sheets. For more information, see the [Performance guide](https://hyperformula.handsontable.com/docs/guide/performance.md). **`default`** AlwaysDense ___ ### context • **context**: *unknown* *Defined in [src/ConfigParams.ts:63](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L63)* A generic parameter that can be used to pass data to custom functions. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`default`** undefined ___ ### evaluateNullToZero • **evaluateNullToZero**: *boolean* *Defined in [src/ConfigParams.ts:125](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L125)* When set to `true`, formulas evaluating to `null` evaluate to `0` instead. **`default`** false ___ ### maxColumns • **maxColumns**: *number* *Defined in [src/ConfigParams.ts:228](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L228)* Sets the maximum number of columns. **`default`** 18.278 (Columns A, B, ..., ZZZ) ___ ### maxPendingLazyTransformations • **maxPendingLazyTransformations**: *number* *Defined in [src/ConfigParams.ts:435](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L435)* Controls memory usage for long-running instances by limiting the number of pending lazy transformations before cleanup occurs. Structural operations (adding/removing rows/columns, moving cells) create transformations that are applied lazily to formulas. This setting determines how many can accumulate before they are flushed and memory is reclaimed. Lower values reduce peak memory usage but may slightly increase CPU overhead. Higher values reduce overhead but allow more memory accumulation. **`default`** 50 ___ ### maxRows • **maxRows**: *number* *Defined in [src/ConfigParams.ts:222](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L222)* Sets the maximum number of rows. **`default`** 40.000 ___ ### useArrayArithmetic • **useArrayArithmetic**: *boolean* *Defined in [src/ConfigParams.ts:392](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L392)* When set to `true`, array arithmetic is enabled globally. When set to `false`, array arithmetic is enabled only inside array functions (`ARRAYFORMULA`, `FILTER`, and `ARRAY_CONSTRAIN`). For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** false ___ ### useColumnIndex • **useColumnIndex**: *boolean* *Defined in [src/ConfigParams.ts:404](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L404)* When set to `true`, switches column search strategy from binary search to column index. Using column index improves efficiency of the `VLOOKUP` and `MATCH` functions, but increases memory usage. When searching with wildcards or regular expressions, column search strategy falls back to binary search (even with `useColumnIndex` set to `true`). For more information, see the [Performance guide](https://hyperformula.handsontable.com/docs/guide/performance.md). **`default`** false ___ ### useStats • **useStats**: *boolean* *Defined in [src/ConfigParams.ts:412](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L412)* When set to `true`, enables gathering engine statistics and timings. Useful for testing and benchmarking. **`default`** false ___ ## Formula Syntax ### arrayColumnSeparator • **arrayColumnSeparator**: *"," | ";"* *Defined in [src/ConfigParams.ts:208](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L208)* Sets a column separator symbol for array notation. For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** ',' ___ ### arrayRowSeparator • **arrayRowSeparator**: *";" | "|"* *Defined in [src/ConfigParams.ts:216](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L216)* Sets a row separator symbol for array notation. For more information, see the [Arrays guide](https://hyperformula.handsontable.com/docs/guide/arrays.md). **`default`** ';' ___ ### functionArgSeparator • **functionArgSeparator**: *string* *Defined in [src/ConfigParams.ts:105](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L105)* Sets a separator character that separates procedure arguments in formulas. Must be different from [decimalSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) and [thousandSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** ',' ___ ### functionPlugins • **functionPlugins**: *any[]* *Defined in [src/ConfigParams.ts:134](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L134)* Lists additional function plugins to be used by the formula interpreter. For more information, see the [Custom functions guide](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). **`default`** [] ___ ### ignoreWhiteSpace • **ignoreWhiteSpace**: *"standard" | "any"* *Defined in [src/ConfigParams.ts:160](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L160)* Controls the set of whitespace characters that are allowed inside a formula. When set to `'standard'`, allows only SPACE (U+0020), CHARACTER TABULATION (U+0009), LINE FEED (U+000A), and CARRIAGE RETURN (U+000D) (compliant with OpenFormula Standard 1.3) When set to `'any'`, allows all whitespace characters that would be captured by the `\s` character class of the JavaScript regular expressions. **`default`** 'standard' ___ ### language • **language**: *string* *Defined in [src/ConfigParams.ts:150](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L150)* Sets a translation package for function and error names. For more information, see the [Localizing functions guide](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). **`default`** 'enGB' ___ ## Undo and Redo ### undoLimit • **undoLimit**: *number* *Defined in [src/ConfigParams.ts:420](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L420)* Sets the number of elements kept in the undo history. For more information, see the [Undo-Redo guide](https://hyperformula.handsontable.com/docs/guide/undo-redo.md). **`default`** 20 ___ ## Date and Time ### dateFormats • **dateFormats**: *string[]* *Defined in [src/ConfigParams.ts:95](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L95)* Sets the date formats accepted by the date-parsing function. A format must be specified as a string consisting of tokens and separators. Supported tokens: - `DD` (day of month) - `MM` (month as a number) - `YYYY` (year as a 4-digit number) - `YY` (year as a 2-digit number) Supported separators: - `/` (slash) - `-` (dash) - `.` (dot) - ` ` (empty space) Regardless of the separator specified in the format string, all of the above are accepted by the date-parsing function. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** ['DD/MM/YYYY', 'DD/MM/YY'] ___ ### leapYear1900 • **leapYear1900**: *boolean* *Defined in [src/ConfigParams.ts:170](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L170)* Sets year 1900 as a leap year. For compatibility with Lotus 1-2-3 and Microsoft Excel, set this option to `true`. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md) and [nullDate](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nulldate). **`default`** false ___ ### nullDate • **nullDate**: *[SimpleDate](https://hyperformula.handsontable.com/docs/api/interfaces/simpledate.md)* *Defined in [src/ConfigParams.ts:238](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L238)* Internally, each date is represented as a number of days that passed since `nullDate`. This option sets a specific date from which that number of days is counted. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** {year: 1899, month: 12, day: 30} ___ ### nullYear • **nullYear**: *number* *Defined in [src/ConfigParams.ts:252](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L252)* Sets the interpretation of two-digit year values. Two-digit year values (`xx`) can either become `19xx` or `20xx`. If `xx` is less or equal to `nullYear`, two-digit year values become `20xx`. If `xx` is more than `nullYear`, two-digit year values become `19xx`. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** 30 ___ ### parseDateTime • **parseDateTime**: *function* *Defined in [src/ConfigParams.ts:262](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L262)* Sets a function that parses strings representing date-time into actual date-time values. The function should return a [DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime) object or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultParseToDateTime #### Type declaration: ▸ (`dateTimeString`: string, `dateFormat?`: undefined | string, `timeFormat?`: undefined | string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹[DateTime](https://hyperformula.handsontable.com/docs/api/globals.md#datetime)›* **Parameters:** Name | Type | ------ | ------ | `dateTimeString` | string | `dateFormat?` | undefined | string | `timeFormat?` | undefined | string | ___ ### stringifyDateTime • **stringifyDateTime**: *function* *Defined in [src/ConfigParams.ts:302](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L302)* Sets a function that converts date-time values into strings. The function should return a string or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultStringifyDateTime #### Type declaration: ▸ (`dateTime`: [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime), `dateTimeFormat`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `dateTime` | [SimpleDateTime](https://hyperformula.handsontable.com/docs/api/globals.md#simpledatetime) | `dateTimeFormat` | string | ___ ### stringifyDuration • **stringifyDuration**: *function* *Defined in [src/ConfigParams.ts:312](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L312)* Sets a function that converts time duration values into strings. The function should return a string or undefined. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`default`** defaultStringifyDuration #### Type declaration: ▸ (`time`: [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md), `timeFormat`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `time` | [SimpleTime](https://hyperformula.handsontable.com/docs/api/interfaces/simpletime.md) | `timeFormat` | string | ___ ### timeFormats • **timeFormats**: *string[]* *Defined in [src/ConfigParams.ts:382](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L382)* Sets the time formats accepted by the time-parsing function. A format must be specified as a string consisting of at least two tokens separated by `:` (a colon). Supported tokens: - `hh` (hours) - `mm` (minutes) - `ss`, `ss.s`, `ss.ss`, `ss.sss`, `ss.ssss`, etc. (seconds) The number of decimal places in the seconds token does not matter. All versions of the seconds token are equivalent in the context of parsing time values. Regardless of the time format specified, the hours-minutes-seconds value may be followed by the AM/PM designator. For more information, see the [Date and time handling guide](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). **`example`** E.g., for `timeFormats = ['hh:mm:ss.sss']`, valid time strings include: - `1:33:33` - `1:33:33.3` - `1:33:33.33` - `1:33:33.333` - `01:33:33` - `1:33:33 AM` - `1:33:33 PM` - `1:33:33 am` - `1:33:33 pm` - `1:33:33AM` - `1:33:33PM` **`default`** ['hh:mm', 'hh:mm:ss.sss'] ___ ## Number ### currencySymbol • **currencySymbol**: *string[]* *Defined in [src/ConfigParams.ts:71](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L71)* Sets symbols that denote currency numbers. For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** ['$'] ___ ### decimalSeparator • **decimalSeparator**: *"." | ","* *Defined in [src/ConfigParams.ts:119](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L119)* Sets a decimal separator used for parsing numerical literals. Can be one of the following: - `.` (period) - `,` (comma) Must be different from [thousandSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) and [functionArgSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** '.' ___ ### precisionEpsilon • **precisionEpsilon**: *number* *Defined in [src/ConfigParams.ts:277](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L277)* Sets how far two numerical values need to be from each other to be treated as non-equal. `a` and `b` are equal if all three of the following conditions are met: - Both `a` and `b` are of the same sign - `abs(a)` <= `(1+precisionEpsilon) * abs(b)` - `abs(b)` <= `(1+precisionEpsilon) * abs(a)` Additionally, this option controls the snap-to-zero behavior for additions and subtractions: - For `c=a+b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0` - For `c=a-b`, if `abs(c)` <= `precisionEpsilon * abs(a)`, then `c` is set to `0` **`default`** 1e-13 ___ ### precisionRounding • **precisionRounding**: *number* *Defined in [src/ConfigParams.ts:292](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L292)* Sets the precision level of calculations' output. Internally, all arithmetic operations are performed using JavaScript's built-in numbers. But when HyperFormula exports a cell's value, it rounds the output to the `precisionRounding` number of significant digits. Setting `precisionRounding` too low can cause large numbers' imprecision (for example, with `precisionRounding` set to `4`, 100005 becomes 100010). Setting precisionRounding too high will expose the floating-point calculation errors. For example, with `precisionRounding` set to `15`, `0.1 + 0.2` results in `0.3000000000000001`. **`default`** 10 ___ ### smartRounding • **smartRounding**: *boolean* *Defined in [src/ConfigParams.ts:336](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L336)* When set to `false`, no rounding happens, and numbers are equal if and only if they are of truly identical value. For more information, see [precisionEpsilon](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#precisionepsilon). **`default`** true ___ ### stringifyCurrency • **stringifyCurrency**: *function* *Defined in [src/ConfigParams.ts:328](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L328)* Sets a function that converts numeric values into currency-formatted strings. The function receives the raw value and the format string passed to `TEXT` and should return a string or `undefined`. The formatter calls this for every format string that reaches it, not only currency-shaped ones — return `undefined` for any format your callback does not handle and HyperFormula will fall through to the built-in number formatter. For more information, see the [Currency handling guide](https://hyperformula.handsontable.com/docs/guide/currency-handling.md). **`default`** defaultStringifyCurrency #### Type declaration: ▸ (`value`: number, `currencyFormat`: string): *[Maybe](https://hyperformula.handsontable.com/docs/api/globals.md#maybe)‹string›* **Parameters:** Name | Type | ------ | ------ | `value` | number | `currencyFormat` | string | ___ ### thousandSeparator • **thousandSeparator**: *"" | "," | " " | "."* *Defined in [src/ConfigParams.ts:351](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L351)* Sets the thousands' separator symbol for parsing numerical literals. Can be one of the following: - empty - `,` (comma) - ` ` (empty space) Must be different from [decimalSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) and [functionArgSeparator](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator). For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** '' ___ ## String ### accentSensitive • **accentSensitive**: *boolean* *Defined in [src/ConfigParams.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L20)* When set to `true`, makes string comparison accent-sensitive. Applies only to comparison operators. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### caseFirst • **caseFirst**: *"upper" | "lower" | "false"* *Defined in [src/ConfigParams.ts:42](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L42)* When set to `upper`, upper case sorts first. When set to `lower`, lower case sorts first. When set to `false`, uses the locale's default. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** 'lower' ___ ### caseSensitive • **caseSensitive**: *boolean* *Defined in [src/ConfigParams.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L30)* When set to `true`, makes string comparison case-sensitive. Applies to comparison operators only. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### ignorePunctuation • **ignorePunctuation**: *boolean* *Defined in [src/ConfigParams.ts:142](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L142)* When set to `true`, string comparison ignores punctuation. For more information, see the [Types of operators guide](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings). **`default`** false ___ ### localeLang • **localeLang**: *string* *Defined in [src/ConfigParams.ts:192](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L192)* Sets the locale for language-sensitive string comparison. Accepts **IETF BCP 47** language tags. For more information, see the [Internationalization features guide](https://hyperformula.handsontable.com/docs/guide/i18n-features.md). **`default`** 'en' ___ ### matchWholeCell • **matchWholeCell**: *boolean* *Defined in [src/ConfigParams.ts:200](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L200)* When set to `true`, function criteria require whole cells to match the pattern. When set to `false`, function criteria require just a sub-word to match the pattern. **`default`** true ___ ### useRegularExpressions • **useRegularExpressions**: *boolean* *Defined in [src/ConfigParams.ts:441](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L441)* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) are allowed to use regular expressions. **`default`** false ___ ### useWildcards • **useWildcards**: *boolean* *Defined in [src/ConfigParams.ts:447](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ConfigParams.ts#L447)* When set to `true`, criteria in functions (SUMIF, COUNTIF, ...) can use the `*` and `?` wildcards. **`default`** true --- ## FormatToken URL: https://hyperformula.handsontable.com/docs/api/interfaces/formattoken # FormatToken ## Properties ### type • **type**: *[TokenType](https://hyperformula.handsontable.com/docs/api/enums/tokentype.md)* *Defined in [src/format/parser.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L17)* ___ ### value • **value**: *string* *Defined in [src/format/parser.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L18)* --- ## GraphBuilderStrategy URL: https://hyperformula.handsontable.com/docs/api/interfaces/graphbuilderstrategy # GraphBuilderStrategy ## Methods ### run ▸ **run**(`sheets`: [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets)): *[Dependencies](https://hyperformula.handsontable.com/docs/api/globals.md#dependencies)* *Defined in [src/GraphBuilder.ts:64](https://github.com/handsontable/hyperformula/blob/af2d59d/src/GraphBuilder.ts#L64)* **Parameters:** Name | Type | ------ | ------ | `sheets` | [Sheets](https://hyperformula.handsontable.com/docs/api/globals.md#sheets) | **Returns:** *[Dependencies](https://hyperformula.handsontable.com/docs/api/globals.md#dependencies)* --- ## MoveCellsResult URL: https://hyperformula.handsontable.com/docs/api/interfaces/movecellsresult # MoveCellsResult ## Properties ### addedGlobalNamedExpressions • **addedGlobalNamedExpressions**: *string[]* *Defined in [src/Operations.ts:154](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L154)* ___ ### overwrittenCellsData • **overwrittenCellsData**: *[[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), [ClipboardCell](https://hyperformula.handsontable.com/docs/api/globals.md#clipboardcell)][]* *Defined in [src/Operations.ts:153](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L153)* ___ ### version • **version**: *number* *Defined in [src/Operations.ts:152](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L152)* --- ## FormatExpression URL: https://hyperformula.handsontable.com/docs/api/interfaces/formatexpression # FormatExpression ## Properties ### tokens • **tokens**: *[FormatToken](https://hyperformula.handsontable.com/docs/api/interfaces/formattoken.md)[]* *Defined in [src/format/parser.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L36)* ___ ### type • **type**: *[FormatExpressionType](https://hyperformula.handsontable.com/docs/api/enums/formatexpressiontype.md)* *Defined in [src/format/parser.ts:35](https://github.com/handsontable/hyperformula/blob/af2d59d/src/format/parser.ts#L35)* --- ## RowsRemoval URL: https://hyperformula.handsontable.com/docs/api/interfaces/rowsremoval # RowsRemoval ## Properties ### removedCells • **removedCells**: *[ChangedCell](https://hyperformula.handsontable.com/docs/api/interfaces/changedcell.md)[]* *Defined in [src/Operations.ts:141](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L141)* ___ ### rowCount • **rowCount**: *number* *Defined in [src/Operations.ts:139](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L139)* ___ ### rowFrom • **rowFrom**: *number* *Defined in [src/Operations.ts:138](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L138)* ___ ### version • **version**: *number* *Defined in [src/Operations.ts:140](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Operations.ts#L140)* --- ## Listeners URL: https://hyperformula.handsontable.com/docs/api/interfaces/listeners # Listeners ## Batch ### evaluationResumed • **evaluationResumed**: *function* *Defined in [src/Emitter.ts:316](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L316)* Occurs when evaluation is resumed. **`param`** the values and location of applied changes **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ] }); // define a function to be called when the event occurs const handler = (changes) => { console.log('baz') } // subscribe to the 'evaluationResumed' event, pass the handler hfInstance.on('evaluationResumed', handler); // first, suspend evaluation hfInstance.suspendEvaluation(); // now, resume evaluation // the console prints 'baz' each time evaluation is resumed hfInstance.resumeEvaluation(); // unsubscribe from the 'evaluationResumed' event hfInstance.off('evaluationResumed', handler); // suspend evaluation again hfInstance.suspendEvaluation(); // resume evaluation again // this time, the console doesn't print anything hfInstance.resumeEvaluation();; ``` #### Type declaration: ▸ (`changes`: [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]): *any* **Parameters:** Name | Type | ------ | ------ | `changes` | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[] | ___ ### evaluationSuspended • **evaluationSuspended**: *function* *Defined in [src/Emitter.ts:274](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L274)* Occurs when evaluation is suspended. **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['1'] ], MySheet2: [ ['10'] ] }); // define a function to be called when the event occurs const handler = ( ) => { console.log('baz') } // subscribe to the 'evaluationSuspended' event, pass the handler hfInstance.on('evaluationSuspended', handler); // suspend evaluation // the console prints 'baz' each time evaluation is suspended hfInstance.suspendEvaluation(); // resume evaluation hfInstance.resumeEvaluation(); // unsubscribe from the 'evaluationSuspended' event hfInstance.off('evaluationSuspended', handler); // suspend evaluation again // this time, the console doesn't print anything hfInstance.suspendEvaluation();; ``` #### Type declaration: ▸ (): *any* ___ ## Named Expression ### namedExpressionAdded • **namedExpressionAdded**: *function* *Defined in [src/Emitter.ts:162](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L162)* Occurs when a named expression with specified values and location is added. **`param`** the name of added expression **`param`** the values and location of applied changes **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // define a function to be called when the event occurs const handler = (namedExpressionName, changes) => { console.log('baz') } // subscribe to the 'namedExpressionAdded' event, pass the handler hfInstance.on('namedExpressionAdded', handler); // add a named expression // the console prints 'baz' each time a named expression is added const changes = hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); // unsubscribe from the 'namedExpressionAdded' event hfInstance.off('namedExpressionAdded', handler); // add another named expression // this time, the console doesn't print anything const changes = hfInstance.addNamedExpression('uglyName', '=Sheet1!$A$1+100', 0); ``` #### Type declaration: ▸ (`namedExpressionName`: string, `changes`: [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]): *any* **Parameters:** Name | Type | ------ | ------ | `namedExpressionName` | string | `changes` | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[] | ___ ### namedExpressionRemoved • **namedExpressionRemoved**: *function* *Defined in [src/Emitter.ts:202](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L202)* Occurs when a named expression with specified values is removed and from an indicated location. **`param`** the name of removed expression **`param`** the values and location of applied changes **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['42'], ]); // define a function to be called when the event occurs const handler = (namedExpressionName, changes) => { console.log('baz') } // subscribe to the 'namedExpressionRemoved' event, pass the handler hfInstance.on('namedExpressionRemoved', handler); // add some named expressions hfInstance.addNamedExpression('prettyName', '=Sheet1!$A$1+100', 0); hfInstance.addNamedExpression('uglyName', '=Sheet1!$A$1+100', 0); // remove a named expression // the console prints 'baz' each time a named expression is removed const changes = hfInstance.removeNamedExpression('prettyName', 0); // unsubscribe from the 'namedExpressionRemoved' event hfInstance.off('namedExpressionRemoved', handler); // remove another named expression // this time, the console doesn't print anything const changes = hfInstance.removeNamedExpression('uglyName', 0); ``` #### Type declaration: ▸ (`namedExpressionName`: string, `changes`: [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]): *any* **Parameters:** Name | Type | ------ | ------ | `namedExpressionName` | string | `changes` | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[] | ___ ## Sheet ### sheetAdded • **sheetAdded**: *function* *Defined in [src/Emitter.ts:52](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L52)* Occurs when a sheet is added anywhere inside the workbook. **`param`** the name of added sheet **`example`** ```js const hfInstance = HyperFormula.buildEmpty(); // define a function to be called when the event occurs const handler = (addedSheetDisplayName) => { console.log('baz') } // subscribe to the 'sheetAdded' event, pass the handler hfInstance.on('sheetAdded', handler); // add a sheet to trigger the 'sheetAdded' event, // the console prints 'baz' each time a sheet is added hfInstance.addSheet('FooBar'); // unsubscribe from the 'sheetAdded' event hfInstance.off('sheetAdded', handler); // add a sheet // this time, the console doesn't print anything hfInstance.addSheet('FooBaz'); ``` #### Type declaration: ▸ (`addedSheetDisplayName`: string): *any* **Parameters:** Name | Type | ------ | ------ | `addedSheetDisplayName` | string | ___ ### sheetRemoved • **sheetRemoved**: *function* *Defined in [src/Emitter.ts:89](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L89)* Occurs when a sheet is removed from anywhere inside the workbook. **`param`** the name of removed sheet **`param`** the values and location of applied changes **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // define a function to be called when the event occurs const handler = (removedSheetDisplayName, changes) => { console.log('baz') } // subscribe to the 'sheetRemoved' event, pass the handler hfInstance.on('sheetRemoved', handler); // remove a sheet to trigger the 'sheetRemoved' event, // the console prints 'baz' each time a sheet is removed hfInstance.removeSheet(0); // unsubscribe from the 'sheetRemoved' event hfInstance.off('sheetRemoved', handler); // remove a sheet // this time, the console doesn't print anything hfInstance.removeSheet(1); ``` #### Type declaration: ▸ (`removedSheetDisplayName`: string, `changes`: [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]): *any* **Parameters:** Name | Type | ------ | ------ | `removedSheetDisplayName` | string | `changes` | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[] | ___ ### sheetRenamed • **sheetRenamed**: *function* *Defined in [src/Emitter.ts:126](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L126)* Occurs when a sheet is renamed anywhere inside the workbook. **`param`** the old name of a sheet before renaming **`param`** the new name of the sheet after renaming **`example`** ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // define a function to be called when the event occurs const handler = (oldName, newName) => { console.log(`Sheet ${oldName} was renamed to ${newName}`) } // subscribe to the 'sheetRenamed' event, pass the handler hfInstance.on('sheetRenamed', handler); // rename a sheet to trigger the 'sheetRenamed' event, // the console prints `Sheet ${oldName} was renamed to ${newName}` each time a sheet is renamed hfInstance.renameSheet(0, 'MySheet0'); // unsubscribe from the 'sheetRenamed' event hfInstance.off('sheetRenamed', handler); // rename a sheet // this time, the console doesn't print anything hfInstance.renameSheet(1, 'MySheet1'); ``` #### Type declaration: ▸ (`oldDisplayName`: string, `newDisplayName`: string): *any* **Parameters:** Name | Type | ------ | ------ | `oldDisplayName` | string | `newDisplayName` | string | ___ ## Values ### valuesUpdated • **valuesUpdated**: *function* *Defined in [src/Emitter.ts:237](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L237)* Occurs when values in a specified location are changed and cause recalculation. **`param`** the values and location of applied changes **`example`** ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2', '=A1'], ]); // define a function to be called when the event occurs const handler = (changes) => { console.log('baz') } // subscribe to the 'valuesUpdated' event, pass the handler hfInstance.on('valuesUpdated', handler); // trigger recalculation, for example, with the 'setCellContents' method // the console prints 'baz' each time a value change triggers recalculation const changes = hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); // unsubscribe from the 'valuesUpdated' event hfInstance.off('valuesUpdated', handler); // trigger another recalculation // this time, the console doesn't print anything const changes = hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=A1']]); ``` #### Type declaration: ▸ (`changes`: [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[]): *any* **Parameters:** Name | Type | ------ | ------ | `changes` | [ExportedChange](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange)[] | --- ## SearchOptions URL: https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions # SearchOptions ## Properties ### ifNoMatch • **ifNoMatch**: *"returnLowerBound" | "returnUpperBound" | "returnNotFound"* *Defined in [src/Lookup/SearchStrategy.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L19)* ___ ### ordering • **ordering**: *"asc" | "desc" | "none"* *Defined in [src/Lookup/SearchStrategy.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L18)* ___ ### returnOccurrence • **returnOccurrence**? : *"first" | "last"* *Defined in [src/Lookup/SearchStrategy.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L20)* --- ## SearchStrategy URL: https://hyperformula.handsontable.com/docs/api/interfaces/searchstrategy # SearchStrategy ## Methods ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `range`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `options`: [AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)): *number* *Defined in [src/Lookup/SearchStrategy.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L33)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **range**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪ **options**: *[AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)* **Returns:** *number* ___ ### find ▸ **find**(`searchKey`: RawNoErrorScalarValue, `range`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `options`: [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md)): *number* *Defined in [src/Lookup/SearchStrategy.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L31)* **Parameters:** Name | Type | ------ | ------ | `searchKey` | RawNoErrorScalarValue | `range` | [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | `options` | [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md) | **Returns:** *number* --- ## SheetBoundaries URL: https://hyperformula.handsontable.com/docs/api/interfaces/sheetboundaries # SheetBoundaries Represents size and fill ratio of a sheet ## Properties ### fill • **fill**: *number* *Defined in [src/Sheet.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L30)* ___ ### height • **height**: *number* *Defined in [src/Sheet.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L29)* ___ ### width • **width**: *number* *Defined in [src/Sheet.ts:28](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Sheet.ts#L28)* --- ## SimpleCellAddress URL: https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress # SimpleCellAddress ## Properties ### col • **col**: *number* *Defined in [src/Cell.ts:193](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L193)* ___ ### row • **row**: *number* *Defined in [src/Cell.ts:194](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L194)* ___ ### sheet • **sheet**: *number* *Defined in [src/Cell.ts:195](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L195)* --- ## SheetCellAddress URL: https://hyperformula.handsontable.com/docs/api/interfaces/sheetcelladdress # SheetCellAddress ## Properties ### col • **col**: *number* *Defined in [src/Cell.ts:231](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L231)* ___ ### row • **row**: *number* *Defined in [src/Cell.ts:232](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L232)* --- ## SimpleCellRange URL: https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange # SimpleCellRange ## Properties ### end • **end**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L26)* ___ ### start • **start**: *[SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)* *Defined in [src/AbsoluteCellRange.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/AbsoluteCellRange.ts#L25)* --- ## SimpleColumnAddress URL: https://hyperformula.handsontable.com/docs/api/interfaces/simplecolumnaddress # SimpleColumnAddress ## Properties ### col • **col**: *number* *Defined in [src/Cell.ts:184](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L184)* ___ ### sheet • **sheet**: *number* *Defined in [src/Cell.ts:185](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L185)* --- ## SimpleDate URL: https://hyperformula.handsontable.com/docs/api/interfaces/simpledate # SimpleDate ## Properties ### day • **day**: *number* *Defined in [src/DateTimeHelper.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L20)* ___ ### month • **month**: *number* *Defined in [src/DateTimeHelper.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L19)* ___ ### year • **year**: *number* *Defined in [src/DateTimeHelper.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L18)* --- ## SerializedNamedExpression URL: https://hyperformula.handsontable.com/docs/api/interfaces/serializednamedexpression # SerializedNamedExpression ## Properties ### expression • **expression**: *[RawCellContent](https://hyperformula.handsontable.com/docs/api/globals.md#rawcellcontent)* *Defined in [src/Serialization.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L18)* ___ ### name • **name**: *string* *Defined in [src/Serialization.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L17)* ___ ### options • **options**? : *[NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)* *Defined in [src/Serialization.ts:20](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L20)* ___ ### scope • **scope**? : *undefined | number* *Defined in [src/Serialization.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Serialization.ts#L19)* --- ## SimpleRowAddress URL: https://hyperformula.handsontable.com/docs/api/interfaces/simplerowaddress # SimpleRowAddress ## Properties ### row • **row**: *number* *Defined in [src/Cell.ts:175](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L175)* ___ ### sheet • **sheet**: *number* *Defined in [src/Cell.ts:176](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Cell.ts#L176)* --- ## SimpleTime URL: https://hyperformula.handsontable.com/docs/api/interfaces/simpletime # SimpleTime ## Properties ### hours • **hours**: *number* *Defined in [src/DateTimeHelper.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L24)* ___ ### minutes • **minutes**: *number* *Defined in [src/DateTimeHelper.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L25)* ___ ### seconds • **seconds**: *number* *Defined in [src/DateTimeHelper.ts:26](https://github.com/handsontable/hyperformula/blob/af2d59d/src/DateTimeHelper.ts#L26)* --- ## TemplateVars URL: https://hyperformula.handsontable.com/docs/api/interfaces/templatevars # TemplateVars --- ## UndoEntry URL: https://hyperformula.handsontable.com/docs/api/interfaces/undoentry # UndoEntry ## Methods ### doRedo ▸ **doRedo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:24](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L24)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### doUndo ▸ **doUndo**(`undoRedo`: [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md)): *void* *Defined in [src/UndoRedo.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L22)* **Parameters:** Name | Type | ------ | ------ | `undoRedo` | [UndoRedo](https://hyperformula.handsontable.com/docs/api/classes/undoredo.md) | **Returns:** *void* ___ ### getReferencedOldDataVersions ▸ **getReferencedOldDataVersions**(): *number[]* *Defined in [src/UndoRedo.ts:30](https://github.com/handsontable/hyperformula/blob/af2d59d/src/UndoRedo.ts#L30)* Returns the LazilyTransformingAstService version keys referenced by this entry's oldData storage. Used to clean up oldData when the entry is permanently evicted from the undo/redo stack. **Returns:** *number[]* --- ## ValueIndex URL: https://hyperformula.handsontable.com/docs/api/interfaces/valueindex # ValueIndex ## Properties ### index • **index**: *number[]* *Defined in [src/Lookup/ColumnIndex.ts:34](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L34)* ___ ### version • **version**: *number* *Defined in [src/Lookup/ColumnIndex.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/ColumnIndex.ts#L33)* --- ## CellContent URL: https://hyperformula.handsontable.com/docs/api/modules/cellcontent # CellContent ## Type aliases ### Type Ƭ **Type**: *[Number](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.number.md) | [String](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.string.md) | [Boolean](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.boolean.md) | [Empty](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.empty.md) | [Formula](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.formula.md) | [Error](https://hyperformula.handsontable.com/docs/api/classes/cellcontent.error.md)* *Defined in [src/CellContentParser.ts:69](https://github.com/handsontable/hyperformula/blob/af2d59d/src/CellContentParser.ts#L69)* --- ## Advanced usage URL: https://hyperformula.handsontable.com/docs/guide/advanced-usage # Advanced usage > By default, cells are identified using a `SimpleCellAddress` which > consists of a sheet ID, column ID, and row ID, like > this: `{ sheet: 0, col: 0, row: 0 }` > > Alternatively, you can work with the **A1 notation** known from > spreadsheets like Excel or Google Sheets. The API provides the helper > function `simpleCellAddressFromString` which you can use to > retrieve the `SimpleCellAddress` . The following example shows how to use formulas to find out which of the two Teams (A or B) is the winning one. You will do that by comparing the average scores of players in each team. The initial steps are the same as in the [basic example](https://hyperformula.handsontable.com/docs/guide/basic-usage.md). First, import HyperFormula and choose the configuration options: ```javascript import { HyperFormula } from 'hyperformula'; const options = { licenseKey: 'gpl-v3' }; ``` This time you will use the `buildFromEmpty` static method to initialize the engine: ```javascript // initiate the engine with no data const hfInstance = HyperFormula.buildEmpty(options); ``` Now, let's prepare some data. The first column will be players' IDs and the second column will be their scores. Then, you will define the formulas responsible for calculating the average scores. ```javascript // first column represents players' IDs // second column represents players' scores const playersA = [ ['1', '2'], ['2', '3'], ['3', '5'], ['4', '7'], ['5', '13'], ['6', '17'] ]; const playersB = [ ['7', '19'], ['8', '31'], ['9', '61'], ['10', '89'], ['11', '107'], ['12', '127'] ]; // in cell A1 a formula checks which team is the winning one // in cells A2 and A3 formulas calculate the average score of players const formulas = [ ['=IF(Formulas!A2>Formulas!A3,"TeamA","TeamB")'], ['=AVERAGE(TeamA!B1:B6)'], ['=AVERAGE(TeamB!B1:B6)'] ]; ``` Now prepare sheets and insert the data into them: ```javascript // add 'TeamA' sheet const sheetNameA = hfInstance.addSheet('TeamA'); // get the new sheet ID for further API calls const sheetIdA = hfInstance.getSheetId(sheetNameA); // insert playersA content into targeted 'TeamA' sheet hfInstance.setSheetContent(sheetIdA, playersA); // add 'TeamB' sheet const sheetNameB = hfInstance.addSheet('TeamB'); // get the new sheet ID for further API calls const sheetIdB = hfInstance.getSheetId(sheetNameB); // insert playersB content into targeted 'TeamB' sheet hfInstance.setSheetContent(sheetIdB, playersB); // check the content in the console output console.log(hfInstance.getAllSheetsValues()); ``` After setting everything up, you can add formulas: ```javascript // add a sheet named 'Formulas' const sheetNameC = hfInstance.addSheet('Formulas'); // get the new sheet ID for further API calls const sheetIdC = hfInstance.getSheetId(sheetNameC); // add formulas to that sheet hfInstance.setSheetContent(sheetIdC, formulas); ``` Almost done! Now, you can use the `getSheetValues` method to get all values including the calculated ones. Alternatively, you can use `getCellValue`to get the value from a specific cell. ```javascript // get all sheet values const sheetValues = hfInstance.getSheetValues(sheetIdC); // get the simple cell address of 'A1' from that sheet const simpleCellAddress = hfInstance.simpleCellAddressFromString('A1', sheetIdC); // check the winning team 🎉 const winningTeam = hfInstance.getCellValue(simpleCellAddress); // print the result to the console console.log(winningTeam) ``` --- ## ColumnSearchStrategy URL: https://hyperformula.handsontable.com/docs/api/interfaces/columnsearchstrategy # ColumnSearchStrategy ## Methods ### add ▸ **add**(`value`: RawInterpreterValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/SearchStrategy.ts:37](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L37)* **Parameters:** Name | Type | ------ | ------ | `value` | RawInterpreterValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### addColumns ▸ **addColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/SearchStrategy.ts:45](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L45)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### advancedFind ▸ **advancedFind**(`keyMatcher`: function, `range`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `options`: [AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)): *number* *Defined in [src/Lookup/SearchStrategy.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L33)* **Parameters:** ▪ **keyMatcher**: *function* ▸ (`arg`: RawInterpreterValue): *boolean* **Parameters:** Name | Type | ------ | ------ | `arg` | RawInterpreterValue | ▪ **range**: *[SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md)* ▪ **options**: *[AdvancedFindOptions](https://hyperformula.handsontable.com/docs/api/interfaces/advancedfindoptions.md)* **Returns:** *number* ___ ### applyChanges ▸ **applyChanges**(`contentChanges`: [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[]): *void* *Defined in [src/Lookup/SearchStrategy.ts:43](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L43)* **Parameters:** Name | Type | ------ | ------ | `contentChanges` | [CellValueChange](https://hyperformula.handsontable.com/docs/api/interfaces/cellvaluechange.md)[] | **Returns:** *void* ___ ### change ▸ **change**(`oldValue`: RawInterpreterValue | undefined, `newValue`: RawInterpreterValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/SearchStrategy.ts:41](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L41)* **Parameters:** Name | Type | ------ | ------ | `oldValue` | RawInterpreterValue | undefined | `newValue` | RawInterpreterValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### find ▸ **find**(`searchKey`: RawNoErrorScalarValue, `range`: [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md), `options`: [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md)): *number* *Defined in [src/Lookup/SearchStrategy.ts:31](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L31)* **Parameters:** Name | Type | ------ | ------ | `searchKey` | RawNoErrorScalarValue | `range` | [SimpleRangeValue](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) | `options` | [SearchOptions](https://hyperformula.handsontable.com/docs/api/interfaces/searchoptions.md) | **Returns:** *number* ___ ### forceApplyPostponedTransformations ▸ **forceApplyPostponedTransformations**(): *void* *Defined in [src/Lookup/SearchStrategy.ts:60](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L60)* Forces all lazily-tracked ValueIndex entries to apply any pending transformations, bringing every entry's version up to the current LazilyTransformingAstService version. Must be called before compacting LazilyTransformingAstService. **Returns:** *void* ___ ### moveValues ▸ **moveValues**(`range`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›, `toRight`: number, `toBottom`: number, `toSheet`: number): *void* *Defined in [src/Lookup/SearchStrategy.ts:51](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L51)* **Parameters:** Name | Type | ------ | ------ | `range` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | `toRight` | number | `toBottom` | number | `toSheet` | number | **Returns:** *void* ___ ### remove ▸ **remove**(`value`: RawInterpreterValue | undefined, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)): *void* *Defined in [src/Lookup/SearchStrategy.ts:39](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L39)* **Parameters:** Name | Type | ------ | ------ | `value` | RawInterpreterValue | undefined | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | **Returns:** *void* ___ ### removeColumns ▸ **removeColumns**(`columnsSpan`: [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md)): *void* *Defined in [src/Lookup/SearchStrategy.ts:47](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L47)* **Parameters:** Name | Type | ------ | ------ | `columnsSpan` | [ColumnsSpan](https://hyperformula.handsontable.com/docs/api/classes/columnsspan.md) | **Returns:** *void* ___ ### removeSheet ▸ **removeSheet**(`sheetId`: number): *void* *Defined in [src/Lookup/SearchStrategy.ts:49](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L49)* **Parameters:** Name | Type | ------ | ------ | `sheetId` | number | **Returns:** *void* ___ ### removeValues ▸ **removeValues**(`range`: IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]›): *void* *Defined in [src/Lookup/SearchStrategy.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Lookup/SearchStrategy.ts#L53)* **Parameters:** Name | Type | ------ | ------ | `range` | IterableIterator‹[RawScalarValue, [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md)]› | **Returns:** *void* --- ## HyperFormula AI SDK for Vercel URL: https://hyperformula.handsontable.com/docs/guide/ai-sdk # HyperFormula AI SDK for Vercel A [Vercel AI SDK](https://sdk.vercel.ai/docs) tool that gives your agents deterministic spreadsheet and formula computation — backed by HyperFormula's Excel-compatible engine. > **Not available yet — coming soon** > > This integration is on our roadmap and **cannot be installed or used today**. The API shown below is a preview and may still change before the first release. > > If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) — we'll ping you the moment the first beta is ready, and your sign-up directly tells us how strongly to prioritize this integration. ## What it does - **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable. - **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls. - **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived. - **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required. ## Example Using HyperFormula as a tool inside the Vercel AI SDK: ```js import { generateText } from 'ai'; import { openai } from '@ai-sdk/openai'; import HyperFormula from 'hyperformula'; import { createSpreadsheetTools } from 'hyperformula/ai'; // Build a workbook your agent can reason about. const hf = HyperFormula.buildFromArray([ ['Revenue', 100], ['Cost', 60], ['Profit', '=B1-B2'], ]); // Pass the spreadsheet tools straight into generateText. const result = await generateText({ model: openai('gpt-4o'), tools: createSpreadsheetTools(hf), prompt: 'What drives the profit number, and what happens if revenue doubles?', }); ``` A single import, one extra line in `tools`, and the model can evaluate formulas, read ranges, and edit cells through the SDK — without inventing numbers. ## Use cases - **Explain the spreadsheet** — ask the agent what a workbook does, which cells are inputs, and how each output is derived; get answers grounded in real formula evaluation. - **What-if scenarios and forecasting** — the agent tweaks assumptions and reports how downstream results change, deterministically. - **Validate and clean data** — the agent scans ranges for errors, missing values, or inconsistencies and fixes them in place. - **Generate formulas from natural language** — the agent translates a plain-English calculation into a verified, working Excel formula. - **Financial modeling and reporting** — NPV, IRR, amortization, KPI rollups, and other quantitative workflows where the answer must be exact and auditable. ## Get early access > **Be the first to try it** > > We're actively building this integration. Drop your email and we'll notify you the moment the first beta lands — so you can try it before the public release. > > [Join the early access list →](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) ## Links - [Vercel AI SDK documentation](https://sdk.vercel.ai/docs) - [HyperFormula on GitHub](https://github.com/handsontable/hyperformula) - [HyperFormula on npm](https://www.npmjs.com/package/hyperformula) - [Built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) --- ## Array formulas URL: https://hyperformula.handsontable.com/docs/guide/arrays # Array formulas Use array formulas to perform an operation (or call a function) on multiple cells at a time. ## About arrays In HyperFormula, an array can be: * A range of cell addresses (e.g., `A1:A10`) * A result of an arithmetic operation (e.g., `5*A1:B5`) * A result of a function (e.g., `=ARRAYFORMULA(ARRAY_CONSTRAIN(A2:E5, 2, 2))`) * An **inline array**: an ad-hoc array that doesn't reference any range of cells (e.g., `{1, 3, 5}`) An array is inherently a two-dimensional object. `1`x`1` arrays are treated as single, zero-dimensional values (**scalars**). ### Inline arrays An inline array is defined by curly braces: `{ }`. It can contain one or more rows, separated by: - The [`arrayColumnSeparator`](https://hyperformula.handsontable.com/docs/api/classes/config.md#arraycolumnseparator) (default: `,`) - The [`arrayRowSeparator`](https://hyperformula.handsontable.com/docs/api/classes/config.md#arrayrowseparator) (default: `;`) Every row must be of equal length. > **Inline arrays are not recomputed after initialization.** > > If an inline array contains a cell reference, and the cell's value changes, the array is not updated. ``` = {1, 2, 3} // an inline array with a single row = {1, 2 ; 3, 4} // an inline array with two rows = SUM({1, 2, 3}) // an inline array as an argument of a function = {A1, A2} // when the values of A1 or A2 change, this inline array is not updated = {1, 2 ; 3} // an invalid inline array: two rows of different lengths ``` ## Array arithmetic mode To use array formulas in HyperFormula, you need to enable the **array arithmetic mode**. You can enable the array arithmetic mode: * [Locally](#enabling-the-array-arithmetic-mode-locally) (for an individual function or operation) * [Globally](#enabling-the-array-arithmetic-mode-globally) (for your HyperFormula instance) ### Enabling the array arithmetic mode locally To enable the array arithmetic mode once, within a particular function or formula, use the `ARRAYFORMULA` function: | Syntax | Example | |:--------------------------------------------------|:----------------------------------| | `ARRAYFORMULA(your_array_formula)` | `=ARRAYFORMULA(A2:A5*B2:B5)` | | `ARRAYFORMULA(YOUR_FUNCTION(your_array_formula))` | `=ARRAYFORMULA(ISEVEN(A2:A5*10))` | ### Enabling the array arithmetic mode globally To enable the array arithmetic mode by default, everywhere in your HyperFormula instance: * In your HyperFormula [configuration](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#usearrayarithmetic), set the `useArrayArithmetic` option to `true`. With the array arithmetic mode enabled globally, you can operate on arrays without using the `ARRAYFORMULA` function: ``` =A2:A5*B2:B5 ISEVEN(A2:A5*10) ``` ## Array features Thanks to HyperFormula's built-in array features, you can: * [Operate on arrays](#operating-on-arrays) just like on [scalars](#about-arrays) * [Pass arrays to functions](#passing-arrays-to-scalar-functions-vectorization) that accept [scalars](#about-arrays) * [Broadcast](#broadcasting) smaller input arrays across larger output areas You can also: * Use the `FILTER` function to [filter an array](#filtering-an-array), based on boolean arrays * Use the `ARRAY_CONSTRAIN` function to [constrain an array's size](#constraining-an-array-s-size) ### Operating on arrays You can operate on arrays just like on single values. When the [array arithmetic mode](#array-arithmetic-mode) is enabled, each output array value is the result of your operation on the corresponding input array value. ``` =ARRAYFORMULA(A2:A5*B2:B5) // calculates: // =A2*B2 // =A3*B3 // =A4*B4 // =A5*B5 ``` ### Passing arrays to scalar functions (vectorization) When the [array arithmetic mode](#array-arithmetic-mode) is enabled, HyperFormula automatically _vectorizes_ most functions. As a consequence of that, you can pass arrays to functions that would normally accept [scalars](#about-arrays). The result would also be an array. ``` =ARRAYFORMULA(ISEVEN(A2:A5)) // calculates: // =ISEVEN(A2) // =ISEVEN(A3) // =ISEVEN(A4) // =ISEVEN(A5) ``` ### Broadcasting If an input array has a dimension of `1`, it's automatically repeated ("broadcast") on that dimension to match the size of the output. ``` =ARRAYFORMULA(ISEVEN(A2:A5*B2)) // calculates: // =ISEVEN(A2*B2) // =ISEVEN(A3*B2) // =ISEVEN(A4*B2) // =ISEVEN(A5*B2) ``` ### Filtering an array When the [array arithmetic mode](#array-arithmetic-mode) is enabled, you can filter an array, based on boolean arrays, using the `FILTER` function: | Syntax | Example | |:-----------------------------------------------------|:------------------------------------------------| | `FILTER(your_array, BoolArray1[, BoolArray2[, ...]]` | `=ARRAYFORMULA(FILTER(A2:A5*10), {1, 0, 0, 1})` | ### Constraining an array's size When the [array arithmetic mode](#array-arithmetic-mode) is enabled, you can constrain the size of the output array, using the `ARRAY_CONSTRAIN` function: | Syntax | Example | |:-------------------------------------------|:----------------------------------------------| | `ARRAY_CONSTRAIN(your_array,height,width)` | `=ARRAYFORMULA(ARRAY_CONSTRAIN(A2:E5, 2, 2))` | If your specified output array size is smaller than the input array size, only the corresponding top-left cells of the input array are taken into account. If your specified output array size is larger or equal to the input array size, no change is made. ## Array rules ### With the array arithmetic mode enabled When the [array arithmetic mode](#array-arithmetic-mode) is enabled, and you pass an array to a [scalar](#about-arrays) function, the following rules apply: * Array dimensions need to be consistent (e.g., every row needs to be of the same length). * If an input array value is missing (due to a difference in dimensions), the corresponding output array value is `#N/A`. * If a cell evaluates to an array, the array values are spilled into neighboring cells (unless the neighboring cells are already filled).
This behavior doesn't apply to ranges, which return the `#VALUE!` error in this case. * If one of input array dimensions is `1` (`1`x`n` or `n`x`1`), the array is repeated, to match the output array dimensions. ### With the array arithmetic mode disabled When the [array arithmetic mode](#array-arithmetic-mode) is disabled, and you pass an array to a [scalar](#about-arrays) function, the array is reduced to 1 element (usually the array's top-left value). When the [array arithmetic mode](#array-arithmetic-mode) is disabled, and you operate on a range of width/height equal to `1`, the behavior depends on your array formula's location: | Your array formula's location | Behavior | |:--------------------------------------------------|:---------------------------------------| | In the same row as as one of the range's elements | Only that particular element is taken. | | Any other cell | `#VALUE!` error | --- ## TypedEmitter URL: https://hyperformula.handsontable.com/docs/api/interfaces/typedemitter # TypedEmitter ## Methods ### off ▸ **off**‹**Event**›(`s`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/Emitter.ts:322](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L322)* **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | ------ | ------ | `s` | Event | `listener` | Listeners[Event] | **Returns:** *void* ___ ### on ▸ **on**‹**Event**›(`s`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/Emitter.ts:320](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L320)* **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | ------ | ------ | `s` | Event | `listener` | Listeners[Event] | **Returns:** *void* ___ ### once ▸ **once**‹**Event**›(`s`: Event, `listener`: Listeners[Event]): *void* *Defined in [src/Emitter.ts:324](https://github.com/handsontable/hyperformula/blob/af2d59d/src/Emitter.ts#L324)* **Type parameters:** ▪ **Event**: *keyof Listeners* **Parameters:** Name | Type | ------ | ------ | `s` | Event | `listener` | Listeners[Event] | **Returns:** *void* --- ## NamedExpression URL: https://hyperformula.handsontable.com/docs/api/interfaces/namedexpression # NamedExpression ## Properties ### expression • **expression**? : *undefined | string* *Defined in [src/NamedExpressions.ts:18](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L18)* ___ ### name • **name**: *string* *Defined in [src/NamedExpressions.ts:16](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L16)* ___ ### options • **options**? : *[NamedExpressionOptions](https://hyperformula.handsontable.com/docs/api/globals.md#namedexpressionoptions)* *Defined in [src/NamedExpressions.ts:19](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L19)* ___ ### scope • **scope**? : *undefined | number* *Defined in [src/NamedExpressions.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/NamedExpressions.ts#L17)* --- ## Basic usage URL: https://hyperformula.handsontable.com/docs/guide/basic-usage # Basic usage > The instance can be created with three static methods: > [`buildFromArray`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#buildfromarray), > `buildFromSheets` or `buildEmpty`. You can check all of their > descriptions in our [API reference](https://hyperformula.handsontable.com/docs/api). If you've already installed the library, it's time to start writing the first simple application. First, if you used NPM or Yarn to install the package, make sure you have properly imported HyperFormula as shown below: ```javascript import { HyperFormula } from 'hyperformula'; ``` If you embed HyperFormula in the ` ``` Or you may load just a minimal build and add the dependencies on your own: ```html ``` A useful option when you already use some of them and there is no need to duplicate the dependencies. You can read more about the dependencies of HyperFormula on a dedicated [Dependencies](https://hyperformula.handsontable.com/docs/guide/dependencies.md) page. ## Clone from GitHub If you choose to clone the project or download it from GitHub you will need to build it prior to usage. Check the [building section](https://hyperformula.handsontable.com/docs/guide/building.md) for a full list of commands and their descriptions. ### Clone with HTTPS ```bash git clone https://github.com/handsontable/hyperformula.git ``` ### Clone with SSH ```bash git clone git@github.com:handsontable/hyperformula.git ``` ## Download from GitHub You can download all resources as a ZIP archive directly from the [GitHub repository](https://github.com/handsontable/hyperformula). Then, you can use one of the above-mentioned methods to install the library. --- ## Cell references URL: https://hyperformula.handsontable.com/docs/guide/cell-references # Cell references A formula can reference one or more cells and automatically update its contents whenever any of the referenced cells change. The values from other cells can be obtained using A1 notation which is a flexible way of pointing at different sources of data for the formulas. The table below summarizes the most popular methods of referencing different cells in the workbook.
Type Current sheet Different sheet
Relative =A1 =Sheet2!A1
Absolute =$A$1 =Sheet2!$A$1
Mixed =$A1 =Sheet2!$A1
Circular (example)

A1=B1

whereas

B1=A1

Sheet1!A1=Sheet2!A1

whereas

Sheet2!A1=Sheet1!A1

Range =A1:B2 =Sheet2!A1:B2
### Referencing named expressions You can reference [named expressions](https://hyperformula.handsontable.com/docs/guide/named-expressions.md) by their assigned names. For example, if you name the expression `=SUM(100+10)` as `MySum`, you can then reference that expression by `MySum`. A named expression works within a scope. You define the scope when creating a named expression: ```javascript // define for a local scope // sheet ID passed (1) hfInstance.addNamedExpression('MyLocal', '=Sheet2!$A$1+100', 1); // define for the global scope // sheet ID not passed hfInstance.addNamedExpression('MyGlobal', '=SUM(100+10)'); ``` Now, you can reference `MyLocal` in the `1` sheet, and `MyGlobal` in any sheet. HyperFormula is more limited than typical spreadsheet software when it comes to referencing named ranges. For more information about how HyperFormula handles named ranges, see [this section](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). ## Relative references Relative and absolute references play a huge role in [copy and paste](https://hyperformula.handsontable.com/docs/guide/clipboard-operations.md), autofill, and CRUD operations like moving cells or columns. By default, all references are relative which means that when you copy them to other cells, the references are updated based on the new coordinates. There are two main exceptions though: the move operation and named expressions, both of which use absolute references. HyperFormula provides `copy` , `cut` and `paste` methods that allow for handling clipboard operations. **Cut and paste** behaves a bit differently. If '=A1' is copied from cell B1 into B2 it will stay after being placed into B2. **Copy and paste** will behave a bit different in a relative mean - if '=A1' will be copied from B1 into B2 cell it will be '=A2'.
Formula in A1 Action Result in A2
=B1+1

Copy A1

Paste to A2

=B2+1
This example shows the change after the move operation was done: ```javascript // build with a simple dataset const hfInstance = HyperFormula.buildFromArray([ ['=B2', '=A1', ''], ]); // these are the coordinates for a move operation const source = { sheet: 0, col: 1, row: 0 }; const destination = { sheet: 0, col: 2, row: 0 }; // move B1 const changes = hfInstance.moveCells({ start: source, end: source }, destination); // you can see the changes inside the console console.log(changes); ``` ## Absolute references A reference to a column (a letter) or a row (a number) may be preceded with a dollar sign `$` to remain intact when the cell is copied between different places.
Formula in A1 Action Result in A2 and A3
=$B$1+1

Copy A1

Paste to A2

Paste to A3

=$B$1+1
## Range references In HyperFormula, a range is a reference to a group of at least two adjacent cells. ### Range definition Range `:` is a reference to the smallest rectangular group of adjacent cells that includes: - The cell at `` - The cell at `` ### Range types HyperFormula features the following types of ranges: | Range type | Description | Example | |--------------|-------------------------------------|-----------------------------------------------| | Cell range | Has the shape of a finite rectangle | =A1:B2
or =A2:B1
or =B1:A2
or =B2:A1 | | Column range | Contains entire columns | =A:B
or =B:A | | Row range | Contains entire rows | =1:2
or =2:1 | ### Referencing ranges You can reference ranges: - Through a relative reference, e.g., `=A1:B2` - Through an absolute reference, e.g., `=A$1:$B$2` - Through a reference with an explicit sheet address, e.g., `=Sheet5!A1:B2` ### Range restraints The following restraints apply: - You can't mix two different types of range references together (=A1:B). - Range expressions can't contain [named expressions](https://hyperformula.handsontable.com/docs/guide/named-expressions.md). - At the moment, HyperFormula doesn't support multi-cell range references (=A1:B2:C3). > In contrast to Google Sheets or Microsoft Excel, HyperFormula doesn't treat single cells as ranges. Instead, it immediately instantiates references to single cells as their values. Applying a scalar value to a function that takes ranges throws the [`CellRangeExpected`](https://hyperformula.handsontable.com/docs/api/classes/errormessage.md#cellrangeexpected) error. ### More about ranges - [Ranges in the dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md#ranges-in-the-dependency-graph) - [Types of operators: Reference operators](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#reference-operators) - [API reference: Ranges](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#ranges) ## Sheet names in references When referencing cells or ranges from different sheets, you can specify the sheet name using the following syntax: ``` =SheetName!CellReference ``` If a sheet name contains any character other than `[A-Za-z\u00C0-\u02AF0-9_]`, it must be enclosed in single quotes. E.g.: ```javascript =Data2023!A1 =Sheet_1!B2 =ÄöüSheet!C3 ='My Sheet'!A1 ='Sales-2023'!B2 ='Data (Q1)'!C3 ='Sheet #1'!D4 ``` ## Circular references Since HyperFormula does not embed any UI, it allows for the input of a circular reference into a cell. Compared to popular spreadsheets, HyperFormula does not force any specific interaction with the user (i.e., displaying a warning ) when circular reference happens. When circular reference happens, HyperFormula returns #CYCLE as the value of the cell where the circular reference occurred. After some CRUD operation is performed, the error might disappear when it is no longer a cyclic dependency. No matter the outcome, other cells are calculated normally and the dependency graph is updated. It is **non-blocking**. ## The #REF! error By deleting the cell that is referenced in a formula you make the entire formula no longer valid. As a result, you will get the #REF! error which indicates that there is an invalid address used in a cell. Consider the following example: | Formula in C1 | Action | Result in B1 | |:--------------|:----------------|:-------------| | =A1+B1+20 | Delete column A | #REF! | The #REF! error may also occur in other specific situations: * When you copy and paste formulas containing relative references, or example:
Formula in B1 Action Result in A1
=A1+1

Cut from B1

Paste to A1

#REF!
* When the VLOOKUP is told to look up values in a column whose index is out of the scope. * When the INDEX function is told to return values from rows or columns that are out of the scope. --- ## Clipboard operations URL: https://hyperformula.handsontable.com/docs/guide/clipboard-operations # Clipboard operations Through a set of dedicated methods, HyperFormula supports clipboard operations, such as copying, cutting, and pasting. This lets you integrate the functionality of interacting with the clipboard. The copied or cut data is stored as a memory reference, not directly in the system clipboard. ## Copy To copy the contents of a cell or range, use the [`copy()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#copy) method. Pass arguments of type [`SimpleCellRange`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange). ```javascript const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // copy [ [ 2 ] ] const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); ``` ## Cut To cut the contents of a cell or range, use the [`cut()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#cut) method. Pass arguments of type [`SimpleCellRange`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange). > Any CRUD operation called after the [`cut()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#cut) method aborts the cut operation. ```javascript const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // returns the values that were cut: [ [ 1 ] ] const clipboardContent = hfInstance.cut({ start: { sheet: 0, col: 0, row: 0 }, end: { sheet: 0, col: 0, row: 0 }, }); ``` ## Paste To paste the contents of a cell or range, use the [`paste()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) method. [`paste()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) requires only one parameter: the top left corner of the target range. ```javascript const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // [ [ 2 ] ] was copied const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 }, }); // returns a list of modified cells: their absolute addresses and new values const changes = hfInstance.paste({ sheet: 0, col: 1, row: 0 }); ``` If the clipboard is empty, the [`paste()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) method doesn't do anything. ### Copy and paste When called after [`copy()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#copy), the [`paste()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) method: - Pastes the copied data into the target range. - Triggers a recalculation of all affected formulas. > If a formula `=A1` is copied from cell B1 into B2, the B2 formula becomes `=A2`. ### Cut and paste When called after [`cut()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#cut), the [`paste()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#paste) method: - Moves the cut data into the target range, by calling the [`moveCells()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecells) method. - Removes the cut data from the source range. - Triggers a recalculation of all affected formulas. > If a formula `=A1` is cut from cell B1 into B2, the B2 formula becomes `=A1`. #### Pasting named expressions If a copied or cut formula contains a [named expression](https://hyperformula.handsontable.com/docs/guide/named-expressions.md) defined for a local scope, and the formula is pasted to a sheet that is out of scope for that expression, the expression's scope changes to global. If the copied or cut named expression's scope is the same as the target's, the expression's local scope remains the same. ## Clear the clipboard To clear the clipboard, use the [`clearClipboard()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#clearclipboard) method. To check if the clipboard holds any data, use the [`isClipboardEmpty()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#isclipboardempty) method. ## Data storage The copied or cut data is stored as a memory reference, not directly in the system clipboard. Depending on what was cut, the data is stored as: * An array of arrays * A number * A string * A boolean * An empty value --- ## Code of conduct URL: https://hyperformula.handsontable.com/docs/guide/code-of-conduct # Code of conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community **Examples of unacceptable behavior include:** * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others’ private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise, unacceptable behavior may be reported to the community leaders responsible for enforcement at office [at] handsontable.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning Community Impact: A violation through a single incident or series of actions. Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban Community Impact: A serious violation of community standards, including sustained inappropriate behavior. Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. Consequence: A permanent ban from any sort of public interaction within the project community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.0, available at [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html](https://www.contributor-covenant.org/version/2/0/code_of_conduct). --- ## Built-in functions URL: https://hyperformula.handsontable.com/docs/guide/built-in-functions # Built-in functions
## Overview HyperFormula comes with an extensive library of pre-built functions. You can use them to create complex formulas for any business application. Formula syntax and logic of function are similar to what is considered the standard in modern spreadsheet software. That is because a spreadsheet is probably the most universal software ever created. We wanted the same flexibility for HyperFormula but without the constraints of the spreadsheet UI. Each of HyperFormula's built-in function names is available in [17 languages](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md#list-of-supported-languages) and [custom language packs](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md) can be added. The latest version of HyperFormula has an extensive collection of **423** functions grouped into categories: - [Array manipulation](#array-manipulation) - [Database](#database) - [Date and time](#date-and-time) - [Engineering](#engineering) - [Financial](#financial) - [Information](#information) - [Logical](#logical) - [Lookup and reference](#lookup-and-reference) - [Math and trigonometry](#math-and-trigonometry) - [Matrix functions](#matrix-functions) - [Operator](#operator) - [Statistical](#statistical) - [Text](#text) _Some categories such as compatibility and cube are yet to be supported._ > You can modify the built-in functions or create your own, by adding a [custom function](https://hyperformula.handsontable.com/docs/guide/custom-functions.md). ## List of available functions Total number of functions: **423** ### Array manipulation | Function ID | Description | Syntax | |:---|:---|:---| | ARRAY_CONSTRAIN | Truncates an array to given dimensions. | ARRAY_CONSTRAIN(array, height, width) | | ARRAYFORMULA | Enables the array arithmetic mode for a single formula. | ARRAYFORMULA(formula) | ### Database | Function ID | Description | Syntax | |:---|:---|:---| | DAVERAGE | Returns the average of all values in a database field that match the given criteria. | DAVERAGE(database, field, criteria) | | DCOUNT | Counts the cells containing numbers in a database field that match the given criteria. | DCOUNT(database, field, criteria) | | DCOUNTA | Counts the non-empty cells in a database field that match the given criteria. | DCOUNTA(database, field, criteria) | | DGET | Returns the single value from a database field that matches the given criteria. Returns #VALUE! if no records match, and #NUM! if more than one record matches. | DGET(database, field, criteria) | | DMAX | Returns the maximum value in a database field that matches the given criteria. | DMAX(database, field, criteria) | | DMIN | Returns the minimum value in a database field that matches the given criteria. | DMIN(database, field, criteria) | | DPRODUCT | Returns the product of all values in a database field that match the given criteria. | DPRODUCT(database, field, criteria) | | DSTDEV | Returns the sample standard deviation of all values in a database field that match the given criteria. | DSTDEV(database, field, criteria) | | DSTDEVP | Returns the population standard deviation of all values in a database field that match the given criteria. | DSTDEVP(database, field, criteria) | | DSUM | Returns the sum of all values in a database field that match the given criteria. | DSUM(database, field, criteria) | | DVAR | Returns the sample variance of all values in a database field that match the given criteria. | DVAR(database, field, criteria) | | DVARP | Returns the population variance of all values in a database field that match the given criteria. | DVARP(database, field, criteria) | ### Date and time | Function ID | Description | Syntax | |:---|:---|:---| | DATE | Returns the specified date as the number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate). | DATE(year, month, day) | | DATEDIF | Calculates distance between two dates.
Supported units: "D" (days), "M" (months), "Y" (years), "MD" (days ignoring months and years), "YM" (months ignoring years), or "YD" (days ignoring years). | DATEDIF(start_date, end_date, unit) | | DATEVALUE | Parses date_string and returns it as the number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate).
Accepts formats set by the [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#dateformats) option. | DATEVALUE(date_string) | | DAY | Returns the day of the given date value. | DAY(number) | | DAYS | Calculates the difference between two date values. | DAYS(end_date, start_date) | | DAYS360 | Calculates the difference between two date values in days, in 360-day basis. | DAYS360(start_date, end_date, [format]) | | EDATE | Shifts start_date by the given number of months and returns it as the number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate).
The return value complies with the OpenDocument standard, but the return type does not; see the [compatibility notes](https://hyperformula.handsontable.com/docs/guide/list-of-differences.html). | EDATE(start_date, months) | | EOMONTH | Returns the date of the last day of the month that falls the given number of months away from start_date. Returns the value in the form of number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate).
The return value complies with the OpenDocument standard, but the return type does not; see the [compatibility notes](https://hyperformula.handsontable.com/docs/guide/list-of-differences.html). | EOMONTH(start_date, months) | | HOUR | Returns hour component of given time. | HOUR(time) | | INTERVAL | Returns interval string from given number of seconds. | INTERVAL(seconds) | | ISOWEEKNUM | Returns an ISO week number that corresponds to the week of year. | ISOWEEKNUM(date) | | MINUTE | Returns minute component of given time. | MINUTE(time) | | MONTH | Returns the month for the given date value. | MONTH(number) | | NETWORKDAYS | Returns the number of working days between two given dates. | NETWORKDAYS(date1, date2, [holidays]) | | NETWORKDAYS.INTL | Returns the number of working days between two given dates, with a configurable set of weekend days. | NETWORKDAYS.INTL(date1, date2, [mode], [holidays]) | | NOW | Returns current date + time as a number of days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate). | NOW() | | SECOND | Returns second component of given time. | SECOND(time) | | TIME | Returns the number that represents a given time as a fraction of full day. | TIME(hour, minute, second) | | TIMEVALUE | Parses time_string and returns a number that represents it as a fraction of a full day.
Accepts formats set by the [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#timeformats) option. | TIMEVALUE(time_string) | | TODAY | Returns an integer representing the current date as the number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#nulldate). | TODAY() | | WEEKDAY | Computes a number between 1-7 representing the day of week. | WEEKDAY(date, [type]) | | WEEKNUM | Returns a week number that corresponds to the week of year. | WEEKNUM(date, [type]) | | WORKDAY | Returns the date a given number of working days after the start date, skipping Saturdays and Sundays. | WORKDAY(date, shift, [holidays]) | | WORKDAY.INTL | Returns the date a given number of working days after the start date, with a configurable set of weekend days. | WORKDAY.INTL(date, shift, [mode], [holidays]) | | YEAR | Returns the year as a number according to the internal calculation rules. | YEAR(number) | | YEARFRAC | Computes the difference between two date values, in fraction of years. | YEARFRAC(start_date, end_date, [format]) | ### Engineering | Function ID | Description | Syntax | |:---|:---|:---| | BESSELI | Returns the value of the modified Bessel function of the first kind, In(x). | BESSELI(x, n) | | BESSELJ | Returns the value of the Bessel function of the first kind, Jn(x). | BESSELJ(x, n) | | BESSELK | Returns the value of the modified Bessel function of the second kind, Kn(x). | BESSELK(x, n) | | BESSELY | Returns the value of the Bessel function of the second kind, Yn(x). | BESSELY(x, n) | | BIN2DEC | The result is the decimal number for the binary number entered. | BIN2DEC(number) | | BIN2HEX | The result is the hexadecimal number for the binary number entered. | BIN2HEX(number, [places]) | | BIN2OCT | The result is the octal number for the binary number entered. | BIN2OCT(number, [places]) | | BITAND | Returns a bitwise logical "and" of the parameters. | BITAND(number1, number2) | | BITLSHIFT | Shifts a number left by n bits. | BITLSHIFT(number, shift) | | BITOR | Returns a bitwise logical "or" of the parameters. | BITOR(number1, number2) | | BITRSHIFT | Shifts a number right by n bits. | BITRSHIFT(number, shift) | | BITXOR | Returns a bitwise logical "exclusive or" of the parameters. | BITXOR(number1, number2) | | COMPLEX | Returns a complex number built from its real and imaginary parts. | COMPLEX(re, im, [symbol]) | | DEC2BIN | Returns the binary number for the decimal number entered between –512 and 511. | DEC2BIN(number, [places]) | | DEC2HEX | Returns the hexadecimal number for the decimal number entered. | DEC2HEX(number, [places]) | | DEC2OCT | Returns the octal number for the decimal number entered. | DEC2OCT(number, [places]) | | DELTA | Returns TRUE (1) if both numbers are equal, otherwise returns FALSE (0). | DELTA(number1, [number2]) | | ERF | Returns values of the Gaussian error integral. | ERF(lower_limit, [upper_limit]) | | ERFC | Returns complementary values of the Gaussian error integral between x and infinity. | ERFC(lower_limit) | | HEX2BIN | The result is the binary number for the hexadecimal number entered. | HEX2BIN(number, [places]) | | HEX2DEC | The result is the decimal number for the hexadecimal number entered. | HEX2DEC(number) | | HEX2OCT | The result is the octal number for the hexadecimal number entered. | HEX2OCT(number, [places]) | | IMABS | Returns modulus of a complex number. | IMABS(complex) | | IMAGINARY | Returns imaginary part of a complex number. | IMAGINARY(complex) | | IMARGUMENT | Returns argument of a complex number. | IMARGUMENT(complex) | | IMCONJUGATE | Returns conjugate of a complex number. | IMCONJUGATE(complex) | | IMCOS | Returns cosine of a complex number. | IMCOS(complex) | | IMCOSH | Returns hyperbolic cosine of a complex number. | IMCOSH(complex) | | IMCOT | Returns cotangent of a complex number. | IMCOT(complex) | | IMCSC | Returns cosecant of a complex number. | IMCSC(complex) | | IMCSCH | Returns hyperbolic cosecant of a complex number. | IMCSCH(complex) | | IMDIV | Divides two complex numbers. | IMDIV(complex1, complex2) | | IMEXP | Returns exponent of a complex number. | IMEXP(complex) | | IMLN | Returns natural logarithm of a complex number. | IMLN(complex) | | IMLOG10 | Returns base-10 logarithm of a complex number. | IMLOG10(complex) | | IMLOG2 | Returns binary logarithm of a complex number. | IMLOG2(complex) | | IMPOWER | Returns a complex number raised to a given power. | IMPOWER(complex, number) | | IMPRODUCT | Multiplies complex numbers. | IMPRODUCT(complex1, ...) | | IMREAL | Returns real part of a complex number. | IMREAL(complex) | | IMSEC | Returns the secant of a complex number. | IMSEC(complex) | | IMSECH | Returns the hyperbolic secant of a complex number. | IMSECH(complex) | | IMSIN | Returns sine of a complex number. | IMSIN(complex) | | IMSINH | Returns hyperbolic sine of a complex number. | IMSINH(complex) | | IMSQRT | Returns a square root of a complex number. | IMSQRT(complex) | | IMSUB | Subtracts two complex numbers. | IMSUB(complex1, complex2) | | IMSUM | Adds complex numbers. | IMSUM(complex1, ...) | | IMTAN | Returns the tangent of a complex number. | IMTAN(complex) | | OCT2BIN | The result is the binary number for the octal number entered. | OCT2BIN(number, [places]) | | OCT2DEC | The result is the decimal number for the octal number entered. | OCT2DEC(number) | | OCT2HEX | The result is the hexadecimal number for the octal number entered. | OCT2HEX(number, [places]) | ### Financial | Function ID | Description | Syntax | |:---|:---|:---| | CUMIPMT | Returns the cumulative interest paid on a loan between a start period and an end period. | CUMIPMT(rate, nper, pv, start, end, type) | | CUMPRINC | Returns the cumulative principal paid on a loan between a start period and an end period. | CUMPRINC(rate, nper, pv, start, end, type) | | DB | Returns the depreciation of an asset for a period using the fixed-declining balance method. | DB(cost, salvage, life, period, [month]) | | DDB | Returns the depreciation of an asset for a period using the double-declining balance method. | DDB(cost, salvage, life, period, [factor]) | | DOLLARDE | Converts a price entered with a special notation to a price displayed as a decimal number. | DOLLARDE(price, fraction) | | DOLLARFR | Converts a price displayed as a decimal number to a price entered with a special notation. | DOLLARFR(price, fraction) | | EFFECT | Calculates the effective annual interest rate from a nominal interest rate and the number of compounding periods per year. | EFFECT(nominal_rate, npery) | | FV | Returns the future value of an investment. | FV(rate, nper, pmt, [pv], [type]) | | FVSCHEDULE | Returns the future value of an investment based on a rate schedule. | FVSCHEDULE(pv, schedule) | | IPMT | Returns the interest portion of a given loan payment in a given payment period. | IPMT(rate, per, nper, pv, [fv], [type]) | | IRR | Returns the internal rate of return for a series of cash flows. | IRR(values, [guess]) | | ISPMT | Returns the interest paid for a given period of an investment with equal principal payments. | ISPMT(rate, per, nper, value) | | MIRR | Returns the modified internal rate of return for a series of cash flows. | MIRR(flows, f_rate, r_rate) | | NOMINAL | Returns the nominal interest rate. | NOMINAL(effect_rate, npery) | | NPER | Returns the number of periods for an investment assuming periodic, constant payments and a constant interest rate. | NPER(rate, pmt, pv, [fv], [type]) | | NPV | Returns net present value. | NPV(rate, value1, ...) | | PDURATION | Returns number of periods to reach specific value. | PDURATION(rate, pv, fv) | | PMT | Returns the periodic payment for a loan. | PMT(rate, nper, pv, [fv], [type]) | | PPMT | Calculates the principal portion of a given loan payment. | PPMT(rate, per, nper, pv, [fv], [type]) | | PV | Returns the present value of an investment. | PV(rate, nper, pmt, [fv], [type]) | | RATE | Returns the interest rate per period of an annuity. | RATE(nper, pmt, pv, [fv], [type], [guess]) | | RRI | Returns an equivalent interest rate for the growth of an investment. | RRI(nper, pv, fv) | | SLN | Returns the depreciation of an asset for one period, based on a straight-line method. | SLN(cost, salvage, life) | | SYD | Returns the "sum-of-years" depreciation for an asset in a period. | SYD(cost, salvage, life, period) | | TBILLEQ | Returns the bond-equivalent yield for a Treasury bill. | TBILLEQ(settlement, maturity, discount) | | TBILLPRICE | Returns the price per $100 face value for a Treasury bill. | TBILLPRICE(settlement, maturity, discount) | | TBILLYIELD | Returns the yield for a Treasury bill. | TBILLYIELD(settlement, maturity, price) | | XIRR | Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic. | XIRR(values, dates, [guess]) | | XNPV | Returns the net present value for a schedule of cash flows that is not necessarily periodic. | XNPV(rate, payments, dates) | ### Information | Function ID | Description | Syntax | |:---|:---|:---| | ISBINARY | Returns TRUE if provided value is a valid binary number. | ISBINARY(value) | | ISBLANK | Returns TRUE if the reference to a cell is blank. | ISBLANK(value) | | ISERR | Returns TRUE if the value is error value except #N/A!. | ISERR(value) | | ISERROR | Returns TRUE if the value is general error value. | ISERROR(value) | | ISEVEN | Returns TRUE if the value is an even integer, or FALSE otherwise. A value with a fractional part is neither even nor odd, so it returns FALSE. | ISEVEN(value) | | ISFORMULA | Checks whether referenced cell is a formula. | ISFORMULA(value) | | ISLOGICAL | Tests for a logical value (TRUE or FALSE). | ISLOGICAL(value) | | ISNA | Returns TRUE if the value is #N/A! error. | ISNA(value) | | ISNONTEXT | Tests if the cell contents are text or numbers, and returns FALSE if the contents are text. | ISNONTEXT(value) | | ISNUMBER | Returns TRUE if the value refers to a number. | ISNUMBER(value) | | ISODD | Returns TRUE if the value is an odd integer, or FALSE otherwise. A value with a fractional part is neither odd nor even, so it returns FALSE. | ISODD(value) | | ISREF | Returns TRUE if provided value is #REF! error. | ISREF(value) | | ISTEXT | Returns TRUE if the cell contents reference text. | ISTEXT(value) | | N | Converts a value to a number. | N(value) | | NA | Returns #N/A! error value. | NA() | | SHEET | Returns sheet number of a given value or a formula sheet number if no argument is provided. | SHEET([value]) | | SHEETS | Returns number of sheet of a given reference or number of all sheets in workbook when no argument is provided. | SHEETS([value]) | | VERSION | Returns the HyperFormula version and the license key status as a single text value, e.g. "HyperFormula v3.0.0, 1" (a status code, or the last five characters of the license key). | VERSION() | ### Logical | Function ID | Description | Syntax | |:---|:---|:---| | AND | Returns TRUE if all arguments are TRUE. | AND(logical_value1, ...) | | FALSE | Returns the logical value FALSE. | FALSE() | | IF | Specifies a logical test to be performed. | IF(test, then_value, [otherwise_value]) | | IFERROR | Returns the value if the cell does not contains an error value, or the alternative value if it does. | IFERROR(value, alternate_value) | | IFNA | Returns the value if the cell does not contains the #N/A (value not available) error value, or the alternative value if it does. | IFNA(value, alternate_value) | | IFS | Evaluates multiple logical tests and returns a value that corresponds to the first true condition. | IFS(condition1, value1, [condition2, value2], ...) | | NOT | Complements (inverts) logical_value. | NOT(logical_value) | | OR | Returns TRUE if at least one argument is TRUE. | OR(logical_value1, ...) | | SWITCH | Compares expression against value1, value2, ... in order and returns the paired result1, result2, ...; a candidate value that is an error is skipped rather than matched. | SWITCH(expression, value1, result1, ...) | | TRUE | Returns the logical value TRUE. | TRUE() | | XOR | Returns true if an odd number of arguments evaluates to TRUE. | XOR(logical_value1, ...) | ### Lookup and reference | Function ID | Description | Syntax | |:---|:---|:---| | ADDRESS | Returns a cell reference as a string. | ADDRESS(row, column, [absolute_relative_mode], [use_a1_notation], [sheet]) | | CHOOSE | Uses an index to return a value from a list of values. | CHOOSE(index, value1, ...) | | COLUMN | Returns column number of a given reference or formula reference if argument not provided. | COLUMN([reference]) | | COLUMNS | Returns the number of columns in the given reference. | COLUMNS(array) | | FILTER | Filters an array, based on multiple conditions (boolean arrays). | FILTER(source_array, bool_array1, ...) | | FORMULATEXT | Returns a formula in a given cell as a string. | FORMULATEXT(reference) | | HLOOKUP | Searches horizontally with reference to adjacent cells to the bottom. | HLOOKUP(search_criterion, array, index, [sort_order]) | | HSTACK | Stacks arrays horizontally into a single array. | HSTACK(array1, ...) | | HYPERLINK | Stores the url in the cell's metadata. It can be read using method [`getCellHyperlink`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#getcellhyperlink) | HYPERLINK(url, [link_label]) | | INDEX | Returns the contents of a cell specified by row and column number. The column number is optional and defaults to 1. | INDEX(range, row, [column]) | | MATCH | Returns the relative position of an item in an array that matches a specified value. | MATCH(search_criterion, lookup_array, [match_type]) | | OFFSET | Returns the value of a cell offset by a certain number of rows and columns from a given reference point. | OFFSET(reference, rows, columns, [height], [width]) | | ROW | Returns row number of a given reference or formula reference if argument not provided. | ROW([reference]) | | ROWS | Returns the number of rows in the given reference. | ROWS(array) | | SORT | Sorts the rows or columns of an array. | SORT(array, [sort_index], [sort_order], [by_col]) | | TRANSPOSE | Transposes the rows and columns of an array. | TRANSPOSE(array) | | UNIQUE | Returns the unique rows or columns of an array. | UNIQUE(array, [by_col], [exactly_once]) | | VLOOKUP | Searches vertically with reference to adjacent cells to the right. | VLOOKUP(search_criterion, array, index, [sort_order]) | | VSTACK | Stacks arrays vertically into a single array. | VSTACK(array1, ...) | | XLOOKUP | Searches for a key in a range and returns the item corresponding to the match it finds. If no match exists, then XLOOKUP can return the closest (approximate) match. | XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) | ### Math and trigonometry | Function ID | Description | Syntax | |:---|:---|:---| | ABS | Returns the absolute value of a number. | ABS(number) | | ACOS | Returns the inverse trigonometric cosine of a number. | ACOS(number) | | ACOSH | Returns the inverse hyperbolic cosine of a number. | ACOSH(number) | | ACOT | Returns the inverse trigonometric cotangent of a number. | ACOT(number) | | ACOTH | Returns the inverse hyperbolic cotangent of a number. | ACOTH(number) | | ARABIC | Converts number from roman form. | ARABIC(string) | | ASIN | Returns the inverse trigonometric sine of a number. | ASIN(number) | | ASINH | Returns the inverse hyperbolic sine of a number. | ASINH(number) | | ATAN | Returns the inverse trigonometric tangent of a number. | ATAN(number) | | ATAN2 | Returns the inverse trigonometric tangent of the specified x and y coordinates. | ATAN2(number_x, number_y) | | ATANH | Returns the inverse hyperbolic tangent of a number. | ATANH(number) | | BASE | Converts a non-negative integer to a specified base into a text from the numbering system. | BASE(number, radix, [minimum_length]) | | CEILING | Rounds a number up to the nearest multiple of significance, toward positive infinity when significance is positive and toward negative infinity when it is negative. | CEILING(number, significance) | | CEILING.MATH | Rounds a number up to the nearest multiple of significance, ignoring the sign of significance; for a negative number, mode selects whether it rounds toward or away from zero. | CEILING.MATH(number, [significance], [mode]) | | CEILING.PRECISE | Rounds a number up toward positive infinity to the nearest multiple of significance, whatever the sign of significance. | CEILING.PRECISE(number, [significance]) | | COMBIN | Returns number of combinations (without repetitions). | COMBIN(number1, number2) | | COMBINA | Returns number of combinations (with repetitions). | COMBINA(number1, number2) | | COS | Returns the cosine of the given angle (in radians). | COS(number) | | COSH | Returns the hyperbolic cosine of the given value. | COSH(number) | | COT | Returns the cotangent of the given angle (in radians). | COT(number) | | COTH | Returns the hyperbolic cotangent of the given value. | COTH(number) | | CSC | Returns the cosecant of the given angle (in radians). | CSC(number) | | CSCH | Returns the hyperbolic cosecant of the given value. | CSCH(number) | | DECIMAL | Converts text with characters from a number system to a non-negative integer in the base radix given. | DECIMAL(text, radix) | | DEGREES | Converts radians into degrees. | DEGREES(number) | | EVEN | Rounds a positive number up to the next even integer and a negative number down to the next even integer. | EVEN(number) | | EXP | Returns constant e raised to the power of a number. | EXP(number) | | FACT | Returns a factorial of a number. | FACT(number) | | FACTDOUBLE | Returns a double factorial of a number. | FACTDOUBLE(number) | | FLOOR | Rounds a number down to the nearest multiple of significance, toward negative infinity when significance is positive and toward positive infinity when it is negative. | FLOOR(number, significance) | | FLOOR.MATH | Rounds a number down to the nearest multiple of significance, ignoring the sign of significance; for a negative number, mode selects whether it rounds toward or away from zero. | FLOOR.MATH(number, [significance], [mode]) | | FLOOR.PRECISE | Rounds a number down toward negative infinity to the nearest multiple of significance, whatever the sign of significance. | FLOOR.PRECISE(number, [significance]) | | GCD | Computes greatest common divisor of numbers. | GCD(number1, ...) | | INT | Returns the integer part of a number by discarding its fractional part. | INT(number) | | ISO.CEILING | Rounds a number up toward positive infinity to the nearest multiple of significance, whatever the sign of significance. | ISO.CEILING(number, [significance]) | | LCM | Computes least common multiple of numbers. | LCM(number1, ...) | | LN | Returns the natural logarithm based on the constant e of a number. | LN(number) | | LOG | Returns the logarithm of a number to the specified base. | LOG(number, [base]) | | LOG10 | Returns the base-10 logarithm of a number. | LOG10(number) | | MOD | Returns the remainder when one number is divided by another. | MOD(dividend, divisor) | | MROUND | Rounds a number to the nearest multiple. | MROUND(number, base) | | MULTINOMIAL | Returns number of multiset combinations. | MULTINOMIAL(number1, ...) | | ODD | Rounds a positive number up to the nearest odd integer and a negative number down to the nearest odd integer. | ODD(number) | | PI | Returns 3.14159265358979, the value of the mathematical constant PI to 14 decimal places. | PI() | | POWER | Returns a number raised to another number. | POWER(base, exponent) | | PRODUCT | Returns product of numbers. | PRODUCT(number1, ...) | | QUOTIENT | Returns integer part of a division. | QUOTIENT(dividend, divisor) | | RADIANS | Converts degrees to radians. | RADIANS(number) | | RAND | Returns a random number between 0 and 1. | RAND() | | RANDBETWEEN | Returns a random integer between two numbers. | RANDBETWEEN(lower_bound, upper_bound) | | ROMAN | Converts number to roman form. | ROMAN(number, [mode]) | | ROUND | Rounds a number to a certain number of decimal places. | ROUND(number, [count]) | | ROUNDDOWN | Rounds a number down, toward zero, to a certain precision. | ROUNDDOWN(number, [count]) | | ROUNDUP | Rounds a number up, away from zero, to a certain precision. | ROUNDUP(number, [count]) | | SEC | Returns the secant of the given angle (in radians). | SEC(number) | | SECH | Returns the hyperbolic secant of the given value. | SECH(number) | | SEQUENCE | Returns an array of sequential numbers. | SEQUENCE(rows, [cols], [start], [step]) | | SERIESSUM | Evaluates series at a point. | SERIESSUM(x, n, m, coefficients) | | SIGN | Returns sign of a number. | SIGN(number) | | SIN | Returns the sine of the given angle (in radians). | SIN(number) | | SINH | Returns the hyperbolic sine of the given value. | SINH(number) | | SQRT | Returns the positive square root of a number. | SQRT(number) | | SQRTPI | Returns sqrt of number times pi. | SQRTPI(number) | | SUBTOTAL | Computes aggregation using function specified by number. | SUBTOTAL(function, number1, ...) | | SUM | Sums up the values of the specified cells. | SUM(number1, ...) | | SUMIF | Sums up the values of cells that belong to the specified range and meet the specified condition. | SUMIF(range, criteria, [sum_range]) | | SUMIFS | Sums up the values of cells that belong to the specified range and meet the specified sets of conditions. | SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) | | SUMPRODUCT | Multiplies corresponding elements in the given arrays, and returns the sum of those products. | SUMPRODUCT(array1, ...) | | SUMSQ | Returns the sum of the squares of the arguments. | SUMSQ(number1, ...) | | SUMX2MY2 | Returns the sum of the differences of the squares of paired values, that is the sum of x squared minus y squared over all pairs. | SUMX2MY2(array_x, array_y) | | SUMX2PY2 | Returns the sum of the sums of the squares of paired values, that is the sum of x squared plus y squared over all pairs. | SUMX2PY2(array_x, array_y) | | SUMXMY2 | Returns the sum of the squares of the differences of paired values, that is the sum of x minus y, squared, over all pairs. | SUMXMY2(array_x, array_y) | | TAN | Returns the tangent of the given angle (in radians). | TAN(number) | | TANH | Returns the hyperbolic tangent of the given value. | TANH(number) | | TRUNC | Rounds a number down, toward zero, to a certain precision. | TRUNC(number, [count]) | ### Matrix functions | Function ID | Description | Syntax | |:---|:---|:---| | MAXPOOL | Calculates a smaller range which is a maximum of a window_size, in a given range, for every stride element. | MAXPOOL(range, window_size, [stride]) | | MEDIANPOOL | Calculates a smaller range which is a median of a window_size, in a given range, for every stride element. | MEDIANPOOL(range, window_size, [stride]) | | MMULT | Calculates the array product of two arrays. | MMULT(array1, array2) | ### Operator | Function ID | Description | Syntax | |:---|:---|:---| | HF.ADD | Adds two values. | HF.ADD(number1, number2) | | HF.CONCAT | Concatenates two strings. | HF.CONCAT(string1, string2) | | HF.DIVIDE | Divides two values. | HF.DIVIDE(number1, number2) | | HF.EQ | Tests two values for equality. | HF.EQ(value1, value2) | | HF.GT | Tests two values for greater-than relation. | HF.GT(value1, value2) | | HF.GTE | Tests two values for greater-equal relation. | HF.GTE(value1, value2) | | HF.LT | Tests two values for less-than relation. | HF.LT(value1, value2) | | HF.LTE | Tests two values for less-equal relation. | HF.LTE(value1, value2) | | HF.MINUS | Subtracts two values. | HF.MINUS(number1, number2) | | HF.MULTIPLY | Multiplies two values. | HF.MULTIPLY(number1, number2) | | HF.NE | Tests two values for inequality. | HF.NE(value1, value2) | | HF.POW | Computes power of two values. | HF.POW(number1, number2) | | HF.UMINUS | Negates the value. | HF.UMINUS(number) | | HF.UNARY_PERCENT | Applies percent operator. | HF.UNARY_PERCENT(number) | | HF.UPLUS | Applies unary plus. | HF.UPLUS(number) | ### Statistical | Function ID | Description | Syntax | |:---|:---|:---| | AVEDEV | Returns the average deviation of the arguments. | AVEDEV(number1, ...) | | AVERAGE | Returns the average of the arguments. | AVERAGE(number1, ...) | | AVERAGEA | Returns the average of the arguments, counting text and logical values found in ranges. | AVERAGEA(value1, ...) | | AVERAGEIF | Returns the arithmetic mean of all cells in a range that satisfy a given condition. | AVERAGEIF(range, criteria, [average_range]) | | BETA.DIST | Returns the density of the beta distribution. | BETA.DIST(x, alpha, beta, cumulative, [lower_bound], [upper_bound]) | | BETA.INV | Returns the inverse of the beta distribution value. | BETA.INV(probability, alpha, beta, [lower_bound], [upper_bound]) | | BETADIST | Returns the density of the beta distribution. | BETADIST(x, alpha, beta, cumulative, [lower_bound], [upper_bound]) | | BETAINV | Returns the inverse of the beta distribution value. | BETAINV(probability, alpha, beta, [lower_bound], [upper_bound]) | | BINOM.DIST | Returns density of binomial distribution. | BINOM.DIST(number_s, trials, probability_s, cumulative) | | BINOM.INV | Returns inverse binomial distribution value. | BINOM.INV(trials, probability_s, alpha) | | BINOMDIST | Returns density of binomial distribution. | BINOMDIST(number_s, trials, probability_s, cumulative) | | CHIDIST | Returns probability of chi-square right-side distribution. | CHIDIST(x, degrees) | | CHIDISTRT | Returns probability of chi-square right-side distribution. | CHIDISTRT(x, degrees) | | CHIINV | Returns inverse of chi-square right-side distribution. | CHIINV(p, degrees) | | CHIINVRT | Returns inverse of chi-square right-side distribution. | CHIINVRT(p, degrees) | | CHISQ.DIST | Returns value of chi-square distribution. | CHISQ.DIST(x, degrees, cumulative) | | CHISQ.DIST.RT | Returns probability of chi-square right-side distribution. | CHISQ.DIST.RT(x, degrees) | | CHISQ.INV | Returns inverse of chi-square distribution. | CHISQ.INV(p, degrees) | | CHISQ.INV.RT | Returns inverse of chi-square right-side distribution. | CHISQ.INV.RT(p, degrees) | | CHISQ.TEST | Returns chisquared-test value for a dataset. | CHISQ.TEST(array1, array2) | | CHITEST | Returns chisquared-test value for a dataset. | CHITEST(array1, array2) | | CONFIDENCE | Returns upper confidence bound for normal distribution. | CONFIDENCE(alpha, stdev, size) | | CONFIDENCE.NORM | Returns upper confidence bound for normal distribution. | CONFIDENCE.NORM(alpha, stdev, size) | | CONFIDENCE.T | Returns upper confidence bound for T distribution. | CONFIDENCE.T(alpha, stdev, size) | | CORREL | Returns the correlation coefficient between two data sets. | CORREL(data1, data2) | | COUNT | Counts how many numbers are in the list of arguments. | COUNT(value1, ...) | | COUNTA | Counts how many values are in the list of arguments. | COUNTA(value1, ...) | | COUNTBLANK | Returns the number of empty cells. | COUNTBLANK(range, ...) | | COUNTIF | Returns the number of cells that meet with certain criteria within a cell range. | COUNTIF(range, criteria) | | COUNTIFS | Returns the count of rows or columns that meet criteria in multiple ranges. | COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2], ...) | | COUNTUNIQUE | Counts the number of unique values in a list of specified values and ranges. | COUNTUNIQUE(value1, ...) | | COVAR | Returns the covariance between two data sets, population normalized. | COVAR(data1, data2) | | COVARIANCE.P | Returns the covariance between two data sets, population normalized. | COVARIANCE.P(data1, data2) | | COVARIANCE.S | Returns the covariance between two data sets, sample normalized. | COVARIANCE.S(data1, data2) | | COVARIANCEP | Returns the covariance between two data sets, population normalized. | COVARIANCEP(data1, data2) | | COVARIANCES | Returns the covariance between two data sets, sample normalized. | COVARIANCES(data1, data2) | | CRITBINOM | Returns inverse binomial distribution value. | CRITBINOM(trials, probability_s, alpha) | | DEVSQ | Returns sum of squared deviations. | DEVSQ(number1, ...) | | EXPON.DIST | Returns density of a exponential distribution. | EXPON.DIST(x, lambda, cumulative) | | EXPONDIST | Returns density of a exponential distribution. | EXPONDIST(x, lambda, cumulative) | | F.DIST | Returns value of F distribution. | F.DIST(x, degree1, degree2, cumulative) | | F.DIST.RT | Returns probability of F right-side distribution. | F.DIST.RT(x, degree1, degree2) | | F.INV | Returns inverse of F distribution. | F.INV(p, degree1, degree2) | | F.INV.RT | Returns inverse of F right-side distribution. | F.INV.RT(p, degree1, degree2) | | F.TEST | Returns f-test value for a dataset. | F.TEST(array1, array2) | | FDIST | Returns probability of F right-side distribution. | FDIST(x, degree1, degree2) | | FDISTRT | Returns probability of F right-side distribution. | FDISTRT(x, degree1, degree2) | | FINV | Returns inverse of F right-side distribution. | FINV(p, degree1, degree2) | | FINVRT | Returns inverse of F right-side distribution. | FINVRT(p, degree1, degree2) | | FISHER | Returns Fisher transformation value. | FISHER(number) | | FISHERINV | Returns inverse Fisher transformation value. | FISHERINV(number) | | FTEST | Returns f-test value for a dataset. | FTEST(array1, array2) | | GAMMA | Returns value of Gamma function. | GAMMA(number) | | GAMMA.DIST | Returns density of Gamma distribution. | GAMMA.DIST(x, alpha, beta, cumulative) | | GAMMA.INV | Returns inverse Gamma distribution value. | GAMMA.INV(probability, alpha, beta) | | GAMMADIST | Returns density of Gamma distribution. | GAMMADIST(x, alpha, beta, cumulative) | | GAMMAINV | Returns inverse Gamma distribution value. | GAMMAINV(probability, alpha, beta) | | GAMMALN | Returns natural logarithm of Gamma function. | GAMMALN(number) | | GAMMALN.PRECISE | Returns natural logarithm of Gamma function. | GAMMALN.PRECISE(number) | | GAUSS | Returns the probability that a member of a standard normal population falls between the mean and `number` standard deviations from the mean. | GAUSS(number) | | GEOMEAN | Returns the geometric average. | GEOMEAN(number1, ...) | | HARMEAN | Returns the harmonic average. | HARMEAN(number1, ...) | | HYPGEOM.DIST | Returns density of hypergeometric distribution. | HYPGEOM.DIST(sample_s, number_sample, population_s, number_population, cumulative) | | HYPGEOMDIST | Returns density of hypergeometric distribution. | HYPGEOMDIST(sample_s, number_sample, population_s, number_population, cumulative) | | LARGE | Returns k-th largest value in a range. | LARGE(range, k) | | LOGINV | Returns value of inverse lognormal distribution. | LOGINV(p, mean, stddev) | | LOGNORM.DIST | Returns density of lognormal distribution. | LOGNORM.DIST(x, mean, stddev, cumulative) | | LOGNORM.INV | Returns value of inverse lognormal distribution. | LOGNORM.INV(p, mean, stddev) | | LOGNORMDIST | Returns density of lognormal distribution. | LOGNORMDIST(x, mean, stddev, cumulative) | | LOGNORMINV | Returns value of inverse lognormal distribution. | LOGNORMINV(p, mean, stddev) | | MAX | Returns the maximum value in a list of arguments. | MAX(number1, ...) | | MAXA | Returns the maximum value in a list of arguments, counting text and logical values found in ranges. | MAXA(value1, ...) | | MAXIFS | Returns the maximum value of the cells in a range that meet a set of criteria. | MAXIFS(max_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) | | MEDIAN | Returns the median of a set of numbers. | MEDIAN(number1, ...) | | MIN | Returns the minimum value in a list of arguments. | MIN(number1, ...) | | MINA | Returns the minimum value in a list of arguments, counting text and logical values found in ranges. | MINA(value1, ...) | | MINIFS | Returns the minimum value of the cells in a range that meet a set of criteria. | MINIFS(min_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) | | NEGBINOM.DIST | Returns density of negative binomial distribution. | NEGBINOM.DIST(number_f, number_s, probability_s, cumulative) | | NEGBINOMDIST | Returns density of negative binomial distribution. | NEGBINOMDIST(number_f, number_s, probability_s, cumulative) | | NORM.DIST | Returns density of normal distribution. | NORM.DIST(x, mean, stddev, cumulative) | | NORM.INV | Returns value of inverse normal distribution. | NORM.INV(p, mean, stddev) | | NORM.S.DIST | Returns density of the standard normal distribution (mean 0, standard deviation 1). | NORM.S.DIST(x, cumulative) | | NORM.S.INV | Returns value of the inverse standard normal distribution (mean 0, standard deviation 1). | NORM.S.INV(p) | | NORMDIST | Returns density of normal distribution. | NORMDIST(x, mean, stddev, cumulative) | | NORMINV | Returns value of inverse normal distribution. | NORMINV(p, mean, stddev) | | NORMSDIST | Returns density of the standard normal distribution (mean 0, standard deviation 1). | NORMSDIST(x, cumulative) | | NORMSINV | Returns value of the inverse standard normal distribution (mean 0, standard deviation 1). | NORMSINV(p) | | PEARSON | Returns the correlation coefficient between two data sets. | PEARSON(data1, data2) | | PERCENTILE | Returns the k-th percentile of values in a range, inclusive of 0 and 1. | PERCENTILE(data, k) | | PERCENTILE.EXC | Returns the k-th percentile of values in a range, exclusive of 0 and 1. | PERCENTILE.EXC(data, k) | | PERCENTILE.INC | Returns the k-th percentile of values in a range, inclusive of 0 and 1. | PERCENTILE.INC(data, k) | | PHI | Returns probability density of normal distribution. | PHI(x) | | POISSON | Returns density of Poisson distribution. | POISSON(x, mean, cumulative) | | POISSON.DIST | Returns density of Poisson distribution. | POISSON.DIST(x, mean, cumulative) | | POISSONDIST | Returns density of Poisson distribution. | POISSONDIST(x, mean, cumulative) | | QUARTILE | Returns the quartile of a data set, based on inclusive percentile values. | QUARTILE(data, quart) | | QUARTILE.EXC | Returns the quartile of a data set, based on exclusive percentile values. | QUARTILE.EXC(data, quart) | | QUARTILE.INC | Returns the quartile of a data set, based on inclusive percentile values. | QUARTILE.INC(data, quart) | | RSQ | Returns the squared correlation coefficient between two data sets. | RSQ(data1, data2) | | SKEW | Returns skewness of a sample. | SKEW(number1, ...) | | SKEW.P | Returns skewness of a population. | SKEW.P(number1, ...) | | SKEWP | Returns skewness of a population. | SKEWP(number1, ...) | | SLOPE | Returns the slope of a linear regression line. | SLOPE(array1, array2) | | SMALL | Returns k-th smallest value in a range. | SMALL(range, k) | | STANDARDIZE | Returns normalized value wrt expected value and standard deviation. | STANDARDIZE(x, mean, stddev) | | STDEV | Returns standard deviation of a sample. | STDEV(value1, ...) | | STDEV.P | Returns standard deviation of a population. | STDEV.P(value1, ...) | | STDEV.S | Returns standard deviation of a sample. | STDEV.S(value1, ...) | | STDEVA | Returns standard deviation of a sample, counting text and logical values found in ranges. | STDEVA(value1, ...) | | STDEVP | Returns standard deviation of a population. | STDEVP(value1, ...) | | STDEVPA | Returns standard deviation of a population, counting text and logical values found in ranges. | STDEVPA(value1, ...) | | STDEVS | Returns standard deviation of a sample. | STDEVS(value1, ...) | | STEYX | Returns standard error for predicted of the predicted y value for each x value. | STEYX(array1, array2) | | T.DIST | Returns density of Student-t distribution. | T.DIST(x, degrees, cumulative) | | T.DIST.2T | Returns density of Student-t distribution, both-sided. | T.DIST.2T(x, degrees) | | T.DIST.RT | Returns density of Student-t distribution, right-tailed. | T.DIST.RT(x, degrees) | | T.INV | Returns inverse Student-t distribution. | T.INV(p, degrees) | | T.INV.2T | Returns inverse Student-t distribution, both-sided. | T.INV.2T(p, degrees) | | T.TEST | Returns t-test value for a dataset. | T.TEST(array1, array2, tails, type) | | TDIST | Returns density of Student-t distribution, both-sided or right-tailed. | TDIST(x, degrees, tails) | | TDIST2T | Returns density of Student-t distribution, both-sided. | TDIST2T(x, degrees) | | TDISTRT | Returns density of Student-t distribution, right-tailed. | TDISTRT(x, degrees) | | TINV | Returns inverse Student-t distribution, both-sided. | TINV(p, degrees) | | TINV2T | Returns inverse Student-t distribution, both-sided. | TINV2T(p, degrees) | | TTEST | Returns t-test value for a dataset. | TTEST(array1, array2, tails, type) | | VAR | Returns variance of a sample. | VAR(value1, ...) | | VAR.P | Returns variance of a population. | VAR.P(value1, ...) | | VAR.S | Returns variance of a sample. | VAR.S(value1, ...) | | VARA | Returns variance of a sample, counting text and logical values found in ranges. | VARA(value1, ...) | | VARP | Returns variance of a population. | VARP(value1, ...) | | VARPA | Returns variance of a population, counting text and logical values found in ranges. | VARPA(value1, ...) | | VARS | Returns variance of a sample. | VARS(value1, ...) | | WEIBULL | Returns density of Weibull distribution. | WEIBULL(x, alpha, beta, cumulative) | | WEIBULL.DIST | Returns density of Weibull distribution. | WEIBULL.DIST(x, alpha, beta, cumulative) | | WEIBULLDIST | Returns density of Weibull distribution. | WEIBULLDIST(x, alpha, beta, cumulative) | | Z.TEST | Returns z-test value for a dataset. | Z.TEST(array, x, [sigma]) | | ZTEST | Returns z-test value for a dataset. | ZTEST(array, x, [sigma]) | ### Text | Function ID | Description | Syntax | |:---|:---|:---| | CHAR | Converts a number into a character according to the current code table. | CHAR(number) | | CLEAN | Returns text that has been "cleaned" of line breaks and other non-printable characters. | CLEAN(text) | | CODE | Returns a numeric code for the first character in a text string. | CODE(text) | | CONCATENATE | Combines several text strings into one string. | CONCATENATE(text1, ...) | | EXACT | Returns TRUE if both text strings are exactly the same. | EXACT(text1, text2) | | FIND | Returns the location of one text string inside another. | FIND(search_string, text, [start_position]) | | LEFT | Extracts a given number of characters from the left side of a text string. | LEFT(text, [number]) | | LEN | Returns length of a given text. | LEN(text) | | LOWER | Returns text converted to lowercase. | LOWER(text) | | MID | Returns a substring of a given length starting from start_position. | MID(text, start_position, length) | | PROPER | Capitalizes words given text string. | PROPER(text) | | REPLACE | Replaces substring of a text of a given length that starts at given position. | REPLACE(text, start_position, length, new_text) | | REPT | Repeats text a given number of times. | REPT(text, number) | | RIGHT | Extracts a given number of characters from the right side of a text string. | RIGHT(text, [number]) | | SEARCH | Returns the location of search_string inside text. Case-insensitive. Allows the use of wildcards. | SEARCH(search_string, text, [start_position]) | | SPLIT | Divides the provided text using the space character as a separator and returns the substring at the zero-based position specified by the second argument. For example, SPLIT("Lorem ipsum", 0) returns "Lorem" and SPLIT("Lorem ipsum", 1) returns "ipsum". | SPLIT(text, index) | | SUBSTITUTE | Returns a string where occurrences of old_text are replaced by new_text. Replaces only specific occurrence if last parameter is provided. | SUBSTITUTE(text, old_text, new_text, [occurrence]) | | T | Returns text if given value is text, empty string otherwise. | T(value) | | TEXT | Converts a number into text according to a given format. By default it accepts the same formats as the [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#dateformats) option, and can be further customized with the [`stringifyDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#stringifydatetime) and [`stringifyCurrency`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#stringifycurrency) options. | TEXT(number, format) | | TEXTJOIN | Joins text from multiple strings and/or ranges with a delimiter. Supports array/range delimiters that cycle through gaps. When ignore_empty is TRUE, empty strings are skipped. Returns #VALUE! if result exceeds 32,767 characters. | TEXTJOIN(delimiter, ignore_empty, text1, ...) | | TRIM | Strips extra spaces from text. | TRIM(text) | | UNICHAR | Returns the character created by using provided code point. | UNICHAR(number) | | UNICODE | Returns the Unicode code point of a first character of a text. | UNICODE(text) | | UPPER | Returns text converted to uppercase. | UPPER(text) | | VALUE | Parses a number, date, time, datetime, currency, or percentage from a text string. | VALUE(text) | --- ## Configuration options URL: https://hyperformula.handsontable.com/docs/guide/configuration-options # Configuration options HyperFormula can be customized through easy-to-setup `options`. The only mandatory key is `licenseKey`. It has a [dedicated section](https://hyperformula.handsontable.com/docs/guide/license-key.md) in which you can find all allowed types of key values. Below you can see the example of a configuration object and the static method called to initiate a new instance of HyperFormula. [See the full list of available options →](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html) ## Example ```javascript // define options const options = { licenseKey: 'gpl-v3', precisionRounding: 9, nullDate: { year: 1900, month: 1, day: 1 }, functionArgSeparator: '.' }; // call the static method to build a new instance const hfInstance = HyperFormula.buildEmpty(options); ``` --- ## Compatibility with Google Sheets URL: https://hyperformula.handsontable.com/docs/guide/compatibility-with-google-sheets # Compatibility with Google Sheets Achieve nearly full compatibility wih Google Sheets, using the right HyperFormula configuration. **Contents:** ## Overview While HyperFormula conforms to the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard, it also follows industry practices set by other spreadsheets such as Microsoft Excel or Google Sheets. That said, there are cases when HyperFormula can't be compatible with all three at the same time, because of inconsistencies (between the OpenDocument standard, Microsoft Excel and Google Sheets), limitations of HyperFormula at its current development stage (version `3.4.0`), or limitations of Microsoft Excel or Google Sheets themselves. For the full list of such differences, see [this](https://hyperformula.handsontable.com/docs/guide/list-of-differences.md) page. Still, with the right configuration, you can achieve nearly full compatibility. ## Configure compatibility with Google Sheets ### `TRUE` and `FALSE` constants Google Sheets has built-in constants (keywords) for the boolean values (`TRUE` and `FALSE`). To set up HyperFormula in the same way, define `TRUE` and `FALSE` as [named expressions](https://hyperformula.handsontable.com/docs/guide/named-expressions.md), by using HyperFormula's [`TRUE()`](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#logical) and [`FALSE()`](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#logical) functions. ```js hfInstance.addNamedExpression('TRUE', '=TRUE()'); hfInstance.addNamedExpression('FALSE', '=FALSE()'); ``` ### Array arithmetic mode In Google Sheets, the [array arithmetic mode](https://hyperformula.handsontable.com/docs/guide/arrays.md#array-arithmetic-mode) is disabled by default. To set up HyperFormula in the same way, set the [`useArrayArithmetic`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#usearrayarithmetic) option to `false`. ```js useArrayArithmetic: false, // set by default ``` ### Leap year bug In Google Sheets, the year 1900 is [correctly](https://developers.google.com/sheets/api/guides/formats#about_date_and_time_values) treated as a common year, not a leap year. To set up HyperFormula in the same way, use the default configuration: ```js leapYear1900: false, // set by default ``` ### Numerical precision Both HyperFormula and Google Sheets automatically round floating-point numbers. To configure this feature, use these options: - [`smartRounding`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#smartrounding) - [`precisionEpsilon`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#precisionepsilon) ### Separators In Google Sheets, separators depend on your configured locale, whereas in HyperFormula, you set up separators through options (e.g., [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator)). In Google Sheets' `en-US` locale, the thousands separator and the function argument separator use the same character: `,` (a comma). But in HyperFormula, [`functionArgSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator) can't be the same as [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator). For this reason, you can't achieve full compatibility with Google Sheets' `en-US` locale. To match Google Sheets' `en-US` locale as closely as possible, use the default configuration: ```js functionArgSeparator: ',', // set by default decimalSeparator: '.', // set by default thousandSeparator: '', // set by default arrayColumnSeparator: ',', // set by default arrayRowSeparator: ';', // set by default ``` Related options: - [`functionArgSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator) - [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) - [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) - [`arrayRowSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#arrayrowseparator) - [`arrayColumnSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#arraycolumnseparator) ### Date and time formats In Google Sheets, date and time formats depend on the spreadsheet's locale and are [shared across all users](https://support.google.com/docs/answer/58515), whereas in HyperFormula you can [set them up freely](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). Options related to date and time formats: - [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats) - [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats) - [`nullYear`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nullyear) - [`parseDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#parsedatetime) - [`stringifyDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime) - [`stringifyDuration()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifyduration) ### `TEXT` function formats Google Sheets' `TEXT` function supports a wide range of date, time, and currency formats. To cover the full range in HyperFormula, supply both [`stringifyDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime) (for dates and durations) and [`stringifyCurrency()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifycurrency) (for currency formats — locale-aware grouping, non-`$` symbols, accounting two-section patterns). See [Currency handling](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) for an `Intl.NumberFormat`-based example. ## Full configuration This configuration aligns HyperFormula with the default behavior of Google Sheets (set to locale `en-US`), as closely as possible at this development stage (version `3.4.0`). ```js // define options const options = { dateFormats: ['MM/DD/YYYY', 'MM/DD/YY', 'YYYY/MM/DD'], timeFormats: ['hh:mm', 'hh:mm:ss.sss'], // set by default currencySymbol: ['$', 'USD'], localeLang: 'en-US', functionArgSeparator: ',', // set by default decimalSeparator: '.', // set by default thousandSeparator: '', // set by default arrayColumnSeparator: ',', // set by default arrayRowSeparator: ';', // set by default nullYear: 30, // set by default useArrayArithmetic: false, // set by default leapYear1900: false, // set by default smartRounding: true, // set by default }; // call the static method to build a new instance const hfInstance = HyperFormula.buildEmpty(options); // define TRUE and FALSE constants hfInstance.addNamedExpression('TRUE', '=TRUE()'); hfInstance.addNamedExpression('FALSE', '=FALSE()'); ``` --- ## Contact URL: https://hyperformula.handsontable.com/docs/guide/contact # Contact HyperFormula is a product of Handsoncode, the company that stands behind [Handsontable](https://handsontable.com/). We are here to answer all your questions regarding pricing, licensing, support, and security. We typically reply within a few hours during our working hours: 8:00 AM - 5:00 PM [CET](https://time.is/pl/CET). ## Contact sales Write to us at [sales@handsontable.com](mailto:sales@handsontable.com) or submit your inquiry through the [contact form](https://handsontable.com/get-a-quote). ## Billing address * Handsoncode sp. z o.o. * Aleja Zwycięstwa 96/98 * 81-451 Gdynia, Poland * VAT EU: PL5862294002 ## Looking for technical support? [Learn more about support options →](https://hyperformula.handsontable.com/#pricing) --- ## Contributing URL: https://hyperformula.handsontable.com/docs/guide/contributing # Contributing You are welcome to contribute to HyperFormula's development. Your help is much appreciated in any of the following topics: * Making pull requests * Adding new functions * Adding new features * Improving the quality of the existing code * Improving performance * Improving documentation and public API * Reporting bugs * Suggesting improvements * Suggesting new features ## Good first issue Adding a new function would be a huge help for the growth of the library and should not be too problematic for a first issue. Extending the library of translations is also a good task to start with. [Here](https://docs.google.com/spreadsheets/d/1UUskn4ZDDjLGSpO6kg73DOvabNoeqLbkJYyVfLyYlYw) you can find a list of function translations. Visit the [building](https://hyperformula.handsontable.com/docs/guide/building.md) section to get more info about the development process and check the list of commands you can run in this project. Check the `/i18n` folder in the project - all translations are kept there. For the functions see the `interpreter/plugin` folder. Both of them are a good starting point. ## How to get started 1. First, sign this [Contributor License Agreement](https://goo.gl/forms/yuutGuN0RjsikVpM2) to allow us to use and publish your changes. 2. Always make your changes on a separate branch. This will speed up the merging process. 3. Always make the target of your pull request the `develop` branch, not `master`. 4. For any change you make, add test specs to the `test` folder. 5. Please lint the code. See the section about using linter. 6. Add a comprehensive description of all the changes. ## Code of conduct By participating in this project, you are expected to uphold our [Code of Conduct](https://hyperformula.handsontable.com/docs/guide/code-of-conduct.md). --- ## Basic operations URL: https://hyperformula.handsontable.com/docs/guide/basic-operations # Basic operations HyperFormula can perform efficient **CRUD** operations on the workbook. You can apply these operations to various workbook elements, such as: * Cells * Rows / Columns * Sheets **Check the [API](https://hyperformula.handsontable.com/docs/api)** for a full reference of methods available for CRUD operations. HyperFormula automatically updates all references, both relative and absolute, in all sheets affected by the change. Operations affecting only the dependency graph should not decrease performance. However, multiple operations that have an impact on calculation results may affect performance; these are [`clearSheet`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#clearsheet), [`setSheetContent`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setsheetcontent), [`setCellContents`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcellcontents), [`addNamedExpression`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addnamedexpression), [`changeNamedExpression`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#changenamedexpression), and [`removeNamedExpression`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removenamedexpression). It is advised to [batch](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) them. ## Sheets ### Adding a sheet A sheet can be added by using the [`addSheet`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addsheet) method. You can pass a name for it or leave it without a parameter. In the latter case the method will create an autogenerated name for it. That name can then be returned for further use. ```javascript // the autogenerated sheet name can be assigned to a variable const myNewSheet = hfInstance.addSheet(); // create a sheet with a specific name hfInstance.addSheet('SheetName'); ``` You can also count sheets by using the [`countSheets`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#countsheets) method. This method does not require any parameters. ```javascript // count the number of sheets you added const sheetsCount = hfInstance.countSheets(); ``` ### Removing a sheet A sheet can be removed by using the [`removeSheet`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removesheet) method. To do that you need to pass a mandatory parameter: the ID of a sheet to be removed. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by removing the sheet 0 const changes = hfInstance.removeSheet(0); ``` ### Renaming a sheet A sheet can be renamed by using the [`renameSheet`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#renamesheet) method. You need to pass the ID of a sheet you want to rename (you can get it with the [`getSheetId`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getsheetid) method only if you know its name) along with a new name as the first and second parameters, respectively. ```javascript // rename the first sheet hfInstance.renameSheet(0, 'NewSheetName'); // you can retrieve the sheet ID if you know its name const sheetID = hfInstance.getSheetId('SheetName'); // use the retrieved sheet ID in the method hfInstance.renameSheet(sheetID, 'AnotherNewName'); ``` ### Clearing a sheet A sheet's content can be cleared with the [`clearSheet`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#clearsheet) method. You need to provide the ID of a sheet whose content you want to clear. This method returns [an array of changed cells](#changes-array). ```javascript // clear the content of sheet 0 const changes = hfInstance.clearSheet(0); ``` ### Replacing sheet content Instead of removing and adding the content of a sheet you can replace it right away. To do so use [`setSheetContent`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setsheetcontent), in which you can pass the sheet ID and its new values. This method returns [an array of changed cells](#changes-array). ```javascript // set new values for sheet 0 const changes = hfInstance.setSheetContent(0, [['50'], ['60']]); ``` ## Rows ### Adding rows You can add one or more rows by using the [`addRows`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addrows) method. The first parameter you need to pass is a sheet ID, and the second parameter represents the position and the size of a block of rows to be added. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by adding // two rows at position 0 inside the first sheet const changes = hfInstance.addRows(0, [0, 2]); ``` ### Removing rows You can remove one or more rows by using the [`removeRows`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removerows) method. The first parameter you need to pass is a sheet ID, and the second parameter represents the position and the size of a block of rows to be removed. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by removing // two rows at position 0 inside the first sheet const changes = hfInstance.removeRows(0, [0, 2]); ``` ### Moving rows You can move one or more rows by using the [`moveRows`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#moverows) method. You need to pass the following parameters: * Sheet ID * Starting row * Number of rows to be moved * [Target row](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#moverows) This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by moving // the first row in the first sheet into row 2 const changes = hfInstance.moveRows(0, 0, 1, 2); ``` ### Reordering rows You can change the order of rows by using the [`setRowOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setroworder) method. You need to pass the following parameters: * Sheet ID * [New row order](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setroworder) The new row order is a permutation of the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`. The value at index `i` is the new position for the row that is currently at index `i`. See the [Sorting data](https://hyperformula.handsontable.com/docs/guide/sorting-data.md) guide for details. This method returns [an array of changed cells](#changes-array). ```javascript // move row 0 to position 1, row 1 to position 2, and row 2 to position 0 const changes = hfInstance.setRowOrder(0, [1, 2, 0]); ``` ## Columns ### Adding columns You can add one or more columns by using the [`addColumns`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#addcolumns) method. The first parameter you need to pass is a sheet ID, and the second parameter represents the position and the size of a block of columns to be added. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by adding // two columns at position 0 inside the first sheet const changes = hfInstance.addColumns(0, [0, 2]); ``` ### Removing columns You can remove one or more columns by using the [`removeColumns`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removecolumns) method. The first parameter you need to pass is a sheet ID, and the second parameter represents the position and the size of a block of columns to be removed. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by removing // two columns at position 0 inside the first sheet const changes = hfInstance.removeColumns(0, [0, 2]); ``` ### Moving columns You can move one or more columns by using the [`moveColumns`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecolumns) method. You need to pass the following parameters: * Sheet ID * Starting column * Number of columns to be moved * [Target column](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecolumns) This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by moving // the first column in the first sheet into column 2 const changes = hfInstance.moveColumns(0, 0, 1, 2); ``` ### Reordering columns You can change the order of columns by using the [`setColumnOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcolumnorder) method. You need to pass the following parameters: * Sheet ID * [New column order](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcolumnorder) The new column order is a permutation of the form `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`. The value at index `i` is the new position for the column that is currently at index `i`. See the [Sorting data](https://hyperformula.handsontable.com/docs/guide/sorting-data.md) guide for details. This method returns [an array of changed cells](#changes-array). ```javascript // move column 0 to position 1, column 1 to position 2, and column 2 to position 0 const changes = hfInstance.setColumnOrder(0, [1, 2, 0]); ``` ## Cells > By default, cells are identified using a [`SimpleCellAddress`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress) which > consists of a sheet ID, column ID, and row ID, like this: > `{ sheet: 0, col: 0, row: 0 }` > > Alternatively, you can work with the **A1 notation** known from > spreadsheets like Excel or Google Sheets. The API provides the helper > function [`simpleCellAddressFromString`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#simplecelladdressfromstring) which you can use to retrieve > the [`SimpleCellAddress`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress) . ### Moving cells You can move one or more cells using the [`moveCells`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#movecells) method. You need to pass the following parameters: * Source range ([SimpleCellRange](https://hyperformula.handsontable.com/docs/api/interfaces/simplecellrange)) * Top left corner of the destination range ([SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress)) This method returns [an array of changed cells](#changes-array). ```javascript // choose the source cells const source = { sheet: 0, col: 1, row: 0 }; // choose the target cells const destination = { sheet: 0, col: 3, row: 0 }; // track the changes triggered by moving // one cell from source to target location const changes = hfInstance.moveCells({ start: source, end: source }, destination); ``` ### Updating cells You can set the content of a block of cells by using the [`setCellContents`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcellcontents) method. You need to pass the top left corner address of a block as a [`SimpleCellAddress`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress), along with the content to be set. It can be content for either a single cell or a set of cells in an array. This method returns [an array of changed cells](#changes-array). ```javascript // track the changes triggered by setting // a block of cells with content '=B1' const changes = hfInstance.setCellContents({ col: 3, row: 0, sheet: 0 }, [['=B1']]); ``` ### Getting cell value You can get the value of a cell by using [`getCellValue`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getcellvalue) . Remember to pass the coordinates as a [`SimpleCellAddress`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress) . ```javascript // get the value of the B1 cell const B1Value = hfInstance.getCellValue({ sheet: 0, col: 1, row: 0 }); ``` ### Getting cell formula You can retrieve the formula from a cell by using [`getCellFormula`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getcellformula). Remember to pass the coordinates as a [`SimpleCellAddress`](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress) . ```javascript // get the formula from the A1 cell const A1Formula = hfInstance.getCellFormula({ sheet: 0, col: 0, row: 0 }); ``` ## Handling an error Each time you call a method, HyperFormula will perform the corresponding operation. If there is an issue, it will throw an error. Methods available in the HyperFormula's API might throw different errors, but all of them follow the same pattern. Thus, the errors can be handled in a similar manner. For example, imagine you let users rename their sheets in an application but by mistake they choose a sheet ID that does not exist. It would be nice to display the error to the user, so they are aware of this fact. ```javascript // variable used to carry the message for the user let messageUsedInUI; // attempt to rename a sheet try { hfInstance.renameSheet(5, "Payroll"); // whoops! there is no sheet with an ID of 5 } catch (e) { // notify the user that a sheet with an ID of 5 does not exist if (e instanceof NoSheetWithIdError) { messageUsedInUI = "Sheet with provided ID does not exist"; } // a generic error message, just in case else { messageUsedInUI = "Something went wrong"; } } ``` ## isItPossibleTo* methods There are also methods that you may find useful to call in pair with the above-mentioned operations. These methods are prefixed with `isItPossibleTo*` whose sole purpose is to check if the desired operation is possible. They all return a simple `boolean` value. You will find it handy when you want to give the user a more generic message and you don't want to react to specific errors. This can be particularly useful for interaction with the UI of the application you work on. For example, you can allow the user to add new sheets by typing a new sheet name inside an input field. You can easily check if that action is allowed, and if it is not, throw an error. ```javascript // an instance with some example data const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // a variable used to carry the message for the user let messageUsedInUI; // use this method to check the possibility to remove columns const isRemovable = hfInstance.isItPossibleToRemoveColumns(0, [1, 1]); // check if there is a possibility to remove columns if (!isRemovable) { messageUsedInUI = 'Sorry, you cannot perform a remove action' } ``` ## Changes array All data modification methods return an array of [`ExportedChange`](https://hyperformula.handsontable.com/docs/api/globals.md#exportedchange). This is a collection of cells whose **values** were affected by an operation, together with their absolute addresses and new values. ```javascript [{ address: { sheet: 0, col: 0, row: 0 }, newValue: { error: [CellError], value: '#REF!' }, }] ``` This gives you information about where the change happened, what the new value of a cell is, and even what type it is - in this case, an error. The array of changes includes only cells that have different **values** after performing the operation. See the example: ```js const hf = HyperFormula.buildFromArray([ [0], [1], ['=SUM(A1:A2)'], ['=COUNTBLANK(A1:A3)'], ]); // insert an empty row between the row 0 and the row 1 const changes = hf.addRows(0, [1, 1]); console.log(hf.getSheetSerialized(0)); // sheet after adding the row: // [ // [0], // [], // [1], // ['=SUM(A1:A3)'], // ['=COUNTBLANK(A1:A4)'], // ] console.log(changes); // changes include only the COUNTBLANK cell: // [{ // address: { sheet: 0, row: 4, col: 0 }, // newValue: 1, // }] ``` ## Demo This demo presents several basic operations integrated with a sample UI. --- ## Currency handling URL: https://hyperformula.handsontable.com/docs/guide/currency-handling # Currency handling HyperFormula treats currency through **two independent mechanisms**: - **Currency input** — recognizing currency literals (e.g. `"100 zł"`) when they appear in cell values, so they become numeric values tagged as currency rather than strings. Controlled by [`currencySymbol`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#currencysymbol). - **Currency output** — rendering numbers as currency strings via the `TEXT` function. Simple `$`-prefixed formats work out of the box; richer locale-aware patterns plug in through [`stringifyCurrency`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifycurrency). The two mechanisms are orthogonal — configure both for full coverage. HyperFormula ships with no currency data and no currency-library dependency, so you stay in control of which symbols are recognized and how they render. ## Currency input By default, HyperFormula recognizes `$` as a currency symbol in cell input. To add more (for example Polish złoty), pass an array of recognized symbols to [`currencySymbol`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#currencysymbol): ```javascript const hf = HyperFormula.buildFromArray( [['100 zł', '=A1 * 1.23']], { currencySymbol: ['$', 'zł'] } ); console.log(hf.getCellValue({ sheet: 0, col: 0, row: 0 })); // 100 console.log(hf.getCellValueDetailedType({ sheet: 0, col: 0, row: 0 })); // 'NUMBER_CURRENCY' console.log(hf.getCellValue({ sheet: 0, col: 1, row: 0 })); // 123 ``` Notes: - The symbol can appear as a **prefix** (`"$100"`) or as a **suffix** (`"100 zł"`). Both forms are recognized. - Each entry in `currencySymbol` is a literal string — no regular expressions. To support multiple locales, list every symbol you want recognized. - Detected literals are exposed as numeric values; the currency tag is available via [`getCellValueDetailedType()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getcellvaluedetailedtype) as `NUMBER_CURRENCY`. `currencySymbol` controls **only** how HyperFormula parses input. It does not influence what the `TEXT` function returns — that is governed by the format string and the [`stringifyCurrency`](#currency-output) callback described below. ## Currency output The `TEXT` function renders a number with a format string. HyperFormula's built-in number formatter handles the simplest currency-shaped patterns out of the box; richer patterns need a [`stringifyCurrency`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifycurrency) callback. ### Default behavior With no `stringifyCurrency` configured, the built-in formatter handles simple `$`-prefixed formats — `"$0.00"`, `"$0"`, and `"$#.00"`: ```javascript const hf = HyperFormula.buildFromArray([ [1234.5, '=TEXT(A1, "$0.00")'], [1234.5, '=TEXT(A2, "$#.00")'], ]); console.log(hf.getCellValue({ sheet: 0, col: 1, row: 0 })); // "$1234.50" console.log(hf.getCellValue({ sheet: 0, col: 1, row: 1 })); // "$1234.50" ``` A non-`$` symbol used purely as a suffix (no thousands grouping, no decimal-comma) also passes through unchanged: ```javascript const hf = HyperFormula.buildFromArray([[1234.5, '=TEXT(A1, "0.00 zł")']]); console.log(hf.getCellValue({ sheet: 0, col: 1, row: 0 })); // "1234.50 zł" ``` Configure `stringifyCurrency` when your formula corpus needs more advanced currency formats. E.g.: - thousands grouping (`"$#,##0.00"`), - non-`$` symbols with grouping (`"[$€-2] #,##0.00"`, `"[$zł-415] #,##0.00"`), - locale-specific decimal separators (e.g. the Polish `"1234,50 zł"` pattern — the built-in formatter always emits `.` as the decimal), - accounting two-section formats (`"$#,##0.00;($#,##0.00)"`). ### Custom currency formatting The callback contract: ```ts stringifyCurrency: (value: number, currencyFormat: string) => string | undefined ``` The function receives the raw number and the format string passed to `TEXT`. Return a formatted string to override the built-in formatter, or `undefined` to fall through to it. #### Minimal example ```javascript // Recognize "$..."-prefixed formats and ignore the rest: const stringifyCurrency = (value, fmt) => fmt.startsWith('$') ? `$${value.toFixed(2)}` : undefined; const hf = HyperFormula.buildFromArray([ [1234.5, '=TEXT(A1, "$#,##0.00")'], ], { stringifyCurrency }); console.log(hf.getCellValue({ sheet: 0, col: 1, row: 0 })); // "$1234.50" ``` This callback handles `$`-prefixed formats and falls through (returns `undefined`) for everything else. For any format the callback opts out of, HyperFormula proceeds to the next handler in the dispatch chain: the default date / duration formatters, then the built-in number formatter, and finally the raw format string if nothing matched. #### Reference table Side-by-side comparison of the default formatter and the docs adapter from the section below: | Format | Without callback | With adapter callback (section below) | |---|---|---| | `"$0.00"` | `"$1234.50"` | `"$1234.50"` | | `"$#.00"` | `"$1234.50"` | `"$1234.50"` | | `"$#,##0.00"` | `"$1235,##0.00"` (no grouping) | `"$1,234.50"` | | `"[$€-2] #,##0.00"` | `"[$€-2] 1235,##0.00"` (no grouping) | `"1.234,50 €"` | | `"$#,##0.00;($#,##0.00)"` (value `-1234.5`) | `"$-1235,##0.00;($#,##0.00)"` (no grouping) | `"($1,234.50)"` | #### Error behavior If your callback throws, HyperFormula propagates the exception. Wrap your formatter in `try/catch` if it can fail, and return `undefined` as the opt-out signal for unsupported formats — throwing is reserved for unexpected errors. #### Example: `Intl.NumberFormat` adapter (zero dependencies) This adapter handles a representative subset of popular currency format strings using native [`Intl.NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat). Extend the `LCID_TO_LOCALE` map to cover more locales — see the [MS-LCID](https://learn.microsoft.com/openspecs/windows_protocols/ms-lcid) specification for canonical identifiers. ```javascript // Extend the LCID_TO_LOCALE map and CURRENCY_RULES list to cover more formats. const LCID_TO_LOCALE = { '-409': { locale: 'en-US', currency: 'USD' }, // USD '-2': { locale: 'de-DE', currency: 'EUR' }, // EUR (generic) '-411': { locale: 'ja-JP', currency: 'JPY' }, // JPY '-415': { locale: 'pl-PL', currency: 'PLN' }, // PLN '-809': { locale: 'en-GB', currency: 'GBP' }, // GBP } const CURRENCY_RULES = [ // [$SYMBOL-LCID] #,##0[.00] — locale-tagged currency format. // SYMBOL portion requires at least one character (`+`, not `*`) so that // locale-only modifiers like `[$-409]` (used on date/time formats) are // NOT misclassified as currency by this adapter. { pattern: /^\[\$([^\-\]]+)-([0-9A-Fa-f]+)\]\s*#,##0(\.0+)?$/, build: (match) => { const lcid = '-' + match[2] const fractionDigits = (match[3] || '.').length - 1 const entry = LCID_TO_LOCALE[lcid] || { locale: 'en-US', currency: 'USD' } return new Intl.NumberFormat(entry.locale, { style: 'currency', currency: entry.currency, minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits, }) }, }, // $#,##0.00 — USD shorthand { pattern: /^\$#,##0(\.0+)?$/, build: (match) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: (match[1] || '.').length - 1, maximumFractionDigits: (match[1] || '.').length - 1, }), }, ] // Accounting: $#,##0.00;($#,##0.00) — positive;negative with parentheses. // Note: when both sections are plain (e.g. `$#,##0.00;$#,##0.00`), the adapter // honors the negative section AS-IS without auto-prepending `-` — the // format author explicitly opted out of automatic sign. function tryAccountingFormat(value, format) { const sections = format.split(';') if (sections.length !== 2) return undefined const isNegative = value < 0 const section = sections[isNegative ? 1 : 0] const parenMatch = /^\(\$#,##0(\.0+)?\)$/.exec(section) const plainMatch = /^\$#,##0(\.0+)?$/.exec(section) if (!parenMatch && !plainMatch) return undefined const fractionDigits = ((parenMatch || plainMatch)[1] || '.').length - 1 const nf = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits, }) const formatted = nf.format(Math.abs(value)) return isNegative && parenMatch ? `(${formatted})` : formatted } export const customStringifyCurrency = (value, currencyFormat) => { if (typeof currencyFormat !== 'string') return undefined const accounting = tryAccountingFormat(value, currencyFormat) if (accounting !== undefined) return accounting for (const rule of CURRENCY_RULES) { const match = rule.pattern.exec(currencyFormat) if (match) return rule.build(match).format(value) } // Not a recognized currency format — let HyperFormula fall through // to the built-in number formatter. return undefined } ``` #### Limitations of the reference adapter - **It uses each currency's CLDR locale conventions, not your HyperFormula config.** Output is produced by `Intl.NumberFormat`, so the thousands grouping and decimal separator come from the currency's locale (e.g. `pl-PL` → `1 234,50 zł`, `de-DE` → `1.234,50 €`). The adapter does **not** read HyperFormula's [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) / [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) config. - **It recognizes only a representative subset of format shapes.** It handles LCID-tagged formats (`[$SYM-LCID] #,##0.00`), `$`-shorthand (`$#,##0.00`), and simple two-section accounting (`$#,##0.00;($#,##0.00)`). For any other shape it returns `undefined`, so HyperFormula falls through to its built-in number formatter — which cannot expand `#,##0` thousands grouping nor interpret multi-section `;` formats, producing incorrect output for those patterns. If you need more complex currency formatting such as: - Arbitrary Excel-style format strings, - Precision-safe arithmetic on currency values (e.g. cents as integers), - ISO 4217 currency metadata for dozens of currencies, consider wrapping a specialized currency formatter library such as [`Dinero.js` v2](https://v2.dinerojs.com/) inside the callback. The contract is the same: `(value: number, currencyFormat: string) => string | undefined`. Return `undefined` for any format string you don't want to handle and HyperFormula will fall back to its built-in number formatter. #### What is an LCID tag? [Microsoft Locale Identifier](https://learn.microsoft.com/openspecs/windows_protocols/ms-lcid) (LCID) adds locale context to a currency format. The syntax is `[$SYMBOL-LCID]` followed by the number template — for example `[$zł-415] #,##0.00` means *"Polish złoty, hex LCID `415` = `pl-PL`"*, and `[$€-2] #,##0.00` means *"euro, generic"*. The adapter above parses the LCID to pick the matching `Intl.NumberFormat` locale and ISO 4217 currency code. ## Related configuration - [`stringifyDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime) / [`stringifyDuration`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifyduration) — sister callbacks for date and duration formatting. Combine with `stringifyCurrency` when your formulas mix date/time and currency formats. --- ## Custom functions URL: https://hyperformula.handsontable.com/docs/guide/custom-functions # Custom functions Expand the function library of your application by adding custom functions. **Contents:** ## Add a simple custom function As an example, let's create a custom function `GREET` that accepts a person's first name as a string argument and returns a personalized greeting. ### 1. Create a function plugin Import `FunctionPlugin`, and extend it with a new class. For example: ```js import { FunctionPlugin } from 'hyperformula'; // let's call the function plugin `MyCustomPlugin` export class MyCustomPlugin extends FunctionPlugin {} ``` ### 2. Define your function's ID, method, and metadata In your function plugin, in the static `implementedFunctions` property, define an object that declares the functions provided by this plugin. The name of that object becomes the ID by which [translations](#function-name-translations), [aliases](#function-aliases), and other elements reference your function. Make the ID unique among all HyperFormula functions ([built-in](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#list-of-available-functions) and custom). In your function's object, you can specify: - A `method` property (required), which maps your function to the implementation method (we'll define it later on), - A `parameters` array that describes the arguments accepted by your function and [validation options](#argument-validation-options) for each argument, - Other [custom function options](#function-options). ```js import { FunctionPlugin, FunctionArgumentType } from 'hyperformula'; MyCustomPlugin.implementedFunctions = { // let's define the function's ID as `GREET` GREET: { method: 'greet', parameters: [{ argumentType: FunctionArgumentType.STRING }], }, }; ``` > To define multiple functions in a single function plugin, add them all > to the `implementedFunctions` object. > > ```js > MyCustomPlugin.implementedFunctions = { > FUNCTION_A: { > //... > }, > FUNCTION_B: { > //... > }, > }; > ``` ### 3. Add your function's names In a separate object, define your function's names in every [language](#function-name-translations) that you want to support. > Even if you support just a single language, you still need to define a translation for it. ```js export const MyCustomPluginTranslations = { enGB: { GREET: 'GREET', }, enUS: { GREET: 'GREET', }, // repeat for all languages used in your system }; ``` ### 4. Implement your function's logic In your function plugin, add a method that implements your function's calculations. Your method needs to: - Take two optional arguments: `ast` and `state`. - Return the results of your calculations. Wrap your implementation in the built-in `runFunction()` method, which: - Evaluates the arguments of your custom function. - Validates the number of arguments against the [`parameters` array](#function-options). - Coerces the argument values to types set in the [`parameters` array](#argument-validation-options). - Handles optional arguments and default values according to options set in the [`parameters` array](#argument-validation-options). - Validates the arguments of your custom function against the [argument validation options](#argument-validation-options). - Duplicates the arguments according to the [`repeatLastArgs` option](#function-options). - Handles the [array arithmetic mode](https://hyperformula.handsontable.com/docs/guide/arrays.md#array-arithmetic-mode). - Performs [function vectorization](https://hyperformula.handsontable.com/docs/guide/arrays.md#passing-arrays-to-scalar-functions-vectorization). - Performs [argument broadcasting](https://hyperformula.handsontable.com/docs/guide/arrays.md#broadcasting). ```js export class MyCustomPlugin extends FunctionPlugin { greet(ast, state) { return this.runFunction( ast.args, state, this.metadata('GREET'), (firstName) => { return `👋 Hello, ${firstName}!`; } ); } } ``` ### 5. Register your function plugin Register your function plugin and its translations so that HyperFormula can recognize it. You need to do this **before** you create your HyperFormula instance. Use the [`registerFunctionPlugin()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#registerfunctionplugin) method: ```js HyperFormula.registerFunctionPlugin(MyCustomPlugin, MyCustomPluginTranslations); ``` ### 6. Use your custom function in a formula Now, you're ready to use your GREET function in a formula. ```js // build a HyperFormula instance where you can use your function directly const hfInstance = HyperFormula.buildFromArray([['Anthony', '=GREET(A1)']]); // read the value of cell B1 const result = hfInstance.getCellValue({ sheet: 0, col: 1, row: 0 }); // cell B1 should evaluate to 'Anthony' console.log(result); ``` ### Full example The complete implementation of this custom function is also included in the [demo](#working-demo). ```js import { FunctionPlugin, FunctionArgumentType } from 'hyperformula'; export class MyCustomPlugin extends FunctionPlugin { greet(ast, state) { return this.runFunction( ast.args, state, this.metadata('GREET'), (firstName) => { return `👋 Hello, ${firstName}!`; } ); } } MyCustomPlugin.implementedFunctions = { GREET: { method: 'greet', parameters: [{ argumentType: FunctionArgumentType.STRING }], }, }; export const MyCustomPluginTranslations = { enGB: { GREET: 'GREET', }, enUS: { GREET: 'GREET', }, }; HyperFormula.registerFunctionPlugin(MyCustomPlugin, MyCustomPluginTranslations); ``` ## Advanced custom function example In a more advanced example, we'll create a custom function `DOUBLE_RANGE` that takes a range of numbers and returns the range of the same size with all the numbers doubled. ### Accept a range argument To accept a range argument, declare it in the `parameters` array: ```js MyCustomPlugin.implementedFunctions = { DOUBLE_RANGE: { method: 'doubleRange', parameters: [{ argumentType: FunctionArgumentType.RANGE }], }, }; ``` The range arguments are passed to the implementation method as instances of the [`SimpleRangeValue` class](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md): ```js export class MyCustomPlugin extends FunctionPlugin { doubleRange(ast, state) { return this.runFunction( ast.args, state, this.metadata('DOUBLE_RANGE'), (range) => { const rangeData = range.data; // ... } ); } } ``` ### Return an array of data A function can return multiple values in the form of an [array](https://hyperformula.handsontable.com/docs/guide/arrays.md). To do that, use [`SimpleRangeValue` class](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md): ```js export class MyCustomPlugin extends FunctionPlugin { doubleRange(ast, state) { return this.runFunction( ast.args, state, this.metadata('DOUBLE_RANGE'), (range) => { const resultArray = //... return SimpleRangeValue.onlyValues(resultArray); }, ); } } ``` A function that returns an array will cause the `VALUE!` error unless you also declare a companion method for the array size. To do that, provide the `sizeOfResultArrayMethod` that calculates the size of the result array based on the function arguments and returns an instance of the [`ArraySize` class](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md). > When you use your custom function in a formula, `sizeOfResultArrayMethod` is triggered every time the formula changes, but not when the dependencies of the formula change. > This can cause unexpected behavior if the size of the result array depends on the values in the referenced cells. ```js export class MyCustomPlugin extends FunctionPlugin { doubleRangeResultArraySize(ast, state) { const arg = ast?.args?.[0]; if (arg?.start == null || arg?.end == null) { return ArraySize.scalar(); } const width = arg.end.col - arg.start.col + 1; const height = arg.end.row - arg.start.row + 1; return new ArraySize(width, height); } } MyCustomPlugin.implementedFunctions = { DOUBLE_RANGE: { method: 'doubleRange', sizeOfResultArrayMethod: 'doubleRangeResultArraySize', parameters: [{ argumentType: FunctionArgumentType.RANGE }], }, }; ``` ### Validate the arguments and return an error To handle invalid inputs, the custom function should return an instance of the [`CellError` class](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md) with the relevant [error type](https://hyperformula.handsontable.com/docs/guide/types-of-errors.md). Errors are localized according to your [language settings](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). ```js if (rangeData.some((row) => row.some((val) => typeof rawValue !== 'number'))) { return new CellError( 'VALUE', 'Function DOUBLE_RANGE operates only on numbers.' ); } ``` > All HyperFormula [error types](https://hyperformula.handsontable.com/docs/guide/types-of-errors.md) support optional > custom error messages. Put them to good use: let your users know what caused the > error and how to avoid it in the future. ### Test your function To make sure your function works correctly, add unit tests. Use a JavaScript testing library of your choice. ```js it('works for a range of numbers', () => { HyperFormula.registerFunctionPlugin( MyCustomPlugin, MyCustomPluginTranslations ); const engine = HyperFormula.buildFromArray( [[1, '=DOUBLE_RANGE(A1:A3)'], [2], [3]], { licenseKey: 'gpl-v3' } ); expect(engine.getCellValue({ sheet: 0, row: 0, col: 1 })).toEqual(2); expect(engine.getCellValue({ sheet: 0, row: 1, col: 1 })).toEqual(4); expect(engine.getCellValue({ sheet: 0, row: 2, col: 1 })).toEqual(6); }); it('returns a VALUE error if the range argument contains a string', () => { HyperFormula.registerFunctionPlugin( MyCustomPlugin, MyCustomPluginTranslations ); const engine = HyperFormula.buildFromArray( [[1, '=DOUBLE_RANGE(A1:A3)'], ['I should not be here'], [3]], { licenseKey: 'gpl-v3' } ); expect(engine.getCellValueType({ sheet: 0, row: 0, col: 1 })).toEqual( 'ERROR' ); expect(engine.getCellValue({ sheet: 0, row: 0, col: 1 }).value).toEqual( '#VALUE!' ); }); ``` ## Working demo Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/custom-functions?v=). This demo contains the implementation of both the [`GREET`](#add-a-simple-custom-function) and [`DOUBLE_RANGE`](#advanced-custom-function-example) custom functions. ## Function options You can set the following options for your function: | Option | Type | Description | |-------------------------------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `method` (required) | String | Name of the method that implements the custom function logic. | | `parameters` | Array | Specification of the arguments accepted by the function and their [validation options](#argument-validation-options). | | `sizeOfResultArrayMethod` | String | Name of the method that calculates the size of the result array. Not required for functions that never return an array. | | `returnNumberType` | String | If the function returns a numeric value, this option indicates how to interpret the returned number.
Possible values: `NUMBER_RAW, NUMBER_DATE, NUMBER_TIME, NUMBER_DATETIME, NUMBER_CURRENCY, NUMBER_PERCENT`.
Default: `NUMBER_RAW` | | `repeatLastArgs` | Number | For functions with a variable number of arguments: sets how many last arguments can be repeated indefinitely. Must be a positive integer no larger than the number of `parameters`. A value that is not a positive integer (`0`, a negative number, a fraction, `NaN`, or `Infinity`) is ignored, and the function keeps a fixed number of arguments. A value larger than the number of `parameters` is not supported and must not be used: the function then accepts an erratic set of argument counts instead of a repeating one (with one parameter and `repeatLastArgs: 5`, calls with 1, 2, 4, or 5 arguments are accepted, while 3 and 8 return `#N/A!`).
Default: `0` | | `expandRanges` | Boolean | `true`: ranges in the function's arguments are inlined to (possibly multiple) scalar arguments.
Default: `false` | | `isVolatile` | Boolean | `true`: the function is [volatile](https://hyperformula.handsontable.com/docs/guide/volatile-functions.md).
Default: `false` | | `isDependentOnSheetStructureChange` | Boolean | `true`: the function gets recalculated with each sheet shape change (e.g., when adding/removing rows or columns).
Default: `false` | | `doesNotNeedArgumentsToBeComputed` | Boolean | `true`: the function treats reference or range arguments as arguments that don't create dependency (other arguments are properly evaluated).
Default: `false` | | `enableArrayArithmeticForArguments` | Boolean | `true`: the function enables the [array arithmetic mode](https://hyperformula.handsontable.com/docs/guide/arrays.md) in its arguments and nested expressions.
Default: `false` | | `vectorizationForbidden` | Boolean | `true`: the function will never get [vectorized](https://hyperformula.handsontable.com/docs/guide/arrays.md#passing-arrays-to-scalar-functions-vectorization).
Default: `false` | | `arraySizeMethod` | String | Deprecated; Use `sizeOfResultArrayMethod` instead. | | `arrayFunction` | Boolean | Deprecated; Use `enableArrayArithmeticForArguments` instead. | You can set the options in the static `implementedFunctions` property of your function plugin: ```javascript MyCustomPlugin.implementedFunctions = { MY_FUNCTION: { method: 'myFunctionMethod', parameters: [ { // your argument validation options }, ], sizeOfResultArrayMethod: 'myArraySizeMethod', returnNumberType: 'NUMBER_RAW', repeatLastArgs: 0, expandRanges: false, isVolatile: false, isDependentOnSheetStructureChange: false, doesNotNeedArgumentsToBeComputed: false, enableArrayArithmeticForArguments: false, vectorizationForbidden: false, }, }; ``` ### Argument validation options You can set the following argument validation options: | Option | Type | Description | |---------------------------|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `argumentType` (required) | `FunctionArgumentType` | Expected type of the function argument. See [possible values](#types-of-the-function-argument). | | `defaultValue` | `InternalScalarValue` or `RawScalarValue` | If set: if an argument is missing, its value defaults to `defaultValue`. | | `passSubtype` | Boolean | `true`: arguments are passed with full type information (e.g., for numbers: `Date` or `DateTime` or `Time` or `Currency` or `Percentage`).
Default: `false` | | `optionalArg` | Boolean | `true`: if an argument is missing, and no `defaultValue` is set, the argument defaults to `undefined` (instead of throwing an error).
Default: `false`
Setting this option to `true` is the same as setting `defaultValue` to `undefined`. | | `minValue` | Number | If set: numerical arguments need to be greater than or equal to `minValue`. | | `maxValue` | Number | If set: numerical arguments need to be less than or equal to `maxValue`. | | `lessThan` | Number | If set: numerical argument needs to be less than `lessThan`. | | `greaterThan` | Number | If set: numerical argument needs to be greater than `greaterThan`. | | `emptyAsDefault` | Boolean | `true`: an empty argument (e.g., `=FUNC(1,,3)`) is treated as missing and falls back to `defaultValue`. By default (`false`), empty arguments are coerced to the zero-value for their type (`0`, `FALSE`, or `""`). Requires `defaultValue` to be set. | In your function plugin, in the static `implementedFunctions` property, add an array called `parameters`: ```js MyCustomPlugin.implementedFunctions = { MY_FUNCTION: { method: 'myFunctionMethod', parameters: [ { argumentType: FunctionArgumentType.STRING, defaultValue: 10, passSubtype: false, optionalArg: false, minValue: 5, maxValue: 15, lessThan: 15, greaterThan: 5, }, ], }, }; ``` ### Types of the function argument | Type | Description | Example | |-----------|----------------------------------------------------------------------------------------------------------|----------------------------------------------| | `NUMBER` | A general numeric value such as floating-point number, date/time value, currency value or percent value. | `3`, `3.14`, `$100`, `1939/09/01`, `4:45 AM` | | `INTEGER` | An integer. | `42` | | `COMPLEX` | A text representing a complex value. | `"-3+4i"` | | `STRING` | A text value. | `"aaa"` | | `BOOLEAN` | A logical value. | `=TRUE()` | | `NOERROR` | Any non-range and non-error value. | All of the above | | `SCALAR` | Any non-range value. | All of the above | | `RANGE` | Multiple values as a range of cells or an inline array. | `A1:B100`, `{1, 2}` | | `ANY` | Any value. | All of the above | ### Handling missing arguments Both the `defaultValue` and `optionalArg` options let you decide what happens when a user doesn't pass enough valid arguments to your custom function. Setting a `defaultValue` for an argument always makes that argument optional. But, the `defaultValue` option automatically replaces any missing arguments with `defaultValue`, so your custom function is unaware of the actual number of valid arguments passed. If you don't want to set any `defaultValue` (because, for example, your function's behavior depends on the number of valid arguments passed), use the `optionalArg` setting instead. ## Function name translations You can add translations of your function's name in multiple languages. Your end users use the translated names to call your function inside formulas. In a separate object, define the translations of your custom functions' names in every language you want to support. Function names are case-insensitive, as they are all normalized to uppercase. > Even if you support just a single language, you still need to define a translation for it. ```js export const MyCustomPluginTranslations = { enGB: { // formula in English: `=MY_FUNCTION()` MY_FUNCTION: 'MY_FUNCTION', }, deDE: { // formula in German: `=MEINE_FUNKTION()` MY_FUNCTION: 'MEINE_FUNKTION', }, // repeat for all languages used in your system }; // register your function plugin and translations HyperFormula.registerFunctionPlugin(MyCustomPlugin, MyCustomPluginTranslations); ``` > Before using a translated function name, remember to > [register and set the language](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). ## Function aliases You can also assign multiple aliases to a single custom function. In your function plugin, in the static `aliases` property, add aliases for your function: ```js MyCustomPlugin.aliases = { // `=MY_ALIAS()` will work the same as `=MY_FUNCTION()` MY_ALIAS: 'MY_FUNCTION', }; ``` > For each alias of your function, define a translation, even if you want > to support only one language. > > ```js > MyCustomPlugin.translations = { > enGB: { > MY_FUNCTION: 'MY_FUNCTION', > MY_ALIAS: 'MY_ALIAS', > }, > }; > ``` --- ## Date and time handling URL: https://hyperformula.handsontable.com/docs/guide/date-and-time-handling # Date and time handling The formats for the default date and time parsing functions can be set using configuration options: - [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats), - [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats), - [`nullYear`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nullyear). The API reference of [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats) and [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats) describes the supported date and time formats in detail. ## Example By default, HyperFormula uses the European date and time formats. ```javascript dateFormats: ['DD/MM/YYYY', 'DD/MM/YY'], // set by default timeFormats: ['hh:mm', 'hh:mm:ss.sss'], // set by default ``` To use the US date and time formats, set: ```javascript dateFormats: ['MM/DD/YYYY', 'MM/DD/YY', 'YYYY/MM/DD'], // US date formats timeFormats: ['hh:mm', 'hh:mm:ss.sss'], // set by default ``` ## Custom date and time handling If date and time formats supported by the [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats) and [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats) parameters are not enough, you can extend them by providing the following options: - [`parseDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#parsedatetime), which allows to provide a function that accepts a string representing date/time and parses it into an actual date/time format - [`stringifyDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime), which allows to provide a function that takes the date/time and prints it as a string - [`stringifyDuration`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifyduration), which allows to provide a function that takes time duration and prints it as a string To extend the number of possible date formats, you will need to configure [`parseDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#parsedatetime) . This functionality is based on callbacks, and you can customize the formats by integrating a third-party library like [Moment.js](https://momentjs.com/), or by writing your own custom function that returns a [`DateTime`](https://hyperformula.handsontable.com/docs/api/globals.md#datetime) object. The configuration of date formats and stringify options may impact some built-in functions. For instance, the `VALUE` function transforms strings into numbers, which means it uses [`parseDateTime`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#parsedatetime). The `TEXT` function works the other way round - it accepts a number and returns a string, so it uses `stringifyDateTime`. Any change here might give you different results. Criteria-based functions (`SUMIF`, `AVERAGEIF`, etc.) perform comparisons, so they also need to work on strings, dates, etc. ## Moment.js integration In this example, you will add the possibility to parse dates in the `"Do MMM YY"` custom format. To do so, you first need to write a function using [Moment.js API](https://momentjs.com/docs/): ```javascript import moment from "moment"; // write a custom function for parsing dates export const customParseDate = (dateString, dateFormat) => { const momentDate = moment(dateString, dateFormat, true); // check validity of a date with moment.js method if (momentDate.isValid()) { return { year: momentDate.year(), month: momentDate.month() + 1, day: momentDate.date() }; } // if the string was not recognized as // a valid date return nothing return undefined; }; ``` Then, use it inside the [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) like so: ```javascript const options = { parseDateTime: customParseDate, // you can add more formats dateFormats: ["Do MMM YY"] }; ``` After that, you should be able to add a dataset with dates in your custom format: ```javascript const data = [["31st Jan 00", "2nd Jun 01", "=B1-A1"]]; ``` And now, HyperFormula recognizes these values as valid dates and can operate on them. For currency formatting in the `TEXT` function (locale-aware grouping, non-`$` symbols, accounting patterns), see the [Currency handling](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) guide. --- ## Demo URL: https://hyperformula.handsontable.com/docs/guide/demo # Demo In this demo, you can see how HyperFormula handles basic operations by using API methods, such as: * `buildEmpty` static method to initialize the instance * `addSheet` method to add a new sheet * `setCellContents` method to add content * `getSheetId` method to retrieve the sheet's ID * `getCellValue` method to get the value of a cell * `calculateFormula` method to calculate a formula * `getCellFormula` method to retrieve a formula from a cell --- ## Dependencies URL: https://hyperformula.handsontable.com/docs/guide/dependencies # Dependencies HyperFormula depends on a few external libraries, as listed below. These dependencies are used to support some of the library's core features. | Name | License | Author | |:------------------------------------------------------------|:----------------|:-----------------------------------| | [bessel](https://github.com/SheetJS/bessel) | Apache v2.0 | SheetJS | | [Chevrotain](https://github.com/SAP/chevrotain) | Apache v2.0 | SAP SE or an SAP affiliate company | | [core-js](https://github.com/zloirock/core-js) | The MIT License | Denis Pushkarev | | [jStat](https://github.com/jstat/jstat) | The MIT License | jStat | | [tiny-emitter](https://github.com/scottcorgan/tiny-emitter) | The MIT License | Scott Corgan | The _bessel_ and _jStat_ projects are distributed with the code repository at the path `src/interpreter/plugin/3rdparty` and bundled with the code package. We want to express gratitude and appreciation for all the hard work put into these awesome libraries by their authors and maintainers. --- ## Dependency graph URL: https://hyperformula.handsontable.com/docs/guide/dependency-graph # Dependency graph For accuracy and performance, HyperFormula needs to process cells in a correct and optimal order. For example: in formula `C1=A1+B1`, cells `A1` and `B1` need to be evaluated before `C1`. To find the right order of processing cells, HyperFormula builds a [dependency graph](https://en.wikipedia.org/wiki/Dependency_graph) which captures relationships between cells. ## Cells in the dependency graph In the dependency graph, each spreadsheet cell is represented by a separate node. Nodes `X` and `Y` are connected by a directed edge if and only if the formula in cell `X` includes the address of cell `Y`. ## Ranges in the dependency graph If formulas in the spreadsheet include ranges, each range is represented by a separate node. The dependency graph may also contain ranges that are not used by any formula, for better optimization. Range nodes can be connected to cell nodes and to other range nodes. ![](https://hyperformula.handsontable.com/docs/ranges.png) ### Optimizations for large ranges In many applications, you may want to use formulas that depend on a large range of cells. For example, the formula `SUM(A1:A100)+B5` depends on 101 cells, and it needs to be represented in the dependency graph accordingly. An interesting optimization challenge arises when there are multiple cells that depend on large ranges. For example, consider the following use-case: * `B1=SUM(A1:A1)` * `B2=SUM(A1:A2)` * `B3=SUM(A1:A3)` * ... * `B100=SUM(A1:A100)` The problem is that there are `1+2+3+...+100 = 5050` dependencies for such a simple situation. In general, for `n` such rows, the engine would need to add `n*(n+1)/2 ≈ n²` arcs in the graph. This value grows much faster than the size of data, meaning the engine would not be able to handle large data sets efficiently. A solution to this problem comes from the observation that there is a way to rewrite the above formulas to equivalent ones, which will be more compact to represent. Specifically, the following formulas would compute the same values as the ones provided previously: * `B1=A1` * `B2=B1+A2` * `B3=B2+A3` * ... * `B100=B99+A100` Whereas this example is too specialized to provide a useful rule for optimization, it shows the main idea behind efficient handling of multiple ranges: **to represent a range as a composition of smaller ranges.** In the adopted implementation, every time the engine encounters a range, say `B5:D20`, it checks if it has already considered the range which is one row shorter. In this example, it would be `B5:D19`. If so, then it represents `B5:D20` as the composition of a range `B5:D19` and three cells in the last row: `B20`,`C20` and `D20`. ![](https://hyperformula.handsontable.com/docs/ranges.png) More generally, the result of any associative operation is obtained as the result of operations for these small rows. There are many examples of such associative functions: `SUM`, `MAX`, `COUNT`, etc. As one range can be used in different formulas, we can reuse its node and avoid duplicating the work during computation. ## Getting the immediate precedents of a cell or a range To get the immediate precedents of a cell or a range (the in-neighbors of the cell node or the range node), use the [`getCellPrecedents()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#getcellprecedents) method: ```js const hfInstance = HyperFormula.buildFromArray([[ '1', '2', '=A1', '=B1+C1' ]]); hfInstance.getCellPrecedents({ sheet: 0, col: 3, row: 0 }); // returns [{ sheet: 0, col: 1, row: 0 }, { sheet: 0, col: 2, row: 0 }] ``` ## Getting the immediate dependents of a cell or a range To get the immediate dependents of a cell or a range (the out-neighbors of the cell node or the range node), use the [`getCellDependents()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#getcelldependents) method: ```js const hfInstance = HyperFormula.buildFromArray([[ '1', '=A1', '=A1+B1', '=B1+C1' ]]) hfInstance.getCellDependents({ sheet: 0, col: 0, row: 0 }) // returns [{ sheet: 0, col: 1, row: 0 }, { sheet: 0, col: 2, row: 0 }] ``` ## Getting all precedents of a cell or a range To get all precedents of a cell or a range (all precedent nodes reachable from the cell node or the range node), use the [`getCellPrecedents()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#getcellprecedents) method to implement a [Breadth-first search (BFS)](https://en.wikipedia.org/wiki/Breadth-first_search) algorithm:
    
      AllCellPrecedents={start}
      let Q be an empty queue
      Q.enqueue(start)
      while Q is not empty do
        cell := Q.dequeue()
        S := getCellPrecedents(cell)
        for all cells c in S do:
          if c is not in AllCellPrecedents then:
            insert w to AllCellPrecedents
            Q.enqueue(c)
    
  
## Getting all dependents of a cell or a range To get all dependents of a cell or a range (all dependent nodes reachable from the cell node or the range node), use the [`getCellDependents()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.html#getcelldependents) method to implement a [Breadth-first search (BFS)](https://en.wikipedia.org/wiki/Breadth-first_search) algorithm:
    
      AllCellDependents={start}
      let Q be an empty queue
      Q.enqueue(start)
      while Q is not empty do
        cell := Q.dequeue()
        S := getCellDependents(cell)
        for all cells c in S do:
          if c is not in AllCellDependents then:
            insert w to AllCellDependents
            Q.enqueue(c)
    
  
--- ## File import URL: https://hyperformula.handsontable.com/docs/guide/file-import # File import Import XLSX and CSV files into HyperFormula. ## Overview HyperFormula has no built-in file import functionality. But its [factory methods](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#factories) use standard JavaScript data types, for easy integration with any way of importing data. ## Import CSV files To import CSV files, use a third-party [CSV parser](https://www.npmjs.com/search?q=csv) (e.g., [PapaParse](https://www.npmjs.com/package/papaparse) or [csv-parse](https://www.npmjs.com/package/csv-parse)). Then pass the result to HyperFormula as a JavaScript array. ## Import XLSX files To import XLSX files, use a third-party [XLSX parser](https://www.npmjs.com/search?q=xlsx) (e.g., [ExcelJS](https://www.npmjs.com/package/exceljs) or [xlsx](https://www.npmjs.com/package/xlsx)). Then pass the result to HyperFormula as a JavaScript array. ### Example: Import XLSX files in Node This example uses [ExcelJS](https://www.npmjs.com/package/exceljs) to import XLSX files into HyperFormula. See full example on [GitHub](https://github.com/handsontable/hyperformula-demos/tree/3.4.x/read-excel-file). ```js const ExcelJS = require('exceljs'); const { HyperFormula } = require('hyperformula'); async function run(filename) { const xlsxWorkbook = await readXlsxWorkbookFromFile(filename); const sheetsAsJavascriptArrays = convertXlsxWorkbookToJavascriptArrays(xlsxWorkbook) const hf = HyperFormula.buildFromSheets(sheetsAsJavascriptArrays, { licenseKey: 'gpl-v3' }); console.log('Formulas:', hf.getSheetSerialized(0)); console.log('Values: ', hf.getSheetValues(0)); } async function readXlsxWorkbookFromFile(filename) { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(filename); return workbook; } function convertXlsxWorkbookToJavascriptArrays(workbook) { const workbookData = {}; workbook.eachSheet((worksheet) => { const sheetDimensions = worksheet.dimensions const sheetData = []; for (let rowNum = sheetDimensions.top; rowNum <= sheetDimensions.bottom; rowNum++) { const rowData = []; for (let colNum = sheetDimensions.left; colNum <= sheetDimensions.right; colNum++) { const cell = worksheet.getCell(rowNum, colNum) const cellData = cell.formula ? `=${cell.formula}` : cell.value; rowData.push(cellData); } sheetData.push(rowData); } workbookData[worksheet.name] = sheetData; }) return workbookData; } run('sample_file.xlsx'); ``` --- ## Internationalization features URL: https://hyperformula.handsontable.com/docs/guide/i18n-features # Internationalization features Configure HyperFormula to match the languages and regions of your users. **Contents:** ## Function names and errors Each of HyperFormula's [built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) and [errors](https://hyperformula.handsontable.com/docs/guide/types-of-errors.md) is available in [18 languages](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md#list-of-supported-languages). You can easily [switch between languages](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md) ([`language`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#language)). When adding a [custom function](https://hyperformula.handsontable.com/docs/guide/custom-functions.md), you can define the function's [name](https://hyperformula.handsontable.com/docs/guide/custom-functions.md#_3-add-your-function-s-names) in every language that you support. To support more languages, add a [custom language pack](https://hyperformula.handsontable.com/docs/guide/localizing-functions.md). ## Date and time formats To match a region's calendar conventions, you can set multiple date formats ([`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats)) and time formats ([`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats)). By default, HyperFormula uses the European date and time formats. [You can easily change them](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md#example). You can also add custom ways of [handling dates and times](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md#custom-date-and-time-handling). ## Number format To match a region's number format, configure HyperFormula's decimal separator ([`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator)) and thousands separator ([`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator)). By default, HyperFormula uses the European number format (`1000000.00`): ```js decimalSeparator: '.', // set by default thousandSeparator: '', // set by default ``` To use the US number format (`1,000,000.00`), set: ```js decimalSeparator: '.', // set by default thousandSeparator: ',', ``` > In HyperFormula, both [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) and [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) must be different from [`functionArgSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator). > In some cases it might cause compatibility issues with other spreadsheets, e.g., [Microsoft Excel](https://hyperformula.handsontable.com/docs/guide/compatibility-with-microsoft-excel.md#separators) or [Google Sheets](https://hyperformula.handsontable.com/docs/guide/compatibility-with-google-sheets.md#separators). ## Currency symbol To match your users' currency, configure recognized currency symbols and (optionally) custom `TEXT` output formatting. Both sides are covered in the dedicated [Currency handling](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) guide. ## String comparison rules To make sure that language-sensitive strings are compared in line with your users' language (e.g., `Préservation` vs. `Preservation`), set HyperFormula's [string comparison rules](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings) ([`localeLang`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#localelang)). The value of [`localeLang`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#localelang) is processed by [`Intl.Collator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator), a JavaScript standard object. The default setting is: ```js localeLang: 'en', // set by default ``` To set the `en-US` string comparison rules, set: ```js localeLang: 'en-US', ``` To further customize string comparison rules, use these options: - [`caseSensitive`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#casesensitive) - [`accentSensitive`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#accentsensitive) - [`caseFirst`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#casefirst) - [`ignorePunctuation`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#ignorepunctuation) ## Compatibility with other spreadsheet software For information on compatibility with locale-dependent syntax in other spreadsheet software, see: - [Compatibility with Microsoft Excel](https://hyperformula.handsontable.com/docs/guide/compatibility-with-microsoft-excel.md) - [Compatibility with Google Sheets](https://hyperformula.handsontable.com/docs/guide/compatibility-with-google-sheets.md) ## `en-US` configuration This configuration aligns HyperFormula with the `en-US` locale. Due to the configuration of [separators](#number-format), it might not be fully compatible with formulas coming from other spreadsheet software. ```js language: 'enUS', dateFormats: ['MM/DD/YYYY', 'MM/DD/YY', 'YYYY/MM/DD'], timeFormats: ['hh:mm', 'hh:mm:ss.sss'], // set by default decimalSeparator: '.', // set by default thousandSeparator: ',', functionArgSeparator: ';', // might cause incompatibility with other spreadsheets currencySymbol: ['$', 'USD'], localeLang: 'en-US', ``` ## `en-US` demo This demo shows HyperFormula configured for the `en-US` locale. --- ## Integration with React URL: https://hyperformula.handsontable.com/docs/guide/integration-with-react # Integration with React The HyperFormula API is identical in a React app and in plain JavaScript. This guide demonstrates how HyperFormula is integrated with the React component tree and how its lifecycle maps to React hooks. Install with `npm install hyperformula`. For other options, see the [client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) section. > **TypeScript** > > All examples use TypeScript. Remove the type annotations to use plain JavaScript. ## Basic usage Hold the HyperFormula instance in a `useRef` so it survives re-renders. Initialize it inside `useEffect` and release it in the cleanup function. Use `useState` to toggle between raw formulas and computed values. ```tsx import { useEffect, useRef, useState } from 'react'; import { HyperFormula } from 'hyperformula'; import type { CellValue } from 'hyperformula'; export default function SpreadsheetComponent() { const hfRef = useRef(null); const [values, setValues] = useState([]); useEffect(() => { const hf = HyperFormula.buildFromArray( [ [1, 2, '=A1+B1'], // your data rows go here ], { licenseKey: 'gpl-v3', // more configuration options go here } ); hfRef.current = hf; return () => { hf.destroy(); hfRef.current = null; }; }, []); function runCalculations() { if (!hfRef.current) return; setValues(hfRef.current.getSheetValues(0)); } function reset() { setValues([]); } return ( <> {values.length > 0 && ( {values.map((row, r) => ( {row.map((cell, c) => ( ))} ))}
{String(cell ?? '')}
)} ); } ``` ## `React.StrictMode` double invocation In development, React runs effects twice (mount → unmount → mount) to surface cleanup bugs. The pattern above is correct for StrictMode because `destroy()` runs before the re-mount creates a new instance, so no work leaks between the two lifecycles. Do not switch to a module-scoped singleton as a workaround — it will break StrictMode semantics. ## Server-side rendering (Next.js App Router) The component above is already SSR-safe — the engine is constructed in `useEffect`, which never runs on the server. If you still want to keep HyperFormula out of the initial JS bundle sent to the browser (it is a few hundred kB), wrap it in a client-only dynamic import. In the App Router, `dynamic(..., { ssr: false })` is only allowed inside a client component. Put the dynamic call in a `'use client'` wrapper and import the wrapper from your server page: ```tsx // app/spreadsheet/SpreadsheetLazy.tsx 'use client'; import dynamic from 'next/dynamic'; const SpreadsheetComponent = dynamic( () => import('./SpreadsheetComponent'), { ssr: false } ); export default function SpreadsheetLazy() { return ; } ``` ```tsx // app/spreadsheet/page.tsx ← server component, no 'use client' import SpreadsheetLazy from './SpreadsheetLazy'; export default function Page() { return ; } ``` In the Pages Router, the same `dynamic(..., { ssr: false })` call works directly in the page file without a wrapper. ## Next steps - [Configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) — full list of `buildFromArray` / `buildEmpty` options - [Basic operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) — CRUD on cells, rows, columns, sheets - [Advanced usage](https://hyperformula.handsontable.com/docs/guide/advanced-usage.md) — multi-sheet workbooks, named expressions - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) — register your own formulas ## Demo For a more advanced example, check out the [React demo on Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/react-demo?v=). --- ## Integration with Angular URL: https://hyperformula.handsontable.com/docs/guide/integration-with-angular # Integration with Angular The HyperFormula API is identical in an Angular app and in plain JavaScript. This guide demonstrates how HyperFormula is integrated with an Angular app (typically as an injectable service), how it is cleaned up, and how you bridge its values into the change-detection cycle. Install with `npm install hyperformula`. For other options, see the [client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) section. ## Basic usage (modern Angular) For modern Angular (v20+) we recommend a service that exposes a **signal**, **standalone** components, the new control flow (`@if` / `@for`) and **zoneless** change detection. Wrap the engine in an `@Injectable` service and expose its values as a read-only signal; the template reads the signal directly and Angular refreshes the view whenever it changes. ```typescript // spreadsheet.service.ts import { Injectable, signal } from '@angular/core'; import { HyperFormula, type CellValue } from 'hyperformula'; @Injectable({ providedIn: 'root' }) export class SpreadsheetService { private readonly hf: HyperFormula; private readonly _values = signal([]); readonly values = this._values.asReadonly(); constructor() { this.hf = HyperFormula.buildFromArray( [ [1, 4, '=A1+B1'], // your data rows go here ], { licenseKey: 'gpl-v3', // more configuration options go here } ); this._values.set(this.hf.getSheetValues(0)); } calculate() { this._values.set(this.hf.getSheetValues(0)); } reset() { this._values.set([]); } } ``` Inject the service with `inject()`, expose its signal, and use `OnPush` change detection: ```typescript // spreadsheet.component.ts import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { SpreadsheetService } from './spreadsheet.service'; @Component({ selector: 'app-spreadsheet', templateUrl: './spreadsheet.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export class SpreadsheetComponent { private readonly spreadsheetService = inject(SpreadsheetService); readonly values = this.spreadsheetService.values; runCalculations() { this.spreadsheetService.calculate(); } reset() { this.spreadsheetService.reset(); } } ``` Read the signal in the template with the new control flow: ```html @if (values().length) { @for (row of values(); track $index) { @for (cell of row; track $index) { } }
{{ cell }}
} ``` Bootstrap the app with zoneless change detection: ```typescript // main.ts import { provideZonelessChangeDetection } from '@angular/core'; import { bootstrapApplication } from '@angular/platform-browser'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, { providers: [provideZonelessChangeDetection()], }).catch((err) => console.error(err)); ``` > Signals require Angular 16+, the new control flow Angular 17+, and `provideZonelessChangeDetection` Angular 20+. For earlier versions, use the `BehaviorSubject` approach below. ## Basic usage (older Angular versions) For broader compatibility — including Angular versions without signals or zoneless change detection — wrap the engine in an `@Injectable` service backed by a `BehaviorSubject`. Components subscribe to the observable with the `async` pipe, which handles subscription cleanup automatically. ```typescript // spreadsheet.service.ts import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { HyperFormula, type CellValue } from 'hyperformula'; @Injectable({ providedIn: 'root' }) export class SpreadsheetService { private readonly hf: HyperFormula; private readonly _values = new BehaviorSubject([]); readonly values$ = this._values.asObservable(); constructor() { this.hf = HyperFormula.buildFromArray( [ [1, 4, '=A1+B1'], // your data rows go here ], { licenseKey: 'gpl-v3', // more configuration options go here } ); this._values.next(this.hf.getSheetValues(0)); } calculate() { this._values.next(this.hf.getSheetValues(0)); } reset() { this._values.next([]); } } ``` Consume the service from a component and bind `values$ | async` in the template. The component below is **standalone** (the default since Angular 17) and imports `CommonModule` directly, so it works without an `NgModule`. The structural directives `*ngIf` / `*ngFor` and the `async` pipe all come from `CommonModule`: ```typescript // spreadsheet.component.ts import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Observable } from 'rxjs'; import { SpreadsheetService } from './spreadsheet.service'; import { type CellValue } from 'hyperformula'; @Component({ selector: 'app-spreadsheet', standalone: true, imports: [CommonModule], templateUrl: './spreadsheet.component.html', }) export class SpreadsheetComponent { values$: Observable; constructor(private spreadsheetService: SpreadsheetService) { this.values$ = this.spreadsheetService.values$; } runCalculations() { this.spreadsheetService.calculate(); } reset() { this.spreadsheetService.reset(); } } ``` ```html
{{ cell }}
``` ### `NgModule`-based apps (Angular 13 and older) Standalone components require Angular 14 or newer. If your project still uses `NgModule`s (or targets Angular 13 or older), drop the `standalone: true` and `imports` fields from the component above, then declare it in your module and import `CommonModule` there instead: ```typescript // app.module.ts @NgModule({ declarations: [SpreadsheetComponent], imports: [BrowserModule, CommonModule], }) export class AppModule {} ``` The service and template above are unchanged — only the way the component is wired up differs. ## Notes ### Provider scope The notes below apply to both the modern and older approaches — provider scope and cleanup depend on how the service is registered, not on whether it exposes a signal or a `BehaviorSubject`. `providedIn: 'root'` makes the service an application-wide singleton — suitable when a single HyperFormula instance is shared across the app. For per-feature or per-component instances (for example, several independent reports on one screen), provide the service at the component level via `providers: [SpreadsheetService]`; the service is then created and destroyed alongside the component. ### Cleanup Root-scoped services live for the application's full lifetime — `ngOnDestroy` fires only at app shutdown. If you scope the service to a component (`providers: [SpreadsheetService]`), implement `OnDestroy` to release the engine: ```typescript import { Injectable, OnDestroy } from '@angular/core'; @Injectable() export class SpreadsheetService implements OnDestroy { // ... ngOnDestroy() { this.hf.destroy(); } } ``` ## Server-side rendering (Angular Universal) The service above is already SSR-safe — HyperFormula has no browser-only API dependency. To skip the (otherwise wasted) server-side instantiation in Angular Universal, gate the engine init with [`isPlatformBrowser`](https://angular.dev/api/common/isPlatformBrowser) from `@angular/common`. ## Next steps - [Configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) — full list of `buildFromArray` / `buildEmpty` options - [Basic operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) — CRUD on cells, rows, columns, sheets - [Advanced usage](https://hyperformula.handsontable.com/docs/guide/advanced-usage.md) — multi-sheet workbooks, named expressions - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) — register your own formulas ## Demo For a more advanced example, check out the [Angular demo on Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/angular-demo?v=). --- ## Integration with Svelte URL: https://hyperformula.handsontable.com/docs/guide/integration-with-svelte # Integration with Svelte The HyperFormula API is identical in a Svelte app and in plain JavaScript. This guide demonstrates how HyperFormula integrates with the Svelte component's lifecycle and how you bridge its values into Svelte's reactivity. Install with `npm install hyperformula`. For other options, see the [client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) section. > **SvelteKit SSR** > > The primary snippet below assumes a browser environment. If you use SvelteKit with default SSR, skip to [Server-side rendering](#server-side-rendering-sveltekit) — `HyperFormula.buildFromArray` at ` {#if result !== null}

Result: {result}

{/if} {#each data as row, r} {#each row as cell, c} {/each} {/each}
{#if hf.doesCellHaveFormula({ sheet: sheetId, row: r, col: c })} {hf.getCellFormula({ sheet: sheetId, row: r, col: c })} {:else} {hf.getCellValue({ sheet: sheetId, row: r, col: c })} {/if}
``` ## Server-side rendering (SvelteKit) In SvelteKit, top-level statements in ` {#if result !== null}

Result: {result}

{/if} ``` ## Next steps - [Configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) — full list of `buildFromArray` / `buildEmpty` options - [Basic operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) — CRUD on cells, rows, columns, sheets - [Advanced usage](https://hyperformula.handsontable.com/docs/guide/advanced-usage.md) — multi-sheet workbooks, named expressions - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) — register your own formulas ## Demo For a more advanced example, check out the [Svelte demo on Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/svelte-demo?v=). --- ## Integration with Vue URL: https://hyperformula.handsontable.com/docs/guide/integration-with-vue # Integration with Vue The HyperFormula API is identical in a Vue 3 app and in plain JavaScript. This guide demonstrates how HyperFormula integrates with the Vue reactivity system and how to surface its values in the template. Install with `npm install hyperformula`. For other options, see the [client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) section. > **TypeScript** > > All examples use TypeScript. Remove the type annotations to use plain JavaScript. ## Basic usage Pass the HyperFormula instance through Vue's [`markRaw`](https://vuejs.org/api/reactivity-advanced.html#markraw) to opt it out of the reactivity system (see [Troubleshooting](#vue-reactivity-issues) below for why this matters). Hold derived data in `ref` so the template updates when you reassign the ref's `.value`. ```vue ``` `hf` is marked raw so Vue never proxies it — `values` is the only reactive piece. To mutate data, call any HyperFormula method (e.g. `setCellContents`) then reassign `values.value` to trigger a re-render. See [Basic operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) for the full mutation API. ## Server-side rendering (Nuxt) HyperFormula has no browser-only API dependency. To skip server-side computation, wrap the component with ``. ## Troubleshooting ### Vue reactivity issues If you encounter an error like ``` Uncaught TypeError: Cannot read properties of undefined (reading 'licenseKeyValidityState') ``` it means that Vue's reactivity system tried to deeply observe the HyperFormula instance. Vue wraps reactive objects in a `Proxy` that intercepts every property access; when that proxy reaches a non-trivial instance with its own internal state, identity checks and lazy-initialized maps break. The fix is to opt the instance out of reactivity with [`markRaw`](https://vuejs.org/api/reactivity-advanced.html#markraw): ```typescript import { markRaw } from "vue"; import { HyperFormula } from "hyperformula"; const hf = markRaw( HyperFormula.buildEmpty({ licenseKey: "gpl-v3", }), ); ``` `shallowRef` is not a substitute: it skips proxying only at the top level, so writing the instance into a nested reactive structure (Pinia state, `reactive({...})`) will still wrap it. Always pass the instance itself through `markRaw` before putting it anywhere Vue can reach. ## Next steps - [Configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) — full list of `buildFromArray` / `buildEmpty` options - [Basic operations](https://hyperformula.handsontable.com/docs/guide/basic-operations.md) — CRUD on cells, rows, columns, sheets - [Advanced usage](https://hyperformula.handsontable.com/docs/guide/advanced-usage.md) — multi-sheet workbooks, named expressions - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) — register your own formulas ## Demo For a more advanced example, check out the [Vue 3 demo on Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.4.x/vue-3-demo?v=). > This demo uses the [Vue 3](https://v3.vuejs.org/) framework. If you are looking for an example using Vue 2, check out the [code on GitHub](https://github.com/handsontable/hyperformula-demos/tree/2.5.x/vue-demo). --- ## Integration with LangChain/LangGraph URL: https://hyperformula.handsontable.com/docs/guide/integration-with-langchain # Integration with LangChain/LangGraph A [LangChain.js](https://js.langchain.com/) / [LangGraph](https://langchain-ai.github.io/langgraphjs/) tool that gives your agents deterministic spreadsheet and formula computation — backed by HyperFormula's Excel-compatible engine. > **Not available yet — coming soon** > > This integration is on our roadmap and **cannot be installed or used today**. The API shown below is a preview and may still change before the first release. > > If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) — we'll ping you the moment the first beta is ready, and your sign-up directly tells us how strongly to prioritize this integration. ## What it does - **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable. - **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls. - **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived. - **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required. ## Example Wiring HyperFormula into a LangGraph ReAct agent: ```js import { ChatOpenAI } from '@langchain/openai'; import { createReactAgent } from '@langchain/langgraph/prebuilt'; import HyperFormula from 'hyperformula'; import { createSpreadsheetTools } from 'hyperformula/langchain'; const hf = HyperFormula.buildFromArray([ ['Revenue', 100], ['Cost', 60], ['Profit', '=B1-B2'], ]); const agent = createReactAgent({ llm: new ChatOpenAI({ model: 'gpt-4o' }), tools: createSpreadsheetTools(hf), }); await agent.invoke({ messages: [ { role: 'user', content: 'What drives the profit number, and what happens if revenue doubles?' }, ], }); ``` A single import, one entry in `tools`, and the agent can evaluate formulas, read ranges, and edit cells through LangChain — without inventing numbers. ## Use cases - **Explain the spreadsheet** — ask the agent what a workbook does, which cells are inputs, and how each output is derived; get answers grounded in real formula evaluation. - **What-if scenarios and forecasting** — the agent tweaks assumptions and reports how downstream results change, deterministically. - **Validate and clean data** — the agent scans ranges for errors, missing values, or inconsistencies and fixes them in place. - **Generate formulas from natural language** — the agent translates a plain-English calculation into a verified, working Excel formula. - **Financial modeling and reporting** — NPV, IRR, amortization, KPI rollups, and other quantitative workflows where the answer must be exact and auditable. ## Get early access > **Be the first to try it** > > We're actively building this integration. Drop your email and we'll notify you the moment the first beta lands — so you can try it before the public release. > > [Join the early access list →](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) ## Links - [LangChain.js documentation](https://js.langchain.com/) - [LangGraph documentation](https://langchain-ai.github.io/langgraphjs/) - [HyperFormula on GitHub](https://github.com/handsontable/hyperformula) - [HyperFormula on npm](https://www.npmjs.com/package/hyperformula) - [Built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) --- ## Key concepts URL: https://hyperformula.handsontable.com/docs/guide/key-concepts # Key concepts ## High-level design diagram ![](https://hyperformula.handsontable.com/docs/hf-high-lvl-diagram.svg) Data processing consists of three phases. ## Phase 1. Parsing and construction of ASTs Formulas need to be parsed and represented as a so-called [Abstract Syntax Tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree) (AST). For example, the AST for `7*3-SIN(A5)` will look similar to this graph: ![](https://hyperformula.handsontable.com/docs/ast.png) ## Phase 2. Construction of the dependency graph HyperFormula needs to understand the relationship between cells and find the right order of processing them. For example, for a sample formula `C1=A1+B1`, it needs to process first `A1` and `B1` and then `C1`. Such an order of processing cells - also known as [topological order](https://en.wikipedia.org/wiki/Topological_sorting) exists if and only if there is no cycle in the dependency graph. There can be many such orders, like so: ![](https://hyperformula.handsontable.com/docs/topsort.png) Read more about the [dependency graph](https://hyperformula.handsontable.com/docs/guide/dependency-graph.md). ## Phase 3. Evaluation It is crucial to evaluate cells efficiently. For simple expressions, there is not much room for maneuver, but spreadsheet-like data sets definitely need more attention. ![](https://hyperformula.handsontable.com/docs/sample-sheet.png) ## Grammar For parsing purposes, the library uses the [Chevrotain](http://sap.github.io/chevrotain/docs/) parser, which turns out to be more efficient than popular [Jison](https://zaa.ch/jison/). The language of acceptable formulas is described with an LL(k) grammar using Chevrotain Domain Specific Language. See details of the grammar in the [FormulaParser](https://github.com/handsontable/hyperformula/blob/master/src/parser/FormulaParser.ts) file. ## Repetitive ASTs A first natural optimization could concern cells in a spreadsheet which store exactly the same formulas. For such cells, there is no point in constructing and storing two ASTs which would be the same in the end. Instead, HyperFormula can look up the particular formula that has already been parsed and reuse the constructed AST. A scenario with repeating formulas is somewhat idealized; in practice, most formulas will be distinct. Fortunately, formulas in spreadsheets usually have a defined structure and share some patterns. Neighboring cells often contain similar formulas, especially after filling cells using a fill handle (that little square in the bottom right corner of a visual cell representation). For example: * `B2=A2-C2+B1` * `B3=A3-C3+B2` * `B4=A4-C4+B3` * `B5=A5-C5+B4` * and so on... Although the exact ASTs for these formulas are different, they share a common pattern. A very useful approach here is to rewrite a formula using relative addressing of cells. ## Relative addressing HyperFormula stores the offset to the referenced formula. For example `B2=B5 + C1` can be rewritten as `B2=[B+0][2+3] + [B+1][2-1]` or in short `B2=[0][+3] + [+1][-1]`. Then, the above example with `B2,B3`, and `B4` can be rewritten as `B2=B3=B4=[-1][0] - [1][0] + [0][-1]`. Now the three cells have exactly the same formulas. By using relative addressing HyperFormula unifies formulas from many cells. Thanks to that, there is no need to parse them all over again. Also, with this approach, the engine doesn't lose any information because by knowing the absolute address of a cell and its formula with relative addresses, it can easily retrieve the absolute addresses and compute the result. ## Laziness of CRUD operations After each CRUD operation, like adding a row or column or moving cells, references inside formulas may need to be changed. For example, after adding a row, we need to shift all references in the formulas below like so: ![](https://hyperformula.handsontable.com/docs/crud-operations.png) In more complex sheets this can lead to similar transformations in many formulas at once. On the other hand, such operations do not require an immediate transformation of all the affected formulas. Instead of transforming all of them at once, HyperFormula remembers the history of the operations and postpones the transformations until the formula needs to be displayed or recalculated. --- ## Known limitations URL: https://hyperformula.handsontable.com/docs/guide/known-limitations # Known limitations This page lists the known limitations of HyperFormula at its current development stage: * Node.js versions older than 13 don't properly compare culture-insensitive strings. HyperFormula requires the full International Components for Unicode (ICU) to be supported. [Learn more](https://nodejs.org/api/intl.html#intl_embed_the_entire_icu_full_icu) * Multiple workbooks are not supported. One instance of HyperFormula can handle only one workbook with multiple worksheets at a time. * For cycle detection, all possible dependencies between cells are taken into account, even if some of them could be omitted after the full evaluation of expressions and condition statements. The most prominent example of this behavior is the "IF" function which returns a cycle error regardless of whether TRUE or FALSE causes a circular reference. * Named ranges behave differently depending on where they are used in a formula. For details, see [Using named ranges in formulas](https://hyperformula.handsontable.com/docs/guide/named-expressions.md#using-named-ranges-in-formulas). * [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) don't automatically recalculate the size of their [result arrays](https://hyperformula.handsontable.com/docs/guide/custom-functions.md#return-an-array-of-data) when the formula dependencies change. * There is no relative referencing in named ranges. * The library doesn't offer (at least not yet) the following features: * 3D references * Constant arrays * Dynamic arrays * Asynchronous functions * Structured references ("Tables") * Relative named expressions * Functions cannot use UI metadata (e.g., hidden rows for SUBTOTAL). ## Nuances of the implemented functions * HyperFormula immediately instantiates references to single cells to their values, instead of treating them as 1-length ranges, which slightly changes the behavior of some functions (e.g., NPV). * SUBTOTAL function does not ignore nested subtotals. * CHISQ.INV, CHISQ.INV.RT, CHISQ.DIST.RT, CHIDIST, CHIINV and CHISQ.DIST (CHISQ.DIST in CDF mode): Running time grows linearly with the value of the second parameter, degrees_of_freedom (slow for values>1e7). * GAMMA.DIST, GAMMA.INV, GAMMADIST, GAMMAINV (GAMMA.DIST and GAMMADIST in CDF mode): Running time grows linearly with the value of the second parameter, alpha (slow for values>1e7). * For certain inputs, the RATE function might have no solutions, or have multiple solutions. Our implementation uses an iterative algorithm (Newton's method) to find an approximation for one of the solutions to within 1e-7. If the approximation is not found after 50 iterations, the RATE function returns the `#NUM!` error. * The INDEX function doesn't support returning whole rows or columns of the source range – it always returns the contents of a single cell. * The FILTER function accepts either single rows of equal width or single columns of equal height. In other words, all arrays passed to the FILTER function must have equal dimensions, and at least one of those dimensions must be 1. * Array-producing functions (e.g., SEQUENCE, FILTER) require their output dimensions to be determinable at parse time. Passing cell references or formulas as dimension arguments (e.g., `=SEQUENCE(A1)`) results in a `#VALUE!` error, because the output size cannot be resolved before evaluation. * The TEXT function does not accept embedded double-quote literals in the format string. In Excel, `""` inside a format string is an escape sequence for a literal `"` character — e.g. `=TEXT(1234.5, "#,##0.00 ""zł""")` returns `"1,234.50 zł"`. If your application requires this escape sequence, supply a custom [`stringifyCurrency`](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) callback. ### UNIQUE function * Comparison of values follows HyperFormula's own equality rules, which honor the `caseSensitive` and `accentSensitive` configuration options. By default comparison is case-insensitive. * When `ExactlyOnce` is TRUE and no row or column occurs exactly once, `UNIQUE` returns a `#N/A` error (the result would otherwise be empty). ### SORT function * The `SortIndex` argument accepts a single key only. Multi-key sorting through an array constant (for example `=SORT(A1:B9, {1,2})`) is not supported; sort by one column or row at a time. * The `SortOrder` argument must be exactly `1` (ascending) or `-1` (descending). Any other value returns a `#VALUE!` error. * Ordering (including mixed types, empty cells, and text collation) follows HyperFormula's own comparison rules, which honor the `caseSensitive` and `accentSensitive` configuration options. Numbers sort before text, and text before logical values. ### OFFSET function HyperFormula resolves the OFFSET function at parse time rather than during evaluation. The parser inspects the arguments and rewrites the expression into a plain cell reference or range. This keeps the dependency graph accurate but imposes several restrictions. * The first argument must be a reference to a single cell. Passing a range causes the cell to store a parser error (the API call itself does not throw — read the error via `getCellValue`). ```js // Cell A1 stores a parser error — the first argument must be a single cell, not a range hf.setCellContents({ sheet: 0, row: 0, col: 0 }, '=OFFSET(A1:B1, 0, 0)'); ``` * The row-shift, column-shift, height, and width arguments must be static integer literals known at parse time. Cell references and formulas passed as shift or size arguments cause the cell to store a parser error. ```js // Cell A1 stores a parser error — the row-shift argument must be a static integer literal hf.setCellContents({ sheet: 0, row: 0, col: 0 }, '=OFFSET(A1, C3, 0)'); ``` * The height and width arguments must be bare positive integer literals (the parser accepts only `NUMBER` AST nodes). Unary `+` prefixes, parenthesised expressions, values less than 1, and non-integer values are rejected at parse time. * When the computed target falls outside the sheet, the parser stores a `#REF!` error in the cell at parse time (rather than during evaluation) with the message *Resulting reference is out of the sheet*. ```js // Cell A1 stores #REF! hf.setCellContents({ sheet: 0, row: 0, col: 0 }, '=OFFSET(A1, -1, 0)'); ``` * OFFSET is resolved at parse time, so `getCellFormula` returns the computed reference, not the original `OFFSET` call. ```js const hf = HyperFormula.buildFromArray([[1, 45, '=OFFSET(A1, 0, 1)']]); hf.getCellFormula({ sheet: 0, row: 0, col: 2 }); // '=B1' ``` --- ## License key URL: https://hyperformula.handsontable.com/docs/guide/license-key # License key To use HyperFormula, you need to specify which [license type](https://hyperformula.handsontable.com/docs/guide/licensing.md#available-licenses) you use, by entering a license key in your [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). ## GPLv3 license If you use HyperFormula under [GNU General Public License v3.0](https://github.com/handsontable/hyperformula/blob/master/LICENSE.txt) (GPLv3), in your [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md), assign the mandatory `licenseKey` property to a string, `gpl-v3`: ```js const options = { licenseKey: 'gpl-v3', //... other options } ``` ## Proprietary license To use HyperFormula under a [proprietary license](https://hyperformula.handsontable.com/docs/guide/licensing.md#proprietary-license), follow these steps: 1. Contact our [Sales Team](https://hyperformula.handsontable.com/docs/guide/licensing.md#proprietary-license) to purchase a proprietary license. 2. Our Sales Team sends you your proprietary license key. 3. In your [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md), assign the mandatory `licenseKey` property to your proprietary license key: ```js const options = { // replace xxxx-xxxx-xxxx-xxxx-xxxx with your proprietary license key: licenseKey: 'xxxx-xxxx-xxxx-xxxx-xxxx', //... other options } ``` ### Proprietary license key validation > HyperFormula doesn't use an internet connection to validate your proprietary license key. To determine whether a user is still entitled to use a particular version of the software, HyperFormula compares the time between two dates: * The HyperFormula build date * The date in your proprietary license key This process doesn't require any connection to the server. ## License key notifications If your license key is missing, invalid, or expired, you see a corresponding notification in the console. ## License key support If you have any issues with your license key, [contact our team](https://hyperformula.handsontable.com/docs/guide/contact.md). --- ## Licensing URL: https://hyperformula.handsontable.com/docs/guide/licensing # Licensing To make HyperFormula a better fit for different types of projects, the source code is available under different licenses. ## Available licenses HyperFormula is available under the following licenses: | Name | Type | |:--------------------------------------------------------------------------------------|:------------| | [GPLv3 license](https://github.com/handsontable/hyperformula/blob/master/LICENSE.txt) | Open source | | Proprietary license | Proprietary | ## GPLv3 license In a non-commercial or open-source project, you can use [GNU General Public License v3.0](https://github.com/handsontable/hyperformula/blob/master/LICENSE.txt) (GPLv3). To learn how to use the GPLv3 license, see the [License key](https://hyperformula.handsontable.com/docs/guide/license-key.md#gplv3-license) page. ## Proprietary license If your project requires a more permissive license than GPLv3, please contact us to purchase a proprietary license with flexible terms and conditions. Contact our Sales Team: * Through the [contact form](https://handsontable.com/get-a-quote) on the Handsontable website * By email at [sales@handsontable.com](mailto:sales@handsontable.com) ## Entering a license key To use HyperFormula, you need to specify which license type you use, by entering a license key. To find out how to enter a license key, see the [License key](https://hyperformula.handsontable.com/docs/guide/license-key.md) page. --- ## Localizing functions URL: https://hyperformula.handsontable.com/docs/guide/localizing-functions # Localizing functions You can localize a function's ID and error messages. Currently, HyperFormula supports 18 languages, with British English as the default. To change the language all you need to do is import and register the language like so: ```javascript // import the French language pack import frFR from 'hyperformula/i18n/languages/frFR'; // register the language HyperFormula.registerLanguage('frFR', frFR); ``` > To import the language packs, use the module-system-specific dedicated bundles at: > * **ES**: `hyperformula/i18n/languages/` > * **CommonJS**: `hyperformula/i18n/languages/` > * **UMD**: `hyperformula/dist/languages/` > > For the UMD build, the languages are accessible through `HyperFormula.languages`, e.g., `HyperFormula.languages.frFR`. Then set it inside it the [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md): ```javascript // configure the instance const options = { language: 'frFR' }; ``` Language pack names should be passed as strings. They follow a naming convention that incorporates two standards: ISO-639 and ISO-3166-1. The pattern is `languageCOUNTRY`, for example `enUS`, `enGB`, `frFR`, etc. You can freely use the localized names: `SUM` can be written as `SOMME` and the functionality of the function will remain the same. Here are some example functions and their translations in French: ```javascript // localized functions functions: { MATCH: 'EQUIV', CORREL: 'COEFFICIENT.CORRELATION', AVERAGE: 'MOYENNE' }, ``` Same goes for the [errors](https://hyperformula.handsontable.com/docs/guide/types-of-errors.md) displayed inside cells when something goes wrong: ```javascript // localized errors errors: { CYCLE: '#CYCLE!', DIV_BY_ZERO: '#DIV/0!', ERROR: '#ERROR!', NA: '#N/A', NAME: '#NOM?', NUM: '#NOMBRE!', REF: '#REF!', VALUE: '#VALEUR!', } ``` ## Creating a custom language pack If your desired language is not in the list of supported languages, you can create a custom language pack: ```javascript // Create a language pack object const spanish = { errors: { NAME: '#¿NOMBRE?', // ... }, functions: { SUM: 'SUMA', IF: 'SI', // ... }, langCode: 'es', // Your custom language code ui: { NEW_SHEET_PREFIX: 'Sheet', }, }; // Register your language HyperFormula.registerLanguage('es', spanish); // Use it in your configuration const hf = HyperFormula.buildEmpty({ language: 'es' }); ``` > You can use an existing language pack as a template. Check the [language files in the repository](https://github.com/handsontable/hyperformula/tree/master/src/i18n/languages) to see complete examples with all available functions. ## Localizing custom functions You can localize your custom functions as well. For details, see the [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md#function-name-translations) guide. ### List of supported languages | Language name | Language code | |:-----------------|:--------------| | British English | enGB | | American English | enUS | | Czech | csCZ | | Danish | daDK | | Dutch | nlNL | | Finnish | fiFI | | French | frFR | | German | deDE | | Hungarian | huHU | | Italian | itIT | | Norwegian | nbNO | | Polish | plPL | | Portuguese | ptPT | | Russian | ruRU | | Spanish | esES | | Swedish | svSE | | Turkish | trTR | | Indonesian | idID | --- ## List of differences with other spreadsheets URL: https://hyperformula.handsontable.com/docs/guide/list-of-differences # List of differences with other spreadsheets
See a full list of differences between HyperFormula, Microsoft Excel, and Google Sheets. **Contents:** ## General functionalities | Functionality | Examples | HyperFormula | Google Sheets | Microsoft Excel | |----------------------------------------------------|---------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| | Dependency collection | A1:=IF(FALSE(), A1, 0)

ISREF(A1) | Dependencies are collected during the parsing phase, which finds cycles that wouldn't appear in the evaluation.

`CYCLE` error for both examples. | Dependencies are collected during evaluation.

`0` for both examples. | Same as Google Sheets. | | Named expressions and named ranges | SALARY:=$A$10 COST:=10*$B$5+100
PROFIT:=SALARY-COST
A1:=SALARY-COST | Only absolute addresses are allowed
(e.g., SALARY:= $A$10).

Named expressions can be global or scoped to one sheet only.

They can contain other named expressions. | Named expressions are not available.

Named ranges can be used to create aliases for addresses and ranges. | Named ranges and scoped named expressions are available. | | Named expression names | ProductPrice1:=42 | A name must be distinctive from a cell reference (case-insensitive), so `ProductPrice1` is invalid. See [complete naming rules](https://hyperformula.handsontable.com/docs/guide/named-expressions.md#name-rules). | A name that is a valid cell reference is allowed if the column address is at least 4-letter long, so `ProductPrice1` is valid. | A name that is a valid cell reference is allowed if the column address is at least 4-letter long, so `ProductPrice1` is valid. | | Applying a scalar value to a function taking range | COLUMNS(A1) | `CellRangeExpected` error. | Treats the element as length-1 range. Returns 1 for the example. | Same as Google Sheets. | | Coercion of explicit arguments | VARP(2, 3, 4, TRUE(), FALSE(), "1",) | 1.9592, based on the behavior of Microsoft Excel. | GoogleSheets implementation is not consistent with the standard (see also `VAR.S`, `STDEV.P`, and `STDEV.S` function.) | 1.9592 | | Ranges created with `:` | A1:A2

A$1:$A$2

A:C

1:2

Sheet1!A1:A2 | Allowed ranges consist of two addresses (A1:B5), columns (A:C) or rows (3:5).
They cannot be mixed or contain named expressions. | Everything allowed. | Same as Google Sheets. | | Formatting inside the TEXT function | TEXT(A1,"dd-mm-yy")

TEXT(A1,"###.###”) | To support all date, time and currency formats, set [`stringifyDateTime`](https://hyperformula.handsontable.com/docs/guide/compatibility-with-microsoft-excel.md#date-and-time-formats) and [`stringifyCurrency`](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) configuration options. | A wide variety of options for string formatting is supported. | Same as Google Sheets. | | Cell references inside inline arrays | ={A1, A2} | The array's value is calculated but not updated when the cells' values change. | The array's value is calculated and updated when the cells' values change. | ERROR: invalid array | | SPLIT function | =SPLIT("Lorem ipsum dolor", 0) | This function works differently from Google Sheets version but should be sufficient to achieve the same functionality in most scenarios. Read SPLIT function description on [the Built-in Functions page](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#text). | Different syntax and return value. | No such function. | | DATEVALUE function | =DATEVALUE("25/02/1991") | Type of the returned value: `CellValueDetailedType.NUMBER_DATE` (compliant with the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard) | Cell auto-formatted as **regular number** | Cell auto-formatted as **regular number** | | TIMEVALUE function | =TIMEVALUE("14:31") | Type of the returned value: `CellValueDetailedType.NUMBER_TIME` (compliant with the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard) | Cell auto-formatted as **regular number** | Cell auto-formatted as **regular number** | | EDATE function | =EDATE(DATE(2019, 7, 31), 1) | Type of the returned value: `CellValueDetailedType.NUMBER_DATE`. This is non-compliant with the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard, which defines the return type as a Number, while describing it as a Date serial number through the function summary. | Cell auto-formatted as **date** | Cell auto-formatted as **regular number** | | EOMONTH function | =EOMONTH(DATE(2019, 7, 31), 1) | Type of the returned value: `CellValueDetailedType.NUMBER_DATE`. This is non-compliant with the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard, which defines the return type as a Number, while describing it as a Date serial number through the function summary. | Cell auto-formatted as **date** | Cell auto-formatted as **regular number** | | Empty cells in lookup search | =XLOOKUP(3, A1:A4, A1:A4, "NF", 0, 2)
where A1:A4 = 1, 2, (empty), 3 | Empty cells are skipped during the search. A value that is present is found even when it sits past an interspersed empty cell (exact match is gap-independent), and approximate `MATCH`/`VLOOKUP`/`HLOOKUP`/`XLOOKUP` skip empty cells — but not empty strings — when finding the lower/upper bound. Returns `3`. On an all-empty range in a binary search mode, HyperFormula returns the `if_not_found` result (never row 1). | Skips empty cells in approximate search (parity with HyperFormula). | With binary search modes (`search_mode` ±2), a range with interspersed empty cells is not strictly sorted; per Excel's documentation the result may be invalid, so a value past an empty cell is not reliably found. On an all-empty range in a binary mode, Excel returns the first row's value. | ## Built-in functions Some built-in functions are implemented differently than in Google Sheets or Microsoft Excel. To remove the differences, create [custom implementations](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) of those functions. | Function | Example | HyperFormula | Google Sheets | Microsoft Excel | |---------------|----------------------------------------------------------------|-------------:|--------------:|----------------:| | TBILLEQ | =TBILLEQ(0, 180, 1.9) | 38.5278 | NUM | NUM | | TBILLEQ | =TBILLEQ(0, 180, 2) | 0.0000 | NUM | 0.0000 | | TBILLEQ | =TBILLEQ("1/2/2000", "31/1/2001", 0.1) | 0.1128 | VALUE | VALUE | | TBILLEQ | =TBILLEQ(0, 360, 0.1) | 0.1127 | 0.1097 | 0.1097 | | TBILLEQ | =TBILLEQ(0, 365, 0.1) | 0.1128 | 0.1098 | 0.1098 | | GCD | =GCD(1000000000000000000.0) | NUM | 1E+18 | NUM | | COMBIN | =COMBIN(1030, 0) | NUM | NUM | 1.0000 | | RRI | =RRI(1, -1, -1) | 0.0000 | NUM | 0.0000 | | DAYS | =DAYS(-1, 0) | NUM | -1.0000 | NUM | | DAYS | =DAYS(0, -1) | NUM | 1.0000 | NUM | | DATEDIF | =DATEDIF(-1, 0, "Y") | NUM | 0.0000 | NUM | | RATE | =RATE(12, -100, 400, 0, 1) | -1.0000 | NUM | NUM | | PV | =PV(-1, 0, 100, 400) | NUM | -400 | NUM | | LCMP | =LCM(1000000, 1000001, 1000002, 1000003) | NUM | 5.00003E+23 | NUM | | TBILLPRICE | =TBILLPRICE(0, 180, 1.9) | 5.0000 | NUM | 5.0000 | | TBILLPRICE | =TBILLPRICE(0, 180, 2) | 0.0000 | NUM | 0.0000 | | NPV | =NPV(1, TRUE(), 1) | 0.7500 | 0.5000 | 0.7500 | | NPV | =NPV(1,B1) where B1 = true | 0.5000 | 0.0000 | 0.0000 | | POISSON.DIST | =POISSON.DIST(-0.01, 0, FALSE()) | NUM | 1.0000 | NUM | | POISSON.DIST | =POISSON.DIST(0, -0.01, FALSE()) | NUM | NUM | 1.0101 | | DB | =DB(1000000, 100000, 6, 7, 7) | 15845.1000 | NUM | 15845.0985 | | BETA.DIST | =BETA.DIST(1, 2, 3) | N/A | 1.0000 | NUM | | BETA.DIST | =BETA.DIST(0, 1, 1, FALSE()) | NUM | 0.0000 | NUM | | BETA.DIST | =BETA.DIST(0.6, 1, 1, FALSE(), 0.6, 0.7) | NUM | 0.0000 | 0.0000 | | BETA.DIST | =BETA.DIST(0.7, 1, 1, FALSE(), 0.6, 0.7) | NUM | 0.0000 | 0.0000 | | GAMMA | =GAMMA(-2.5) | -0.9453 | NUM | -0.9453 | | BINOM.DIST | =BINOM.DIST(0.5, 0.4, 1, FALSE()) | N/A | NUM | 1.0000 | | NEGBINOM.DIST | =NEGBINOM.DIST(0, 1, 0, FALSE()) | 0.0000 | N/A | NUM | | NEGBINOM.DIST | =NEGBINOM.DIST(0, 1, 1, FALSE()) | 1.0000 | N/A | NUM | | T.INV | =T.INV(0, 1) | NUM | NUM | DIV/0 | | BETA.INV | =BETA.INV(1, 1, 1) | 1.0000 | 1.0000 | NUM | | WEIBULL.DIST | =WEIBULL.DIST(0, 1, 1, FALSE()) | 1.0000 | 1.0000 | 0.0000 | | HYPGEOM.DIST | =HYPGEOM.DIST(12.1, 12, 20, 40, TRUE()) | NUM | N/A | 1.0000 | | HYPGEOM.DIST | =HYPGEOM.DIST(12.1, 20, 12, 40, TRUE()) | NUM | N/A | 1.0000 | | HYPGEOM.DIST | =HYPGEOM.DIST(1, 2, 3, 4) | N/A | 0.5000 | NUM | | HYPGEOM.DIST | =HYPGEOM.DIST(4, 12, 20, 40, TRUE()) | 0.1504 | N/A | 0.1504 | | TDIST | =TDIST(0, 1, 1.5) | NUM | 0.5000 | 0.5000 | | T.INV.2T | =T.INV.2T(0, 1) | NUM | NUM | DIV/0 | | T.DIST | =T.DIST(1, 0.9, FALSE()) | NUM | NUM | DIV/0 | | AVEDEV | =AVEDEV(TRUE(), FALSE()) | 0.4444 | 0.0000 | 0.4444 | | LARGE | =LARGE(TRUE(), 1) | NUM | NUM | 1.0000 | | COUNTA | =COUNTA(1,) | 2.0000 | 1.0000 | 2.0000 | | XNPV | =XNPV(-0.9, A2:D2, A3:D3)
where 2nd and 3rd row: 1, 2, 3, 4 | 10.1272 | 10.12716959 | NUM | | SKEW | =SKEW(TRUE(), FALSE()) | 1.7321 | DIV/0 | 1.7321 | | HARMEAN | =HARMEAN(TRUE(), "4") | 1.6000 | 4.0000 | 1.6000 | | GEOMEAN | =GEOMEAN(TRUE(), "4") | 2.0000 | 4.0000 | 2.0000 | | CHISQ.TEST | =CHISQ.TEST(A1:C2, A1:F1) | N/A | N/A | DIV/0 | | BINOM.INV | =BINOM.INV(1, 0.8, 0.2) | 0.0000 | 1.0000 | 1.0000 | | BINOM.INV | =BINOM.INV(-0.001, 0.5, 0.5) | NUM | 0.0000 | NUM | | BINOM.INV | =BINOM.INV(10, 0, 0.5) | 0.0000 | NUM | NUM | | BINOM.INV | =BINOM.INV(10, 1, 0.5) | 10.0000 | NUM | NUM | | DEVSQ | =DEVSQ(A2, A3) | 0.0000 | 0.0000 | NUM | | NORMSDIST | =NORMSDIST(0, TRUE()) | 0.5 | Wrong number | Wrong number | | ADDRESS | =ADDRESS(1,1,4, TRUE(), "") | !A1 | ''!A1 | !A1 | | SEQUENCE | =SEQUENCE(0) | VALUE | N/A | CALC | | INT | =INT(-8.9) | -8 | -9 | -9 | | MOD | =MOD(-10, 3) | -1 | 2 | 2 | | ISEVEN | =ISEVEN(2.5) | FALSE | TRUE | TRUE | | ISODD | =ISODD(3.5) | FALSE | TRUE | TRUE | | CEILING.MATH | =CEILING.MATH(-4.3, 2, 2) | -4 | -6 | -6 | | FLOOR.MATH | =FLOOR.MATH(-4.7, 2, 2) | -6 | -4 | -4 | A few of the rows above share a root cause worth stating once: - **Rounding toward zero, not down.** `INT` discards the fractional part rather than rounding toward negative infinity, so it differs from Excel and Google Sheets for negative input only. `ROUNDDOWN`/`ROUNDUP` are unaffected — they are defined in terms of zero in all three. - **`MOD` takes the sign of the dividend.** Excel and Google Sheets return a result with the sign of the *divisor*. - **`ISEVEN`/`ISODD` do not truncate.** They test the remainder of the value as given, so a value with a fractional part returns `FALSE` from *both*. Excel and Google Sheets truncate to an integer first, so exactly one of the two is always `TRUE`. - **`CEILING.MATH`/`FLOOR.MATH` honour only `mode` = 1.** Excel and Google Sheets switch the negative-number rounding direction for any non-zero `mode`. --- ## Migrating from 0.6 to 1.0 URL: https://hyperformula.handsontable.com/docs/guide/migration-from-0.6-to-1.0 # Migrating from 0.6 to 1.0 To upgrade your HyperFormula version from 0.6.x to 1.0.x, follow this guide. ## Step 1: Change your license key If you use the AGPLv3 license, or the free non-commercial license, you need to change your license key. If you use a commercial license, you don't need to make any changes. ### Open-source license If you use the open-source version of HyperFormula, in your configuration options, pass the `gpl-v3` string instead of the `agpl-v3` string: Before: ```js const options = { licenseKey: 'agpl-v3', } ``` After: ```js const options = { // use `gpl-v3` instead of `agpl-v3` licenseKey: 'gpl-v3', } ``` ### Free non-commercial license If you use the free non-commercial license, switch to the GPLv3 license or purchase a commercial license. For more details on HyperFormula license keys, go [here](https://hyperformula.handsontable.com/docs/guide/license-key.md). ## Step 2: Change `sheetName` to `sheetId` Most sheet-related methods now take the `sheetID` number parameter instead of the `sheetName` string parameter. For example, use the `clearSheet()` method in this way: Before: ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); const changes = hfInstance.clearSheet('MySheet2'); ``` After: ```js const hfInstance = HyperFormula.buildFromSheets({ MySheet1: [ ['=SUM(MySheet2!A1:A2)'] ], MySheet2: [ ['10'] ], }); // use `sheetId` instead of `sheetName` const changes = hfInstance.clearSheet(1); ``` The only methods still accepting the `sheetName` string parameter are now: - `addSheet()`: needs `sheetName` to give a name to the new sheet. Generates the new sheet's `sheetId` - `isItPossibleToAddSheet()`: needs `sheetName` to check if it's possible to add a new sheet with that name - `doesSheetExist()`: needs `sheetName` to check if a sheet with that name exists - `getSheetId()`: needs `sheetName` to get the sheet's `sheetId` Also, these methods still accept the `newName` string parameter: - `renameSheet()`: needs `newName` to give a new name to an existing sheet - `isItPossibleToRenameSheet()`: needs `newName` to check if it's possible to give that new name to an existing sheet ## Step 3: Adapt to the `matrix`->`array` name changes Adapt to the following changes in configuration option names, API method names and exception names: ### Configuration option names | Before | After | |-------------------------|--------------------------| | `matrixColumnSeparator` | `arrayColumnSeparator` | | `matrixRowSeparator` | `arrayRowSeparator` | ### API method names | Before | After | |----------------------|---------------------| | `matrixMapping` | `arrrayMapping` | | `isCellPartOfMatrix` | `isCellPartOfArray` | ### Exception names | Before | After | |--------------------------------|-------------------------------| | `SourceLocationHasMatrixError` | `SourceLocationHasArrayError` | | `TargetLocationHasMatrixError` | `TargetLocationHasArrayError` | ## Step 4: Drop the matrix formula notation Switch from the matrix formula notation to the array formula notation. For more information on the array formula notation, go [here](https://hyperformula.handsontable.com/docs/guide/arrays.md). Before: ```js ={ISEVEN(A2:A5*10)} ``` Now, if the `useArrayArithmetic` configuration option is set to `false`, use the `ARRAYFORMULA` function to [enable the array arithmetic mode locally](https://hyperformula.handsontable.com/docs/guide/arrays.md#enabling-the-array-arithmetic-mode-locally): ```js =ARRAYFORMULA(ISEVEN(A2:A5*10)) ``` But when the `useArrayArithmetic` configuration option is set to `true`, you don't need to use the `ARRAYFORMULA` function, as the array arithmetic mode is [enabled globally](https://hyperformula.handsontable.com/docs/guide/arrays.md#enabling-the-array-arithmetic-mode-globally): ```js =ISEVEN(A2:A5*10) ``` ## Step 5: Drop the `matrixDetection` and `matrixDetectionThreshold` options Remove the `matrixDetection` and `matrixDetectionThreshold` options from your HyperFormula configuration. Before: ```js // define options const options = { licenseKey: 'gpl-v3', matrixDetection: true, matrixDetectionThreshold: 150 }; ``` After: ```js // define options const options = { licenseKey: 'gpl-v3' // remove `matrixDetection` and `matrixDetectionThreshold` }; ``` ## Step 6: Switch to the `SimpleCellRange` type argument If you use any of the following methods, update your code to take the `SimpleCellRange` type argument: - `copy()` - `cut()` - `getCellDependents()` - `getCellPrecedents()` - `getFillRangeData()` - `getRangeFormulas()` - `getRangeSerialized()` - `getRangeValues()` - `isItPossibleToMoveCells()` - `isItPossibleToSetCellContents()` - `moveCells()` Before: ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // takes `simpleCellAddress`, `width`, and `height` // returns: [ [ 2 ] ] const clipboardContent = hfInstance.copy({ sheet: 0, col: 1, row: 0 }, 1, 1); ``` After: ```js const hfInstance = HyperFormula.buildFromArray([ ['1', '2'], ]); // takes `simpleCellRange` // returns: [ [ 2 ] ] const clipboardContent = hfInstance.copy({ start: { sheet: 0, col: 1, row: 0 }, end: { sheet: 0, col: 1, row: 0 } }); ``` ## Step 7: Adapt to the array changes If you use any of the following methods, adjust your application to the changes in their behavior: ### `setCellContents()` The `setCellContents()` method now can override space occupied by spilled arrays. ### `addRows()` and `removeRows()` The `addRows()` method now can add rows across a spilled array, without changing the array size. The `removeRows()` method now can remove rows from across a spilled array, without changing the array size. ### `addColumns()` and `removeColumns()` The `addColumns()` method now can add columns across a spilled array, without changing the array size. The `removeColumns()` method now can remove columns from across a spilled array, without changing the array size. --- ## HyperFormula MCP Server URL: https://hyperformula.handsontable.com/docs/guide/mcp-server # HyperFormula MCP Server An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that exposes HyperFormula as a tool for any MCP-compatible AI client (Claude Desktop, Cursor, VS Code, and others) — giving LLMs deterministic spreadsheet and formula computation. > **Not available yet — coming soon** > > This integration is on our roadmap and **cannot be installed or used today**. The API shown below is a preview and may still change before the first release. > > If you'd like to try it, [join the early access list](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) — we'll ping you the moment the first beta is ready, and your sign-up directly tells us how strongly to prioritize this integration. ## What it does - **Evaluate formulas deterministically** — your agent runs any Excel-compatible formula through HyperFormula instead of asking the LLM to do math. Results are exact, reproducible, and auditable. - **Read and write cells and ranges** — the agent inspects, populates, or modifies sheet data through typed tool calls. - **Trace dependencies** — precedents and dependents are surfaced so the agent can explain how every value was derived. - **400+ built-in functions out of the box** — the agent has access to the full Excel-compatible function set (`SUM`, `VLOOKUP`, `IRR`, `INDEX/MATCH`, and the rest), no implementation work required. ## Example Run the server (no install needed once published): ```bash npx -y @hyperformula/mcp ``` Wire it into an MCP client by adding it to the client's config (for example, `claude_desktop_config.json` or `.cursor/mcp.json`): ```json { "mcpServers": { "hyperformula": { "command": "npx", "args": ["-y", "@hyperformula/mcp"] } } } ``` The client now sees tools like `evaluate`, `getCellValue`, and `setCellContents`, and the agent can call them as part of any conversation — without inventing numbers. ## Use cases - **Explain the spreadsheet** — ask the agent what a workbook does, which cells are inputs, and how each output is derived; get answers grounded in real formula evaluation. - **What-if scenarios and forecasting** — the agent tweaks assumptions and reports how downstream results change, deterministically. - **Validate and clean data** — the agent scans ranges for errors, missing values, or inconsistencies and fixes them in place. - **Generate formulas from natural language** — the agent translates a plain-English calculation into a verified, working Excel formula. - **Financial modeling and reporting** — NPV, IRR, amortization, KPI rollups, and other quantitative workflows where the answer must be exact and auditable. ## Get early access > **Be the first to try it** > > We're actively building this integration. Drop your email and we'll notify you the moment the first beta lands — so you can try it before the public release. > > [Join the early access list →](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) ## Links - [Model Context Protocol specification](https://modelcontextprotocol.io/) - [HyperFormula on GitHub](https://github.com/handsontable/hyperformula) - [HyperFormula on npm](https://www.npmjs.com/package/hyperformula) - [Built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) - [Custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md) --- ## Migrating from 1.x to 2.0 URL: https://hyperformula.handsontable.com/docs/guide/migration-from-1.x-to-2.0 # Migrating from 1.x to 2.0 To upgrade your HyperFormula version from 1.x.x to 2.0.0, follow this guide. ## Drop the `gpujs` and `gpuMode` options Remove the `gpujs` and `gpuMode` options from your HyperFormula configuration. Before: ```js const engine = HyperFormula.buildFromArray([[]], { gpujs: true, gpuMode: 'cpu', licenseKey: 'gpl-v3', }); ``` After: ```js const engine = HyperFormula.buildFromArray([[]], { licenseKey: 'gpl-v3', }); ``` > Functions that used GPU acceleration before (MMULT, MAXPOOL, MEDIANPOOL, and TRANSPOSE), still work. Their performance remains largely the same, except for very large data sets. --- ## Migrating from 2.x to 3.0 URL: https://hyperformula.handsontable.com/docs/guide/migration-from-2.x-to-3.0 # Migrating from 2.x to 3.0 To upgrade your HyperFormula version from 2.x.x to 3.0.0, follow this guide. ## Importing language files We changed the way of importing language files in ES module system to a more modern way using `mjs` files and `exports` property. This change is required to make HyperFormula compatible with newer ESM configurations in Node and browser environments. The previous import paths became deprecated. For most environments they still work in version 3.0.0, but it will be removed in the future. To avoid any issues, update your code to use the new paths. ### New import paths for ES and CommonJS module systems For ES and CommonJS modules, use the path `hyperformula/i18n/languages`, to import the language files. E.g.: ```javascript import { frFR } from "hyperformula/i18n/languages"; // ESM const { frFR } = require('hyperformula/i18n/languages'); // CommonJS ``` If you use the UMD module system, you don't need to change anything. ### Additional steps for projects using Angular 1. Make sure you use Typescript 5 or newer 2. In your `tsconfig.json`, set: ``` "moduleResolution": "bundler", ``` ### Additional steps for projects using Typescript In your `tsconfig.json`, set: ``` "module": "node16", "moduleResolution": "node16", ``` ### Additional steps for projects using Webpack 4 or older 1. In your code, use the legacy paths for importing language files. Unfortunately, Webpack 4 does not support `exports` property. E.g.: ```javascript import { frFR } from "hyperformula/es/i18n/languages"; ``` 2. In your `webpack.config.js`, add the following configuration to handle `.mjs` files properly: ```javascript module: { rules: [ { test: /\.m?js$/, include: /node_modules/, type: "javascript/auto", }, ], } ``` ### Additional steps for projects using Parcel 1. Make sure you use Parcel 2.9 or newer. Older versions of Parcel do not support `exports` property. 2. In your `package.json`, add the [following configuration](https://parceljs.org/blog/v2-9-0/#new-resolver): ``` "@parcel/resolver-default": { "packageExports": true } ``` If you don't want to upgrade Parcel, you can keep using the legacy import paths for language files, but they will be removed in one of the upcoming releases. E.g.: ```javascript import { frFR } from "hyperformula/es/i18n/languages"; ``` ### Other projects We tested the changes with the most popular bundlers and frameworks. If you use a different configuration, and you encounter any issues, please contact us via GitHub. We will try to make it work for you, although for older versions of bundlers and frameworks, it might be impossible. ## Removal of the `binarySearchThreshold` configuration option (deprecated since version 1.1.0) The `binarySearchThreshold` has no effect since version 1.1.0. If your codebase still uses this option, please remove it. ## Change in the default value of the `precisionRounding` configuration option HyperFormula 3.0.0 introduces a change in the default value of the `precisionRounding` configuration option. The new default value is `10`. If you want to keep the old behavior, set the `precisionRounding` option to `14` in the HyperFormula configuration: ```javascript const hf = HyperFormula.buildEmpty({ precisionRounding: 14 }); ``` --- ## Named expressions URL: https://hyperformula.handsontable.com/docs/guide/named-expressions # Named expressions An expression can be assigned a human-friendly name. Thanks to this you can refer to that name anywhere across the workbook. Names are especially useful when you use some references repeatedly. In this case, names simplify the formulas and reduce the risk of making a mistake. Such a worksheet is also easier to maintain. You can name a formula, string, number, or any other type of data. By default, references in named expressions are absolute. Most people use absolute references in spreadsheet software like Excel without even knowing about it. Very few know that references can be relative too. Unfortunately, HyperFormula doesn't support relative references inside named expressions at the moment. Dynamic ranges are supported through functions such as INDEX and OFFSET. Named ranges can overlap each other, e.g., it is possible to define the names as follows: - rangeOne: Sheet1!$A$1:$D$10 - rangeTwo: Sheet1!$A$1:$E$1 ## Examples | Type | Custom name | Example expression | |:------------------------|:------------|:--------------------------| | Named cell | myCell | =Sheet1!$A$1 | | Named range of cells | myRange | =Sheet1!$A$1:$D$10 | | Named constant (number) | myNumber | =10 | | Named constant (string) | myText | ="One Small Step for Man" | | Named formula | myFormula | =SUM(Sheet1!$A$1:$D$10) | ## Naming rules Expression names are case-insensitive, and they: - Must start with a Unicode letter or with an underscore (`_`). - Can contain only Unicode letters, numbers, underscores, and periods (`.`). - Can't be the same as any possible reference in the A1 notation (for example, `Q4` or `YEAR2023`). - Can't be the same as any possible reference in the R1C1 notation (for example, `R4C5`, `RC` or `R0C`). - Must be unique within a given scope. > Expression names must be unique within a given scope, but you can override a > global named-expression with a local one. For example: > > ```javascript > // `MyRevenue` has to be unique within the global scope > hfInstance.addNamedExpression('MyRevenue', '=SUM(100+10)'); > > // but you can still use `MyRevenue` within the local scope of Sheet2 (sheetId = 1) > hfInstance.addNamedExpression('MyRevenue', '=Sheet2!$A$1+100', 1); > ``` For examples of valid and invalid expression names, see the following table: | Name | Validity | |:------------|:---------| | my Revenue | Invalid | | myRevenue | Valid | | quarter1 | Invalid | | quarter_1 | Valid | | 1stQuarter | Invalid | | _1stQuarter | Valid | | .NET | Invalid | | ASP.NET | Valid | | A1 | Invalid | | $A$1 | Invalid | | RC | Invalid | ## Using named expressions in formulas Named expressions can be used in any formula by referencing their names. Use them anywhere you would normally use a cell reference, range, or constant value. ```javascript // Define named expressions hfInstance.addNamedExpression('TaxRate', '=0.08'); hfInstance.addNamedExpression('SalesData', '=Sheet1!$A$1:$A$10'); // Use them in formulas hfInstance.setCellContents({sheet: 0, col: 2, row: 0}, [['=SUM(SalesData)']]); hfInstance.setCellContents({sheet: 0, col: 2, row: 1}, [['=SUM(SalesData) * TaxRate']]); ``` ## Using named ranges in formulas A named expression that resolves to a range of cells behaves differently depending on where it is used: - **As a function argument** — it works as expected. `=SUM(myRange)`, `=COUNT(myRange)`, and `=INDEX(myRange, 1, 1)` all operate on the full range. - **As an operand of an operator** — the range is reduced to a single cell before the operation. In `=myRange + 1`, only the cell of the range that shares the formula's row (for a vertical range) or column (for a horizontal range) is used. If the formula's row or column falls outside the range, or the range is two-dimensional, the result is a `#VALUE!` error. - **As a bare reference** — `=myRange` on its own returns a `#VALUE!` error; a range cannot be placed directly into a single cell. In the default mode the range is reduced before the operator runs, so `=SUM(myRange + 1)` adds 1 to that single reduced value rather than to every element (for a formula in row 1 of a vertical range, the result is `SUM(A1 + 1)`). When array arithmetic is enabled (`useArrayArithmetic: true`), named ranges still work as function arguments and aggregate correctly, but as an operand they behave differently from the default mode: - A bare `=myRange + 1` does not spill — it returns a `#VALUE!` error rather than producing one result per element. - Inside an aggregate the operator becomes element-wise. `=SUM(myRange + 1)` adds 1 to every element and then sums, so for `myRange` covering values `1..5` it returns `20` (`SUM(2, 3, 4, 5, 6)`), not the single reduced value of the default mode. ## Available methods These are the basic methods that can be used to add and manipulate named expressions, including the creation and handling of named ranges. The full list of methods is available in the [API reference](https://hyperformula.handsontable.com/docs/api). ### Adding a named expression You can add a named expression in two ways: **During engine initialization**: You can provide named expressions as a parameter when creating a HyperFormula instance using the factory methods `buildEmpty`, `buildFromArray`, or `buildFromSheets`. This is the most efficient way to add multiple named expressions at once. ```javascript // Define named expressions during initialization const namedExpressions = [ { name: 'prettyName', expression: '=Sheet1!$A$1+100', scope: 0 // optional: local scope for 'Sheet1' }, { name: 'globalConstant', expression: '=42' // no scope specified = global scope } ]; // Create engine with named expressions const hfInstance = HyperFormula.buildEmpty({}, namedExpressions); // or const hfInstance = HyperFormula.buildFromArray(sheetData, {}, namedExpressions); // or const hfInstance = HyperFormula.buildFromSheets(sheetsData, {}, namedExpressions); ``` **After engine creation**: You can add a named expression by using the `addNamedExpression` method. It accepts name for the expression, the expression as a raw cell content, and optionally the scope. If you do not define the scope it will be set to global, meaning the expression name will be valid for the whole workbook. If you want to add many of them, it is advised to do so in a [batch](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). This method returns [an array of changed cells](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). ```javascript // add 'prettyName' expression to the local scope of 'Sheet1' (sheetId = 0) const changes = hfInstance.addNamedExpression( 'prettyName', '=Sheet1!$A$1+100', 0 ); ``` ### Changing a named expression You can change a named expression by using the `changeNamedExpression` method. Select the name of an expression to change and pass it as the first parameter, then define the new expression as raw cell content and optionally add the scope. If you do not define the scope it will be set to global, meaning the expression will be valid for the whole workbook. If you want to change many of them, it is advised to do so in a [batch](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). This method returns [an array of changed cells](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). ```javascript // change the named expression const changes = hfInstance.changeNamedExpression( 'prettyName', '=Sheet1!$A$1+200' ); ``` ### Removing a named expression You can remove a named expression by using the `removeNamedExpression` method. Select the name of an expression to remove and pass it as the first parameter and optionally define the scope. If you do not define the scope it will be understood as global, meaning, the whole workbook. This method returns [an array of changed cells](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#changes-array). ```javascript // remove 'prettyName' expression from 'Sheet1' (sheetId=0) const changes = hfInstance.removeNamedExpression('prettyName', 0); ``` ### Listing all named expressions You can retrieve a whole list of named expressions by using the `listNamedExpressions` method. It requires no parameters and returns all named expressions as an array of strings. ```javascript // get all named-expression names const listOfExpressions = hfInstance.listNamedExpressions(); ``` ## Handling errors Operations on named expressions throw errors when something goes wrong. These errors can be [handled](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#handling-an-error) to provide a good user experience in the application. It is also possible to check the availability of operations using `isItPossibleTo*` methods, which are also described in [that section](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#isitpossibleto-methods). --- ## Order of precedence URL: https://hyperformula.handsontable.com/docs/guide/order-of-precendece # Order of precedence HyperFormula supports multiple [operators](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md) that can be used to perform mathematical operations in a formula. These operators are calculated in a specific order. If the formula contains operators of equal precedence, like addition and subtraction, then they are evaluated from left to right. ## Table of precedence In the table below you can find the order in which HyperFormula performs operations (from highest to lowest priority).
Precedence Operator Description
1

: (colon)

, (comma)

(space)

Reference operators: range (colon), union (comma), intersection (space).

Currently supported by HyperFormula only at the grammar level of a function.

2 Negation
3 % Percent
4 ^ Exponentiation
5 * and / Multiplication and division
6 + and – Addition and subtraction
7 & (ampersand) Concatenation of two or more text strings
8

< (less than)

= (equal to) > (greater than)

<= (less than or equal to)

>= (greater than or equal to)

<> (not equal to)

Comparison
## Using parentheses HyperFormula calculates the formulas in parentheses first so by using them you can override the default order of evaluation. For instance, consider this formula: =7 * 8 + 2. After the equal sign, there are operands (7, 8, 2) that are separated by operators (* and +). Following the order of calculations, HyperFormula computes 7*8 first and then adds 2. The correct answer to this equation is 58. Placing (8+2) in parenthesis will change the result as HyperFormula will first calculate 8 + 2 = 10, and after that will multiply it by 7. Now the result is 70, not 58 as in the first example. --- ## Performance URL: https://hyperformula.handsontable.com/docs/guide/performance # Performance We implemented various techniques to boost the performance of HyperFormula. In some cases, turning them on or off might increase the performance of your app. Below we provide a number of tips on how to speed it up. ## VLOOKUP/MATCH If you are planning to use VLOOKUP or MATCH heavily in your app, you may consider enabling the `useColumnIndex` flag in the HyperFormula configuration. It will increase memory usage but can significantly improve the performance of these two functions, especially when running on unsorted or very large data sets. The column index will not be used despite the option `useColumnIndex` enabled when using **wildcards** or **regular expressions**. Leaving this option disabled will cause the engine to use binary search when dealing with sorted data, and the naive approach otherwise. ## Address mapping strategies HyperFormula uses two approaches to store the mapping of cell addresses in order to optimize memory usage. The choice of the strategy is made independently for each sheet. The `chooseAddressMappingPolicy` option allows for changing the way the strategy will be chosen. You may use one of three built-in policies: * `AlwaysDense` – uses dense mapping for each sheet. This policy is particularly useful when the spreadsheet is a densely filled rectangle. * `AlwaysSparse` – uses sparse mapping for each sheet. This approach is useful when in your spreadsheet/dataset there are relatively few cells filled, but located very far from each other. * `DenseSparseChooseBasedOnThreshold` – the choice is made based on the fill ratio of the sheet. Let the engine choose the best strategy for you. ## Lazy transformation cleanup Structural operations (adding/removing rows/columns, moving cells) create transformations that are applied lazily to formulas. Over time, these transformations accumulate in memory. HyperFormula automatically flushes them when their count reaches the `maxPendingLazyTransformations` threshold (default: 50). You can tune this setting to balance memory usage and CPU overhead: * **Lower values** (e.g., 10) reduce peak memory usage but trigger cleanup more frequently, adding slight CPU overhead per flush. * **Higher values** (e.g., 200) reduce the frequency of cleanup but allow more memory to accumulate between flushes. * The default of **50** works well for most use cases. ```javascript const hf = HyperFormula.buildEmpty({ licenseKey: 'gpl-v3', maxPendingLazyTransformations: 100, }) ``` ## Suspending automatic recalculations By default, HyperFormula recalculates formulas after every change. However, due to the fact that we store the graph of dependencies between cells in the sheet, we recalculate only the cells affected by the update. Sometimes, a simple change can cause recalculation of a large part of the sheet, e.g., when the modified cell is at the very beginning of the dependency chain or when there are many [volatile functions](https://hyperformula.handsontable.com/docs/guide/volatile-functions.md) in the worksheet. In such a case you may want to postpone the recalculation. The first option is to call `suspendEvaluation` before making changes and `resumeEvaluation` at a convenient moment. The second option is to pass the callback function with multiple operations to a [batch function](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). Recalculation will be suspended before performing operations and resumed after them. In cases where you perform operations which may not cause a recalculation but only change the shape of the worksheet, like `addRows`, `removeRows`, or `moveColumns` , we do not recommend suspending recalculation, as this may have a slightly negative impact on performance. --- ## Server-side installation URL: https://hyperformula.handsontable.com/docs/guide/server-side-installation # Server-side installation > For full compatibility, the minimum required version of **Node is 13**. > It is related to the support for ICU. There is a possibility to use > lower versions of Node but you need to install an additional package > as the dependency: [`full-icu`](https://github.com/unicode-org/full-icu-npm) The basic steps are very similar to the ones in the [client-side installation](https://hyperformula.handsontable.com/docs/guide/client-side-installation.md) process. ## Install with npm or Yarn You can install the latest version of HyperFormula with popular packaging managers. Navigate to your project folder and run the following command: **npm:** ```bash $ npm install hyperformula ``` **Yarn:** ```bash $ yarn add hyperformula ``` The package will be added to your `package.json` file and installed in the `./node_modules` directory. Then you can just `require` it: ```javascript const { HyperFormula } = require('hyperformula'); // your code ``` --- ## Quality & Security URL: https://hyperformula.handsontable.com/docs/guide/quality # Quality & Security HyperFormula is built with the highest standards of software quality, backed by rigorous research, comprehensive testing, and transparent development practices. ## Research Foundation HyperFormula originated as a research and development project **funded by the European Union**. The project was **successfully executed and positively evaluated** by The National Centre for Research and Development in Poland, validating both the technical approach and implementation quality. This EU funding provided the foundation for developing a calculation engine that meets the highest academic and industry standards. ## Expert Development Team HyperFormula is developed by a team of highly qualified experts: - **Computer Science specialists** with Master's and PhD degrees - **Mathematics experts** with deep knowledge in numerical computation - **Software engineering professionals** with years of enterprise-grade experience ## Comprehensive Testing Quality assurance is at the heart of our development process: - **Over 5,000 unit tests** covering all aspects of the calculation engine - **97% test coverage** ensuring virtually every line of code is verified - Continuous integration across multiple environments - Regular performance comparisons between versions > Our high test coverage means you can be confident that HyperFormula will behave predictably in your application, even in complex scenarios. ## Open Source Transparency HyperFormula's **entire source code is available on GitHub**, providing complete transparency that allows you to: - **Inspect the implementation** to understand exactly how calculations are performed - **Verify the quality** of the code and development practices - **Contribute improvements** or report issues directly to the development team - **Build confidence** through code reviews and community oversight [View the source code on GitHub →](https://github.com/handsontable/hyperformula) ## Real-World Validation HyperFormula powers **Handsontable**, one of the most popular data grid solutions in JavaScript, trusted by thousands of developers worldwide. Additionally, HyperFormula is used by many other projects and organizations, providing continuous validation of its stability and performance across diverse applications. ## Security HyperFormula maintains the highest security standards to protect your applications: - **Regular external security audits** conducted by independent security experts - **Dependency vulnerability scanning** using industry-leading tools including Fossa, Dependabot, and Snyk - **Security risk assessments** to identify and mitigate potential threats - **Proactive monitoring** of security advisories and immediate response to emerging threats ### Independent security certificate In July 2026, HyperFormula was awarded a security certificate by **TestArmy Group S.A.** (signed by Wojciech Humiński, CEO), confirming an independent security assessment of the library. The assessment covered HyperFormula [v3.3.0](https://www.npmjs.com/package/hyperformula/v/3.3.0) and included: - **Code review and white-box penetration testing** of the source code - **Static, dynamic, and manual code analysis** carried out against the OWASP Application Security Verification Standard (ASVS), with a focus on the OWASP Top 10 - **Dependency and dev-dependency analysis** to identify vulnerabilities in third-party packages [Download the security certificate (PDF) →](https://hyperformula.handsontable.com/docs/hyperformula_security_certificate.pdf) ## Quality Assurance Process Our development includes multiple quality layers: 1. **Code Reviews** - All changes are peer-reviewed by experienced developers 2. **Automated Testing** - Comprehensive test suite runs on every commit 3. **Performance Testing** - Regular benchmarking ensures optimal performance 4. **Cross-Platform Testing** - Verification across different browsers and Node.js versions 5. **Documentation Reviews** - All features are thoroughly documented and reviewed ## Professional Support HyperFormula offers comprehensive support options to ensure your success: - **Direct contact with the dev team** through GitHub platform - **Premium support** for companies using HyperFormula in mission-critical applications - **Consulting services** for turn-key solutions, including proof of concepts, deployment strategies, and custom feature development Our expert team has been supporting enterprises since 2012 and understands how to respond to individual business needs. [Learn more about support options →](https://hyperformula.handsontable.com/#pricing) --- ## Set up your coding agent URL: https://hyperformula.handsontable.com/docs/guide/setup-coding-agent # Set up your coding agent HyperFormula ships an official Claude skill and machine-readable docs so your AI coding agent can scaffold, configure, and debug HyperFormula correctly. Pick your tool below, or use the interactive wizard. ## Claude Code Install the official skill from the plugin marketplace: ``` /plugin marketplace add handsontable/handsontable-skills /plugin install handsontable-skills@handsontable-skills ``` Claude Code loads the `hyperformula` skill automatically based on what you ask. ## Cursor, Copilot & other agents These tools don't yet support the Claude skill format. Point your agent at the machine-readable docs instead: - **Full corpus:** [`llms-full.txt`](https://hyperformula.handsontable.com/docs/llms-full.txt) — the entire documentation in one LLM-friendly file. - **Per-page Markdown:** append `.md` to a docs page URL (e.g. `/docs/guide/basic-usage.md`), or use the **View as Markdown** link on any page. For agents that read a rules file (e.g. Cursor's `AGENTS.md`), add a line pointing at the corpus URL so the agent fetches authoritative docs on demand. ## Live docs via MCP (any agent) Two zero-setup ways to let an agent pull authoritative HyperFormula docs on demand: - **GitMCP** — add the MCP server `https://gitmcp.io/handsontable/hyperformula` to your agent (e.g. `claude mcp add --transport http hyperformula https://gitmcp.io/handsontable/hyperformula`). It serves this GitHub repository's docs. No install, no auth. - **Context7** — run `npx -y @upstash/context7-mcp` (or use the Context7 skill / `ctx7` CLI) and ask for the `hyperformula` library. Context7 indexes the repository's `docs` folder (see `context7.json` in the repo root). ## Manual install (any Claude Code setup) ```bash git clone https://github.com/handsontable/handsontable-skills.git cp -r handsontable-skills/skills/hyperformula ~/.claude/skills/ ``` ## Resources - [Official skill repository](https://github.com/handsontable/handsontable-skills) - [`llms-full.txt`](https://hyperformula.handsontable.com/docs/llms-full.txt) - [API reference](https://hyperformula.handsontable.com/docs/api/) --- ## Release notes URL: https://hyperformula.handsontable.com/docs/guide/release-notes # Release notes This page lists HyperFormula release notes. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). HyperFormula adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 3.4.0 **Release date: August 10, 2026** ### Added - Added the `getAvailableFunctions()` and `getFunctionDetails()` instance methods for retrieving function metadata. [#1692](https://github.com/handsontable/hyperformula/pull/1692) - Added new functions: VSTACK, HSTACK. [#1698](https://github.com/handsontable/hyperformula/pull/1698) - Added a new function: `XIRR`. [#1701](https://github.com/handsontable/hyperformula/pull/1701) - Added the UNIQUE function. [#1708](https://github.com/handsontable/hyperformula/pull/1708) - Added the SORT function. [#1707](https://github.com/handsontable/hyperformula/pull/1707) - Added an Indonesian (Bahasa Indonesia) language pack. [#1674](https://github.com/handsontable/hyperformula/pull/1674) - Added a `stringifyCurrency` config option that lets you plug in a custom currency formatter for the `TEXT` function. [#1145](https://github.com/handsontable/hyperformula/issues/1145) ### Fixed - Fixed the behavior of `MATCH`, `VLOOKUP`, `HLOOKUP`, and `XLOOKUP` functions when the search range contained empty cells. [#1697](https://github.com/handsontable/hyperformula/pull/1697) - Fixed the `VLOOKUP`, `HLOOKUP`, and `XLOOKUP` functions to return `0` instead of an empty value when the matched cell in the result range is empty. [#1697](https://github.com/handsontable/hyperformula/pull/1697) - Fixed the page freezing when entering a long string of digits containing a non-digit character near the end (e.g. `012...789a` or `012...789 123`) into a cell. [#1520](https://github.com/handsontable/hyperformula/issues/1520) ## 3.3.0 **Release date: May 20, 2026** ### Added - Added 12 database functions: DCOUNT, DSUM, DAVERAGE, DMAX, DMIN, DGET, DPRODUCT, DCOUNTA, DSTDEV, DSTDEVP, DVAR, DVARP. [#1652](https://github.com/handsontable/hyperformula/pull/1652) - Added new functions: PERCENTILE, PERCENTILE.INC, PERCENTILE.EXC, QUARTILE, QUARTILE.INC, QUARTILE.EXC. [#1650](https://github.com/handsontable/hyperformula/pull/1650) - Added `maxPendingLazyTransformations` configuration option to control memory usage by limiting accumulated transformations before cleanup. [#1629](https://github.com/handsontable/hyperformula/issues/1629) - Added a new function: TEXTJOIN. [#1640](https://github.com/handsontable/hyperformula/pull/1640) - Added a new function: SEQUENCE. [#1645](https://github.com/handsontable/hyperformula/pull/1645) ### Fixed - Fixed a memory leak in `LazilyTransformingAstService` where the transformations array grew unboundedly, causing increasing memory usage over time. [#1629](https://github.com/handsontable/hyperformula/issues/1629) - Fixed a memory leak in `UndoRedo` where `oldData` entries for evicted undo stack entries were never cleaned up, causing increasing memory usage over time. [#1629](https://github.com/handsontable/hyperformula/issues/1629) - Fixed the IRR function returning `#NUM!` error when the initial investment significantly exceeds the sum of returns. [#1628](https://github.com/handsontable/hyperformula/issues/1628) - Fixed the ADDRESS function ignoring `defaultValue` when arguments are syntactically empty (e.g., `=ADDRESS(2,3,,FALSE())`). [#1632](https://github.com/handsontable/hyperformula/issues/1632) ## 3.2.0 **Release date: February 19, 2026** ### Added - Added a new function: IRR. [#1591](https://github.com/handsontable/hyperformula/issues/1591) - Added a new function: N. [#1585](https://github.com/handsontable/hyperformula/issues/1585) - Added a new function: VALUE. [#1592](https://github.com/handsontable/hyperformula/issues/1592) ### Fixed - Fixed `Error Map maximum size exceeded` error when loading big spreadsheets. [#1602](https://github.com/handsontable/hyperformula/issues/1602) ## 3.1.1 **Release date: December 18, 2025** ### Fixed - Fixed an issue where cells were not recalculated after adding, removing and renaming sheets. [#1116](https://github.com/handsontable/hyperformula/issues/1116) - Fixed an issue where overwriting a non-computed cell caused the `Value of the formula cell is not computed` error. [#1194](https://github.com/handsontable/hyperformula/issues/1194) ## 3.1.0 **Release date: October 14, 2025** ### Changed - Renamed the `arraySizeMethod` parameter in the `FunctionMetadata` interface to `sizeOfResultArrayMethod`. The `arraySizeMethod` is deprecated and will be removed in one of the next major releases. [#1401](https://github.com/handsontable/hyperformula/issues/1401) - Renamed the `arrayFunction` parameter in the `FunctionMetadata` interface to `enableArrayArithmeticForArguments`. The `arrayFunction` is deprecated and will be removed in one of the next major releases. [#1401](https://github.com/handsontable/hyperformula/issues/1401) ### Fixed - Fixed an issue where the `OFFSET` function was ignoring the sheet reference in the provided address. [#1477](https://github.com/handsontable/hyperformula/issues/1477) ## 3.0.1 **Release date: August 11, 2025** ### Fixed - Fixed `Edge does not exist` error when a named expression is used twice in the same formula. [#1102](https://github.com/handsontable/hyperformula/issues/1102) - Fixed typos in the built-in functions guide. [#1517](https://github.com/handsontable/hyperformula/issues/1517) - Fixed an issue where named expressions added on engine initialization were not updated on changes. [#1501](https://github.com/handsontable/hyperformula/issues/1501) ## 3.0.0 **Release date: January 14, 2025** ### Added - Added a new function: XLOOKUP. [#1458](https://github.com/handsontable/hyperformula/issues/1458) ### Changed - **Breaking change**: Changed ES module build to use `mjs` files and `exports` property in `package.json` to make importing language files possible in Node environment. [#1344](https://github.com/handsontable/hyperformula/issues/1344) - **Breaking change**: Changed the default value of the `precisionRounding` configuration option to `10`. [#1300](https://github.com/handsontable/hyperformula/issues/1300) - Make methods `simpleCellAddressToString` and `simpleCellRangeToString` more logical and easier to use. [#1151](https://github.com/handsontable/hyperformula/issues/1151) ### Removed - **Breaking change**: Removed the `binarySearchThreshold` configuration option. [#1439](https://github.com/handsontable/hyperformula/issues/1439) ## 2.7.1 **Release date: July 18, 2024** ### Fixed - Fixed an issue where adding or removing columns with `DenseStrategy` for address mapping resulted in the `Cannot read properties of undefined (reading 'splice')` error. [#1406](https://github.com/handsontable/hyperformula/issues/1406) ## 2.7.0 **Release date: Apr 10, 2024** ### Added - Added method `getNamedExpressionsFromFormula` to extract named expressions from formulas. [#1365](https://github.com/handsontable/hyperformula/issues/1365) - Added `context` config option for passing data to custom functions. [#1396](https://github.com/handsontable/hyperformula/issues/1396) ## 2.6.2 **Release date: Feb 15, 2024** ### Changed - Removed `unorm` dependency. [#1370](https://github.com/handsontable/hyperformula/issues/1370) ## 2.6.1 **Release date: Dec 27, 2023** ### Fixed - Fixed an issue where operating on ranges of incompatible sizes resulted in a runtime exception. [#1267](https://github.com/handsontable/hyperformula/issues/1267) - Fixed an issue where the [`simpleCellAddressFromString()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#simplecelladdressfromstring) method was crashing when called with a non-ASCII character in an unquoted sheet name. [#1312](https://github.com/handsontable/hyperformula/issues/1312) - Fixed an issue where adding a row to a very large spreadsheet resulted in the `Maximum call stack size exceeded` error. [#1332](https://github.com/handsontable/hyperformula/issues/1332) - Fixed an issue where using a column-range reference to an empty sheet as a function argument resulted in the `Incorrect array size` error. [#1147](https://github.com/handsontable/hyperformula/issues/1147) - Fixed an issue where the SUBSTITUTE function wasn't working correctly with regex special characters. [#1289](https://github.com/handsontable/hyperformula/issues/1289) - Fixed a typo in the JSDoc comment of the `HyperFormula` class. [#1323](https://github.com/handsontable/hyperformula/issues/1323) ## 2.6.0 **Release date: Sep 19, 2023** ### Added - Exported the `EmptyValue` symbol as a public API. This allows custom functions to handle empty cell values. [#1232](https://github.com/handsontable/hyperformula/issues/1265) ### Changed - Improved the efficiency of the default date/time parsing methods. [#876](https://github.com/handsontable/hyperformula/issues/876) - Improved the efficiency of the operations on the dependency graph. [#876](https://github.com/handsontable/hyperformula/issues/876) ### Fixed - Fixed a bug where neighboring exported changes of an array formula were missing. [#1291](https://github.com/handsontable/hyperformula/issues/1291) - Fixed a typo in the source code of the `MatrixPlugin`. [#1306](https://github.com/handsontable/hyperformula/issues/1306) ## 2.5.0 **Release date: May 29, 2023** ### Added - Added a new function: ADDRESS. [#1221](https://github.com/handsontable/hyperformula/issues/1221) - Added a new function: HYPERLINK. [#1215](https://github.com/handsontable/hyperformula/issues/1215) - Added a new function: IFS. [#1157](https://github.com/handsontable/hyperformula/issues/1157) ### Changed - Optimized the [`updateConfig()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) method to rebuild HyperFormula only when the new configuration is different from the old one. [#1251](https://github.com/handsontable/hyperformula/issues/1251) ### Fixed - Fixed the SEARCH function to be case-insensitive regardless of HyperFormula's configuration. [#1225](https://github.com/handsontable/hyperformula/issues/1225) ## 2.4.0 **Release date: April 24, 2023** ### Added - Exported the [`CellError`](https://hyperformula.handsontable.com/docs/api/classes/cellerror.md) class as a public API. [#1232](https://github.com/handsontable/hyperformula/issues/1232) - Exported the [`SimpleRangeValue`](https://hyperformula.handsontable.com/docs/api/classes/simplerangevalue.md) class as a public API. [#1178](https://github.com/handsontable/hyperformula/issues/1178) ### Fixed - Fixed an `EmptyCellVertex` data integrity issue between the `AddressMapping` and `DependencyGraph` objects. [#1188](https://github.com/handsontable/hyperformula/issues/1188) - Fixed a build issue with M1- and M2-chip MacBooks. [#1166](https://github.com/handsontable/hyperformula/issues/1166) - Fixed an issue where the order of items returned by [`removeColumns()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#removecolumns) depended on the address mapping policy. [#1205](https://github.com/handsontable/hyperformula/issues/1205) ## 2.3.1 **Release date: March 3, 2023** ### Fixed - Fixed an issue where named-expression names were not allowed to start with a cell reference. [#1058](https://github.com/handsontable/hyperformula/issues/1058) - Fixed an issue where named-expression names were allowed to start with "R1C1" cell references. For better compatibility with other spreadsheet software, strings such as `R4C5`, `RC1000`, `R1C` or `RC` can't be used in named-expression names anymore. [#1058](https://github.com/handsontable/hyperformula/issues/1058) - Fixed an issue where using reversed ranges with absolute addressing could cause the `Incorrect array size` error. [#1106](https://github.com/handsontable/hyperformula/issues/1106) - Fixed an issue where removing a sheet (`removeSheet()`) without clearing it (`clearSheet()`) could cause an error. [#1121](https://github.com/handsontable/hyperformula/issues/1121) ## 2.3.0 **Release date: December 22, 2022** ### Added - Exported the [`ArraySize`](https://hyperformula.handsontable.com/docs/api/classes/arraysize.md) class as a public API. [#843](https://github.com/handsontable/hyperformula/issues/843) - Renamed an internal interface from `ArgumentTypes` to [`FunctionArgumentType`](https://hyperformula.handsontable.com/docs/api/classes/hyperformulans.md#functionargumenttype), and exported it as a public API. [#1108](https://github.com/handsontable/hyperformula/pull/1108) - Exported `ImplementedFunctions` and `FunctionMetadata` as public APIs. [#1108](https://github.com/handsontable/hyperformula/pull/1108) ## 2.2.0 **Release date: November 17, 2022** ### Added - Added an American English (`enUS`) language pack. It's a convenience alias: it contains the same translations as the existing British English (`enGB`) language pack. [#1025](https://github.com/handsontable/hyperformula/issues/1025) ### Fixed - Fixed functions VLOOKUP and HLOOKUP to handle duplicates in the way specified by the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html#HLOOKUP) standard. [#1072](https://github.com/handsontable/hyperformula/issues/1072) - Fixed the MATCH function to handle descending ranges in the way specified by the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html#MATCH) standard. [#1063](https://github.com/handsontable/hyperformula/issues/1063) ## 2.1.0 **Release date: September 8, 2022** ### Added - Added two new functions: MAXIFS and MINIFS. [#1049](https://github.com/handsontable/hyperformula/issues/1049) ### Changed - Changed the rounding strategy of the default time-parsing function to be independent of the [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats) configuration option. Now, time values are always rounded to the nearest millisecond (0.001 s). [#953](https://github.com/handsontable/hyperformula/issues/953) ### Fixed - Fixed a rounding issue that caused the TEXT function to convert dates and times to strings incorrectly. [#1043](https://github.com/handsontable/hyperformula/issues/1043) - Fixed an issue where functions SUMIF, SUMIFS, COUNTIF, COUNTIFS, and AVERAGEIF incorrectly handled complex numeric values. [#951](https://github.com/handsontable/hyperformula/issues/951) ### Removed - Removed all polyfills from the CommonJS build and the ES modules build. In the UMD build, kept only the polyfills required by the [supported browsers](https://hyperformula.handsontable.com/guide/supported-browsers.html). [#1011](https://github.com/handsontable/hyperformula/issues/1011) ## 2.0.1 **Release date: June 14, 2022** ### Changed - Changed the following npm scripts (used internally): `docs`, `docs:api`, `docs:dev`, `docs:build`, `coverage`, `typings:check`. [#977](https://github.com/handsontable/hyperformula/issues/977) ### Fixed - Fixed an issue where it was impossible to add a custom function with no `parameters`. [#968](https://github.com/handsontable/hyperformula/issues/968) ## 2.0.0 **Release date: April 14, 2022** ### Added - Added support for reversed ranges. [#834](https://github.com/handsontable/hyperformula/issues/834) - Added a new configuration option, [`ignoreWhiteSpace`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#ignorewhitespace), which allows for parsing formulas that contain whitespace characters of any kind. [#898](https://github.com/handsontable/hyperformula/issues/898) ### Changed - **Breaking change**: Removed the `gpu.js` dependency and its use, to speed up the installation time. [#812](https://github.com/handsontable/hyperformula/issues/812) - **Breaking change**: Removed the deprecated `gpujs` and `gpuMode` configuration options. [#812](https://github.com/handsontable/hyperformula/issues/812) ### Fixed - Fixed an issue where the RATE function didn't converge for some inputs. [#905](https://github.com/handsontable/hyperformula/issues/905) ## 1.3.1 **Release date: January 11, 2022** ### Fixed - Fixed an issue where warnings about deprecated configuration options were getting duplicated. [#882](https://github.com/handsontable/hyperformula/pull/882) ## 1.3.0 **Release date: October 20, 2021** ### Added - Added a new static property: [`HyperFormula.defaultConfig`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#defaultconfig). [#822](https://github.com/handsontable/hyperformula/issues/822) - The [`getFillRangeData()`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#getfillrangedata) method can now use one sheet for its source and another sheet for its target. [#836](https://github.com/handsontable/hyperformula/issues/836) ### Fixed - Fixed the handling of Unicode characters and non-letter characters in the [PROPER](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#text) function. [#811](https://github.com/handsontable/hyperformula/issues/811) - Fixed unnecessary warnings caused by deprecated configuration options. [#830](https://github.com/handsontable/hyperformula/issues/830) - Fixed the [SUMPRODUCT](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#math-and-trigonometry) function. [#810](https://github.com/handsontable/hyperformula/issues/810) ## 1.2.0 **Release date: September 23, 2021** ### Changed - Removed `gpu.js` from optional dependencies and marked config options `gpujs` and `gpuMode` as deprecated. ## 1.1.0 **Release date: August 12, 2021** ### Added - Added support for the array arithmetic mode in the `calculateFormula()` method. [#782](https://github.com/handsontable/hyperformula/issues/782) - Added a new `CellType` returned by `getCellType`: `CellType.ARRAYFORMULA`. It's assigned to the top-left corner of an array, and is recognized by the `isCellPartOfArray()` and `doesCellHaveFormula()` methods. [#781](https://github.com/handsontable/hyperformula/issues/781) ### Changed - Deprecated the `binarySearchThreshold` configuration option, as every search of sorted data always uses binary search. [#791](https://github.com/handsontable/hyperformula/pull/791) ### Fixed - Fixed an issue with searching sorted data. [#787](https://github.com/handsontable/hyperformula/issues/787) - Fixed the `destroy` method to properly destroy HyperFormula instances. [#788](https://github.com/handsontable/hyperformula/pull/788) ## 1.0.0 **Release date: July 15, 2021** ### Added - Added support for array arithmetic. [#628](https://github.com/handsontable/hyperformula/issues/628) - Added performance improvements for array handling. [#629](https://github.com/handsontable/hyperformula/issues/629) - Added ARRAYFORMULA function. [#630](https://github.com/handsontable/hyperformula/issues/630) - Added FILTER function. [#668](https://github.com/handsontable/hyperformula/issues/668) - Added ARRAY_CONSTRAIN function. [#661](https://github.com/handsontable/hyperformula/issues/661) - Added casting to scalars from non-range arrays. [#663](https://github.com/handsontable/hyperformula/issues/663) - Added support for range interpolation. [#665](https://github.com/handsontable/hyperformula/issues/665) - Added parsing of arrays in formulas (together with respective config options for separators). [#671](https://github.com/handsontable/hyperformula/issues/671) - Added support for vectorization of scalar functions. [#673](https://github.com/handsontable/hyperformula/issues/673) - Added support for time in JS `Date()` objects on the input. [#648](https://github.com/handsontable/hyperformula/issues/648) - Added validation of API argument types for simple types. [#654](https://github.com/handsontable/hyperformula/issues/654) - Added named expression handling to engine factories. [#680](https://github.com/handsontable/hyperformula/issues/680) - Added `getAllNamedExpressionsSerialized` method. [#680](https://github.com/handsontable/hyperformula/issues/680) - Added parsing of arrays in formulas (together with respective config options for separators). [#671](https://github.com/handsontable/hyperformula/issues/671) - Added utility function for filling ranges with source from other range. [#678](https://github.com/handsontable/hyperformula/issues/678) - Added pretty print for detailedCellError. [#712](https://github.com/handsontable/hyperformula/issues/712) - Added `simpleCellRangeFromString` and `simpleCellRangeToString` helpers. [#720](https://github.com/handsontable/hyperformula/issues/720) - Added `CellError` to exports. [#736](https://github.com/handsontable/hyperformula/issues/736) - Added mapping policies to the exports: `AlwaysDense`, `AlwaysSparse`, `DenseSparseChooseBasedOnThreshold`. [#747](https://github.com/handsontable/hyperformula/issues/747) - Added `#SPILL!` error type. [#708](https://github.com/handsontable/hyperformula/issues/708) - Added large tests for CRUD interactions. [#755](https://github.com/handsontable/hyperformula/issues/755) - Added a flag to `getFillRangeData` to support different types of offsetting. [#767](https://github.com/handsontable/hyperformula/issues/767) ### Changed - **Breaking change**: Changed API of many sheet-related methods to take sheetId instead of sheetName as an argument. [#645](https://github.com/handsontable/hyperformula/issues/645) - **Breaking change**: Removed support for matrix formulas (`{=FORMULA}`) notation. Engine now supports formulas returning array of values (instead of only scalars). [#652](https://github.com/handsontable/hyperformula/issues/652) - **Breaking change**: Removed numeric matrix detection along with matrixDetection and matrixDetectionThreshold config options. [#669](https://github.com/handsontable/hyperformula/issues/669) - **Breaking change**: Changed API of the following methods to take `SimpleCellRange` type argument: `copy`, `cut`, `getCellDependents`, `getCellPrecedents`, `getFillRangeData`, `getRangeFormulas`, `getRangeSerialized`, `getRangeValues`, `isItPossibleToMoveCells`, `isItPossibleToSetCellContents`, `moveCells`. [#687](https://github.com/handsontable/hyperformula/issues/687) - **Breaking change**: Changed the AGPLv3 license to GPLv3. - **Breaking change**: Removed the free non-commercial license. - **Breaking change**: Changed behaviour of `setCellContents` so that it is possible to override space occupied by spilled array. [#708](https://github.com/handsontable/hyperformula/issues/708) - **Breaking change**: Changed behaviour of `addRows/removeRows` so that it is possible to add/remove rows across spilled array without changing array size. [#708](https://github.com/handsontable/hyperformula/issues/708) - **Breaking change**: Changed behaviour of `addColumns/removeColumns` so that it is possible to add/remove columns across spilled array without changing array size. [#732](https://github.com/handsontable/hyperformula/issues/732) - **Breaking change**: Changed config options [#747](https://github.com/handsontable/hyperformula/issues/747): | before | after | | --------------------- | -------------------- | | matrixColumnSeparator | arrayColumnSeparator | | matrixRowSeparator | arrayRowSeparator | - **Breaking change**: Changed CellType.MATRIX to CellType.ARRAY [#747](https://github.com/handsontable/hyperformula/issues/747) - **Breaking change**: Changed API methods [#747](https://github.com/handsontable/hyperformula/issues/747): | before | after | | ------------------ | ----------------- | | matrixMapping | arrrayMapping | | isCellPartOfMatrix | isCellPartOfArray | - **Breaking change**: Changed Exceptions [#747](https://github.com/handsontable/hyperformula/issues/747): | before | after | | ---------------------------- | --------------------------- | | SourceLocationHasMatrixError | SourceLocationHasArrayError | | TargetLocationHasMatrixError | TargetLocationHasArrayError | - Changed SWITCH function, so it takes array as its first argument. - Changed TRANSPOSE function, so it works with data of any type. [#708](https://github.com/handsontable/hyperformula/issues/708) - Changed the way how we include `gpu.js` making it even more optional [#753](https://github.com/handsontable/hyperformula/issues/753) ### Fixed - Fixed an issue with arrays and cruds. [#651](https://github.com/handsontable/hyperformula/issues/651) - Fixed handling of arrays for ROWS/COLUMNS functions. [#677](https://github.com/handsontable/hyperformula/issues/677) - Fixed an issue with nested namedexpressions. [#679](https://github.com/handsontable/hyperformula/issues/679) - Fixed an issue with matrixDetection + number parsing. [#686](https://github.com/handsontable/hyperformula/issues/686) - Fixed an issue with NOW and TODAY functions. [#709](https://github.com/handsontable/hyperformula/issues/709) - Fixed an issue with MIN/MAX function caches. [#711](https://github.com/handsontable/hyperformula/issues/711) - Fixed an issue with caching and order of evaluation. [#735](https://github.com/handsontable/hyperformula/issues/735) ## 0.6.2 **Release date: May 26, 2021** ### Changed - Modified a private field in one of the classes to ensure broader compatibility with older TypeScript versions. [#681](https://github.com/handsontable/hyperformula/issues/681) ## 0.6.1 **Release date: May 24, 2021** ### Changed - Remove redundant `'assert'` dependency from the code. [#672](https://github.com/handsontable/hyperformula/issues/672) ### Fixed - Fixed library support for IE11. The `unorm` package is added to the dependencies. [#675](https://github.com/handsontable/hyperformula/issues/675) ## 0.6.0 **Release date: April 27, 2021** ### Added - Added two new fired events, for suspending and resuming execution. [#637](https://github.com/handsontable/hyperformula/issues/637) - Added listing in scopes to `listNamedExpressions` method. [#638](https://github.com/handsontable/hyperformula/issues/638) ### Changed - **Breaking change**: Moved `GPU.js` from `dependencies` to `devDependencies` and `optionalDependencies`. [#642](https://github.com/handsontable/hyperformula/issues/642) ### Fixed - Fixed issues with scoped named expression. [#646](https://github.com/handsontable/hyperformula/issues/646) , [#641](https://github.com/handsontable/hyperformula/issues/641) - Fixed an issue with losing formating info about DateTime numbers. [#626](https://github.com/handsontable/hyperformula/issues/626) ## 0.5.0 **Release date: April 15, 2021** ### Added - Added support for row and column reordering. [#343](https://github.com/handsontable/hyperformula/issues/343) - Added type inferrence for subtypes for number. [#313](https://github.com/handsontable/hyperformula/issues/313) - Added parsing of number literals containing '%' or currency symbol (default '$'). [#590](https://github.com/handsontable/hyperformula/issues/590) - Added ability to fallback to plain CPU implementation for functions that uses GPU.js [#355](https://github.com/handsontable/hyperformula/issues/355) ### Changed - **Breaking change**: A change to the type of value returned via serialization methods. [#617](https://github.com/handsontable/hyperformula/issues/617) - An input value should be preserved through serialization more precisely. [#617](https://github.com/handsontable/hyperformula/issues/617) - GPU.js constructor needs to be provided directly to engine configuration. [#355](https://github.com/handsontable/hyperformula/issues/355) - A deprecated config option vlookupThreshold has been removed. [#620](https://github.com/handsontable/hyperformula/issues/620) ### Fixed - Fixed minor issue. [#631](https://github.com/handsontable/hyperformula/issues/631) - Fixed a bug with serialization of some addresses after CRUDs. [#587](https://github.com/handsontable/hyperformula/issues/587) - Fixed a bug with MEDIAN function implementation. [#601](https://github.com/handsontable/hyperformula/issues/601) - Fixed a bug with copy-paste operation that could cause out of scope references [#591](https://github.com/handsontable/hyperformula/issues/591) - Fixed a bug with date parsing. [#614](https://github.com/handsontable/hyperformula/issues/614) - Fixed a bug where accent/case sensitivity was ignored for LOOKUPs. [#621](https://github.com/handsontable/hyperformula/issues/621) - Fixed a bug with handling of no time format/no date format scenarios. [#616](https://github.com/handsontable/hyperformula/issues/616) ## 0.4.0 **Release date: December 17, 2020** ### Added - Added 50 mathematical functions: ROMAN, ARABIC, FACT, FACTDOUBLE, COMBIN, COMBINA, GCD, LCM, MROUND, MULTINOMIAL, QUOTIENT, RANDBETWEEN, SERIESSUM, SIGN, SQRTPI, SUMX2MY2, SUMX2PY2, SUMXMY2, CEILING.MATH, FLOOR.MATH, FLOOR, CEILING.PRECISE, FLOOR.PRECISE, ISO.CEILING, COMPLEX, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN. [#537](https://github.com/handsontable/hyperformula/issues/537) , [#582](https://github.com/handsontable/hyperformula/issues/582) , [#281](https://github.com/handsontable/hyperformula/issues/281) , [#581](https://github.com/handsontable/hyperformula/issues/581) - Added 106 statistical functions: EXPON.DIST, EXPONDIST, FISHER, FISHERINV, GAMMA, GAMMA.DIST, GAMMADIST, GAMMALN, GAMMALN.PRECISE, GAMMA.INV, GAMMAINV, GAUSS, BETA.DIST, BETADIST, BETA.INV, BETAINV, BINOM.DIST, BINOMDIST, BINOM.INV, BESSELI, BESSELJ, BESSELK, BESSELY, CHISQ.DIST, CHISQ.DIST.RT, CHISQ.INV, CHISQ.INV.RT, CHIDIST, CHIINV, F.DIST, F.DIST.RT, F.INV, F.INV.RT, FDIST, FINV, WEIBULL, WEIBULL.DIST, HYPGEOMDIST, HYPGEOM.DIST, T.DIST, T.DIST.2T, T.DIST.RT, T.INV, T.INV.2T, TDIST, TINV, LOGNORM.DIST, LOGNORMDIST, LOGNORM.INV, LOGINV, NORM.DIST, NORMDIST, NORM.S.DIST, NORMSDIST, NORM.INV, NORMINV, NORM.S.INV, NORMSINV, PHI, NEGBINOM.DIST, NEGBINOMDIST, POISSON, POISSON.DIST, LARGE, SMALL, AVEDEV, CONFIDENCE, CONFIDENCE.NORM, CONFIDENCE.T, DEVSQ, GEOMEAN, HARMEAN, CRITBINOM, COVAR, COVARIANCE.P, COVARIANCE.S, PEARSON, RSQ, STANDARDIZE, Z.TEST, ZTEST, F.TEST, FTEST, STEYX, SLOPE, CHITEST, CHISQ.TEST, T.TEST, TTEST, SKEW.P, SKEW, WEIBULLDIST, VARS, TINV2T, TDISTRT, TDIST2T, STDEVS, FINVRT, FDISTRT, CHIDISTRT, CHIINVRT, COVARIANCEP, COVARIANCES, LOGNORMINV, POISSONDIST, SKEWP. [#152](https://github.com/handsontable/hyperformula/issues/152) , [#154](https://github.com/handsontable/hyperformula/issues/154) , [#160](https://github.com/handsontable/hyperformula/issues/160) - Added function aliases mechanism. [#569](https://github.com/handsontable/hyperformula/pull/569) - Added support for scientific notation. [#579](https://github.com/handsontable/hyperformula/issues/579) - Added support for complex numbers. [#281](https://github.com/handsontable/hyperformula/issues/281) ### Changed - A **breaking change**: CEILING function implementation to be consistent with existing implementations. [#582](https://github.com/handsontable/hyperformula/issues/582) ### Fixed - Fixed a problem with dependencies not collected for specific functions. [#550](https://github.com/handsontable/hyperformula/issues/550) , [#549](https://github.com/handsontable/hyperformula/issues/549) - Fixed a minor problem with dependencies under nested parenthesis. [#549](https://github.com/handsontable/hyperformula/issues/549) , [#558](https://github.com/handsontable/hyperformula/issues/558) - Fixed a problem with HLOOKUP/VLOOKUP getting stuck in binary search. [#559](https://github.com/handsontable/hyperformula/issues/559) , [#562](https://github.com/handsontable/hyperformula/issues/562) - Fixed a problem with the logic of dependency resolving. [#561](https://github.com/handsontable/hyperformula/issues/561) , [#563](https://github.com/handsontable/hyperformula/pull/563) - Fixed a minor bug with ATAN2 function. [#581](https://github.com/handsontable/hyperformula/issues/581) ## 0.3.0 **Release date: October 22, 2020** ### Added - Added 9 text functions EXACT, LOWER, UPPER, MID, T, SUBSTITUTE, REPLACE, UNICODE, UNICHAR. [#159](https://github.com/handsontable/hyperformula/issues/159) - Added 5 datetime functions: INTERVAL, NETWORKDAYS, NETWORKDAYS.INTL, WORKDAY, WORKDAY.INTL. [#153](https://github.com/handsontable/hyperformula/issues/153) - Added 3 information functions HLOOKUP, ROW, COLUMN. [#520](https://github.com/handsontable/hyperformula/pull/520) - Added 5 financial functions FVSCHEDULE, NPV, MIRR, PDURATION, XNPV. [#542](https://github.com/handsontable/hyperformula/pull/542) - Added 12 statistical functions VAR.P, VAR.S, VARA, VARPA, STDEV.P, STDEV.S, STDEVA, STDEVPA, VARP, VAR, STDEVP, STDEV. [#536](https://github.com/handsontable/hyperformula/pull/536) - Added 2 mathematical functions SUBTOTAL, PRODUCT. [#536](https://github.com/handsontable/hyperformula/pull/536) - Added 15 operator functions HF.ADD, HF.CONCAT, HF.DIVIDE, HF.EQ, HF.GT, HF.GTE, HF.LT, HF.LTE, HF.MINUS, HF.MULTIPLY, HF.NE, HF.POW, HF.UMINUS, HF.UNARY_PERCENT, HF.UPLUS. [#543](https://github.com/handsontable/hyperformula/pull/543) ### Fixed - Fixed multiple issues with VLOOKUP function. [#526](https://github.com/handsontable/hyperformula/issues/526) and [#528](https://github.com/handsontable/hyperformula/issues/528) - Fixed MATCH and INDEX functions compatiblity. [#520](https://github.com/handsontable/hyperformula/pull/520) - Fixed issue with config update that does not preserve named expressions. [#527](https://github.com/handsontable/hyperformula/issues/527) - Fixed minor issue with arithmetic operations error messages. [#532](https://github.com/handsontable/hyperformula/issues/532) ## 0.2.0 **Release date: September 22, 2020** ### Added - Added 9 text functions LEN, TRIM, PROPER, CLEAN, REPT, RIGHT, LEFT, SEARCH, FIND. [#221](https://github.com/handsontable/hyperformula/issues/221) - Added helper methods for keeping track of cell/range dependencies: `getCellPrecedents` and `getCellDependents`. [#441](https://github.com/handsontable/hyperformula/issues/441) - Added 22 financial functions FV, PMT, PPMT, IPMT, CUMIPMT, CUMPRINC, DB, DDB, DOLLARDE, DOLLARFR, EFFECT, ISPMT, NOMINAL, NPER, RATE, PV, RRI, SLN, SYD, TBILLEQ, TBILLPRICE, TBILLYIELD. [#494](https://github.com/handsontable/hyperformula/issues/494) - Added FORMULATEXT function. [#422](https://github.com/handsontable/hyperformula/pull/422) - Added 8 information functions ISERR, ISNA, ISREF, NA, SHEET, SHEETS, ISBINARY, ISFORMULA. [#481](https://github.com/handsontable/hyperformula/issues/481) - Added 15 date functions: WEEKDAY, DATEVALUE, HOUR, MINUTE, SECOND, TIME, TIMEVALUE, NOW, TODAY, EDATE, WEEKNUM, ISOWEEKNUM, DATEDIF, DAYS360, YEARFRAC. [#483](https://github.com/handsontable/hyperformula/issues/483) - Added 13 trigonometry functions: SEC, CSC, SINH, COSH, TANH, COTH, SECH, CSCH, ACOT, ASINH, ACOSH, ATANH, ACOTH. [#485](https://github.com/handsontable/hyperformula/issues/485) - Added 6 engineering functions: OCT2BIN, OCT2DEC, OCT2HEX, HEX2BIN, HEX2OCT, HEX2DEC. [#497](https://github.com/handsontable/hyperformula/issues/497) - Added a configuration option to evaluate reference to an empty cells as a zero. [#476](https://github.com/handsontable/hyperformula/issues/476) - Added new error type: missing licence. [#306](https://github.com/handsontable/hyperformula/issues/306) - Added detailed error messages for error values. [#506](https://github.com/handsontable/hyperformula/issues/506) - Added ability to handle more characters in quoted sheet names. [#509](https://github.com/handsontable/hyperformula/issues/509) - Added support for escaping apostrophe character in quoted sheet names. [#64](https://github.com/handsontable/hyperformula/issues/64) ### Changed - Operation `moveCells` creating cyclic dependencies does not cause losing original formula. [#479](https://github.com/handsontable/hyperformula/issues/479) - Simplified adding new function modules, reworked (simplified) implementations of existing modules. [#480](https://github.com/handsontable/hyperformula/issues/480) ### Fixed - Fixed hardcoding of languages in i18n tests. [#471](https://github.com/handsontable/hyperformula/issues/471) - Fixed many compilation warnings based on LGTM analysis. [#473](https://github.com/handsontable/hyperformula/issues/473) - Fixed `moveCells` behaviour when moving part of a range. [#479](https://github.com/handsontable/hyperformula/issues/479) - Fixed `moveColumns`/`moveRows` inconsistent behaviour. [#479](https://github.com/handsontable/hyperformula/issues/479) - Fixed undo of `moveColumns`/`moveRows` operations. [#479](https://github.com/handsontable/hyperformula/issues/479) - Fixed name-collision issue in translations. [#486](https://github.com/handsontable/hyperformula/issues/486) - Fixed bug in concatenation + `nullValue`. [#495](https://github.com/handsontable/hyperformula/issues/495) - Fixed bug when undoing irreversible operation. [#502](https://github.com/handsontable/hyperformula/issues/502) - Fixed minor issue with CHAR function logic. [#510](https://github.com/handsontable/hyperformula/issues/510) - Fixed `simpleCellAddressToString` behaviour when converting quoted sheet names. [#514](https://github.com/handsontable/hyperformula/issues/514) - Fixed issues with numeric aggregation functions. [#515](https://github.com/handsontable/hyperformula/issues/515) ## 0.1.3 **Release date: July 21, 2020** ### Fixed - Fixed a bug in coercion of empty string to boolean value. [#453](https://github.com/handsontable/hyperformula/issues/453) ## 0.1.2 **Release date: July 13, 2020** ### Fixed - Fixed a bug in topological ordering module. [#442](https://github.com/handsontable/hyperformula/issues/442) ## 0.1.1 **Release date: July 1, 2020** ### Fixed - Fixed a typo in a config option from `useRegularExpresssions` to `useRegularExpressions`. [#437](https://github.com/handsontable/hyperformula/issues/437) ## 0.1.0 **Alpha release date: June 25, 2020 🎉** - Core functionality of the engine - Support for data types: String, Error, Number, Date, Time, DateTime, Duration, Distinct Logical - Support for logical operators: =, <>, >, <, >=, <= - Support for arithmetic operators: +, -, \*, /, % - Support for text operator: & - CRUD operations: - modifying the value of a single cell - adding/deleting row/column - reading the value or formula from the selected cell - moving a cell or a block of cells - deleting a subset of rows or columns - recalculating and refreshing of a worksheet - batching CRUD operations - support for wildcards and regex inside criterion functions like SUMIF, COUNTIF - named expressions support - support for cut, copy, paste - undo/redo support - The following functions: ABS(), ACOS(), AND(), ASIN(), ATAN(), ATAN2(), AVERAGE(), AVERAGEA(), AVERAGEIF(), BASE(), BIN2DEC(), BIN2HEX()BIN2OCT(), BITAND(), BITLSHIFT(), BITOR(), BITRSHIFT(), BITXOR(), CEILING(), CHAR(), CHOOSE(), CODE(), COLUMNS(), CONCATENATE(), CORREL(), COS(), COT(), COUNT(), COUNTA(), COUNTBLANK(), COUNTIF(), COUNTIFS(), COUNTUNIQUE(), DATE(), DAY(), DAYS(), DEC2BIN(), DEC2HEX(), DEC2OCT(), DECIMAL(), DEGREES(), DELTA(), E(), EOMONTH(), ERF(), ERFC(), EVEN(), EXP(), FALSE(), IF(), IFERROR(), IFNA(), INDEX(), INT(), ISBLANK(), ISERROR(), ISEVEN(), ISLOGICAL(), ISNONTEXT(), ISNUMBER(), ISODD(), ISTEXT(), LN(), LOG(), LOG10(), MATCH(), MAX(), MAXA(), MAXPOOL(), MEDIAN(), MEDIANPOOL(), MIN(), MINA(), MMULT(), MOD(), MONTH(), NOT(), ODD(), OFFSET(), OR(), PI(), POWER(), RADIANS() , RAND(), ROUND(), ROUNDDOWN(), ROUNDUP(), ROWS(), SIN(), SPLIT(), SQRT(), SUM(), SUMIF(), SUMIFS(), SUMPRODUCT(), SUMSQ(), SWITCH(), TAN(), TEXT(), TRANSPOSE(), TRUE(), TRUNC(), VLOOKUP(), XOR(), YEAR() - Support for volatile functions - Cultures supports - can be configured according to the application need - Custom functions support - Set [OpenDocument v1.2](http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2-part2.html) as a standard to follow - Error handling: - Division by zero: #DIV/0! - Unknown function name: #NAME? - Wrong type of argument in a function or wrong type of operator: #VALUE! - Invalid numeric values: #NUM! - No value available: #N/A - Cyclic dependency: #CYCLE! - Wrong address reference: #REF - Built-in function translation support for 16 languages: English, Czech, Danish, Dutch, Finnish, French, German, Hungarian, Italian, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish. --- ## Sorting data URL: https://hyperformula.handsontable.com/docs/guide/sorting-data # Sorting data In HyperFormula, you can sort data by reordering rows and columns. ## Sorting data in HyperFormula To sort data in HyperFormula, you reorder rows (or columns), by providing your preferred permutation of row (or column) indexes. The permutation array has the form `[ newPositionForRow0, newPositionForRow1, newPositionForRow2, ... ]`. The value at index `i` is the new position for the row that is currently at index `i`. You can implement any sorting algorithm that returns such an array of row or column indexes. ## Sorting rows To sort rows, use the [`isItPossibleToSetRowOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#isitpossibletosetroworder) and [`setRowOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setroworder) methods. ### Step 1: Choose a new row order Choose your required permutation of row indexes. For example, if you want to move the bottom row to the top of a 3-row sheet, set the order to `[1, 2, 0]` instead of `[0, 1, 2]`. This moves the row at index 0 to position 1, the row at index 1 to position 2, and the row at index 2 to position 0: ```js // a HyperFormula instance with example data const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'], ]); // we'll set the row order to [1, 2, 0] in the next steps // the resulting sheet will be: [['C'], ['A'], ['B']] ``` > The [`setRowOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setroworder) method accepts an array of numbers, so you can implement any function that returns an array with your required row order. > The permutation array maps **current positions** to **new positions**, not the other way around. The value at index `i` tells HyperFormula where to move the row currently at index `i`, *not* which row should end up at index `i`. > > For example, `[1, 2, 0]` means "move row 0 to position 1, row 1 to position 2, row 2 to position 0". It does **not** mean "the new row 0 comes from position 1, the new row 1 comes from position 2, ...". ### Step 2: Check if the new row order can be applied Before you change the row order, check if your specified row number permutation can actually be applied. Thanks to the [`isItPossibleTo*` methods](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#isitpossibleto-methods), you can check if an operation is allowed, and display an error message if it's not. Use the [`isItPossibleToSetRowOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#isitpossibletosetroworder) method: ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'], ]); // a variable to carry the user message let messageUsedInUI; // check if your permutation can be applied const isRowOrderOk = hfInstance.isItPossibleToSetRowOrder(0, [1, 2, 0]); // display an error message if (!isRowOrderOk) { messageUsedInUI = 'Sorry, you cannot sort rows in this way.' } ``` ### Step 3: Set the new row order If your specified row number permutation is valid, change the row order: ```js const hfInstance = HyperFormula.buildFromArray([ ['A'], ['B'], ['C'], ]); let messageUsedInUI; const isRowOrderOk = hfInstance.isItPossibleToSetRowOrder(0, [1, 2, 0]); if (!isRowOrderOk) { messageUsedInUI = 'Sorry, you cannot sort rows in this way.' } else { // set the new row order hfInstance.setRowOrder(0, [1, 2, 0]); } // the resulting sheet is: [['C'], ['A'], ['B']] // the method returns an array of cells whose values changed: // [{ // address: { sheet: 0, col: 0, row: 1 }, // newValue: 'A', // }, // { // address: { sheet: 0, col: 0, row: 2 }, // newValue: 'B', // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 'C', // }] ``` ## Sorting columns To sort columns, use the [`isItPossibleToSetColumnOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#isitpossibletosetcolumnorder) and [`setColumnOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcolumnorder) methods. The permutation array has the same shape as for rows: `[ newPositionForColumn0, newPositionForColumn1, newPositionForColumn2, ... ]`. The value at index `i` is the new position for the column that is currently at index `i`. ### Step 1: Choose a new column order Choose your required permutation of column indexes. For example, if you want to move the last column to the front of a 3-column sheet, set the order to `[1, 2, 0]` instead of `[0, 1, 2]`. This moves the column at index 0 to position 1, the column at index 1 to position 2, and the column at index 2 to position 0: ```js // a HyperFormula instance with example data const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // we'll set the column order to [1, 2, 0] in the next steps // the resulting sheet will be: [['C', 'A', 'B']] ``` > The [`setColumnOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#setcolumnorder) method accepts an array of numbers, so you can implement any function that returns an array with your required column order. > The permutation array maps **current positions** to **new positions**, not the other way around. The value at index `i` tells HyperFormula where to move the column currently at index `i`, *not* which column should end up at index `i`. ### Step 2: Check if the new column order can be applied Before you change the column order, check if your specified column number permutation can actually be applied. Thanks to the [`isItPossibleTo*` methods](https://hyperformula.handsontable.com/docs/guide/basic-operations.md#isitpossibleto-methods), you can check if an operation is allowed, and display an error message if it's not. Use the [`isItPossibleToSetColumnOrder`](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#isitpossibletosetcolumnorder) method: ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); // a variable to carry the user message let messageUsedInUI; // check if your permutation can be applied const isColumnOrderOk = hfInstance.isItPossibleToSetColumnOrder(0, [1, 2, 0]); // display an error message if (!isColumnOrderOk) { messageUsedInUI = 'Sorry, you cannot sort columns in this way.' } ``` ### Step 3: Set the new column order If your specified column number permutation is valid, change the column order: ```js const hfInstance = HyperFormula.buildFromArray([ ['A', 'B', 'C'] ]); let messageUsedInUI; const isColumnOrderOk = hfInstance.isItPossibleToSetColumnOrder(0, [1, 2, 0]); if (!isColumnOrderOk) { messageUsedInUI = 'Sorry, you cannot sort columns in this way.' } else { // set the new column order hfInstance.setColumnOrder(0, [1, 2, 0]); } // the resulting sheet is: [['C', 'A', 'B']] // the method returns an array of cells whose values changed: // [{ // address: { sheet: 0, col: 1, row: 0 }, // newValue: 'A', // }, // { // address: { sheet: 0, col: 2, row: 0 }, // newValue: 'B', // }, // { // address: { sheet: 0, col: 0, row: 0 }, // newValue: 'C', // }] ``` ## Data sorting demo The demo below shows how to sort rows in ascending and descending order, based on the results (calculated values) of the cells in the second column. --- ## Types of errors URL: https://hyperformula.handsontable.com/docs/guide/types-of-errors # Types of errors HyperFormula returns an error when a formula cannot be processed properly. To make it easier for a user, each kind of error has its specific error value. For instance, HyperFormula displays the `#DIV/0!` error when a user tries to divide a number by zero, or `#NAME!` when the called function is not registered in the reference of functions. Depending on the reason for the problem, you will see the error's associated message as listed in the table below. An error can contain an additional message property. Errors are localized according to the language settings. | Value | Type | Description | | :--- | :--- | :--- | | #DIV/0! | Division by zero | It occurs when a formula tries to divide by zero. | | #N/A | The value is not available | It indicates that the value you are looking for is not available for the formula. Most typically this error is thrown by the LOOKUP -type functions. | | #NAME? | Invalid name | It means that HyperFormula can't recognize the name of the formula or values used in a formula. | | #NUM! | Invalid number | This error arises when your formula contains an invalid number. | | #REF! | Invalid reference | It occurs when a formula contains an invalid reference. It is one of the most common errors users encounter when working with spreadsheets. | | #VALUE! | Wrong type of argument | It occurs when a formula tries to improperly use different types of data. For example, you will see this error when you will try to add a string to a number. | | #CYCLE! | Circular reference | It occurs when a formula refers to its own cell, both directly and indirectly. | | #ERROR! | An error occurred | It indicates that there is an unknown error in a formula. | | #LIC! | Invalid license key | It occurs when the license key is invalid, expired, or missing. | --- ## Specifications and limits URL: https://hyperformula.handsontable.com/docs/guide/specifications-and-limits # Specifications and limits The following table presents the limits of features. Many of them are bounded only by system resources. This means the actual limit depends on several factors, for example, the resources (such as available memory) of the device HyperFormula is running on. ## Sheet and cell limits
Feature Maximum limit
Number of cells

Limited by system resources (JavaScript)

Can be set in the configuration:

  • MaxRows (default: 40 000)
  • MaxColumns (default: 18 278)
Number of nested levels of functions 120
Earliest date allowed for the calculation December 30, 1899
Latest date allowed for the calculation December 31, 9999
Number of named expressions Limited by system resources (JavaScript)
Characters in a cell Limited by system resources (JavaScript)
Characters in a named expression Limited by system resources (JavaScript)
Characters in a sheet name Limited by system resources (JavaScript)
Characters in a column name Depends on the configuration of MaxColumns
Number of sheets in a workbook Limited by system resources (JavaScript)
Number of custom functions Limited by system resources (JavaScript)
Undo levels Limited by the configuration - undoLimit (default: 20)
Number of elements in a batch operation Limited by system resources (JavaScript)
## Calculation limits | Feature | Maximum limit | |:-------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Number precision | ~15 significant digits (with all the [limitations of the JavaScript floating-point arithmetics](https://patrickkarsh.medium.com/why-math-is-hard-in-javascript-floating-point-precision-in-javascript-41706aa7a89d)). HyperFormula rounds the operation results according to the [precisionRounding](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.html#precisionrounding) configuration option. | | Smallest magnitude allowed negative number | -5E-324 (inherited from JavaScript) | | Smallest magnitude allowed positive number | 5E-324 (inherited from JavaScript) | | Largest magnitude allowed positive number | 1.79E+308 (inherited from JavaScript) | | Largest magnitude allowed negative number | -1.79E+308 (inherited from JavaScript) | | Length of a single formula's contents | Limited by system resources (JavaScript) | | Number of iterations | Not supported | | Arguments in function | Limited by system resources (JavaScript) | | Number of cross-sheet dependencies | Limited by system resources (JavaScript) | | Number of dependencies in a single cell | Limited by system resources (JavaScript) | --- ## Supported browsers URL: https://hyperformula.handsontable.com/docs/guide/supported-browsers # Supported browsers Each release of HyperFormula is tested on the **two latest versions** of every modern browser, on both mobile and desktop. In addition to running unit tests, we focus on two factors that are crucial for all users: performance and accuracy of calculations. ## List of supported browsers | Desktop Browsers | Mobile Browsers | | :--------------- | :------------------ | | Chrome | Chrome | | Firefox | Firefox for Android | | Safari | Firefox for iOS | | Edge | Safari iOS | | UC Browser | UC Browser * | | QQ browser | Opera | | | Samsung Internet | ## Full ICU support Browsers that do not support full-icu (e.g., UC Browser mobile) will not handle the comparison of accented strings properly. In these browsers, string comparison might give different results than in browsers that fully support the feature. Concerning full-icu, Node.js 13 or higher is required to handle string comparison properly. This can also be achieved with lower versions, like Node.js 10, but it requires the installation of the `full-icu` additional dependency. --- ## Types of operators URL: https://hyperformula.handsontable.com/docs/guide/types-of-operators # Types of operators The operators specify what type of actions are performed on arguments (operands) in the formula. HyperFormula supports the operators that are common in spreadsheet software. They are calculated in a [specific order](https://hyperformula.handsontable.com/docs/guide/order-of-precendece.md) which can be altered by the use of parentheses. HyperFormula supports the following operators: * Unary operators * Binary arithmetic operators * Comparison operators * Concatenation operator * Reference operators ## Unary operators The unary operators have only one argument (operand). For example, when the unary negation operation is provided with a number, it returns the negative value of that number. | Operator | Meaning | Example | Description | | :--- | :--- | :--- | :--- | | - | Unary minus | -a | Returns the negative of its argument. | | + | Unary plus | +a | Returns the positive of its argument. | | % | Percent | a% | Calculate the percent of an argument. | ## Binary arithmetic operators The binary arithmetic operators enable the computation of basic mathematical operations. They don't have to be wrapped with any functions. This table shows the basic behavior of the binary arithmetic operators: | Operator | Meaning | Example | Description | | :--- | :--- | :--- | :--- | | + | Addition | a + b | Add the two arguments. | | - | Subtraction | a - b | Subtract the second argument from the first argument. | | * | Multiplication | a * b | Multiply the two arguments. | | / | Division | a / b | Divide the first argument by the second argument. | | ^ | Exponentiation | a ^ b | Raise the first argument by the power of the second argument. | You are probably wondering why the _modulo_ operator is missing. It is supported by the function `MOD` so **instead of writing a % b**, as you would in a regular mathematical equation, you use a formula like this: **=MOD(a, b)**. ## Comparison operators The binary relational operators, when used in a formula, return boolean or logical values. Here are some very general rules: | Operator | Meaning | Example | Description | | :--- | :--- | :--- | :--- | | = | Equal to | a = b | True if a is equal to b. | | < | Less than | a < b | True if a is less than b. | | > | Greater than | a > b | True if a is greater than b. | | <= | Less than or equal | a <= b | True if a is less than or equal to b. | | >= | Greater than or equal | a >= b | True if a is greater than or equal to b. | | <> | Not equal to | a <> b | True if a is not equal to b. | ### Type coercion HyperFormula does type coercion and it can have an impact on comparing, adding, or any other operation between **values of a different type**. The tables represent some operations between different types and their results. ## Boolean to int coercion, basic arithmetic operations ### a) true and null | Operation | Result | | :--- | :--- | | true + null | 1 | | true - null | 1 | | true * null | 0 | | true / null | #DIV/0! | | true^null | 1 | | +true (unary plus true) | true | | -true (unary minus true) | -1 | | true% | 0.01 | ### b) null and true | Operation | Result | | :--- | :--- | | null + true | 1 | | null - true | -1 | | null * true | 0 | | null / true | 0 | | null ^ true | 0 | | +null (unary plus null) | null | | -null (unary minus null) | 0 | | null% | 0 | ### c) true and true | Operation | Result | | :--- | :--- | | true + true | 2 | | true - true | 0 | | true * true | 1 | | true / true | 1 | | true ^ true | 1 | ### d) false and true | Operation | Result | | :--- | :--- | | false + true | 1 | | false - true | -1 | | false * true | 0 | | false / true | 0 | | false ^ true | 0 | ### e) true and false | Operation | Result | | :--- | :--- | | true + false | 1 | | true - false | 1 | | true * false | 0 | | true / false | #DIV/0! | | true ^ false | 1 | ### f) false and false | Operation | Result | | :--- | :--- | | false + false | 0 | | false - false | 0 | | false * false | 0 | | false / false | #DIV/0! | | false ^ false | 1 | | +false (unary plus false) | false | | -false (unary minus false) | 0 | | false% | 0 | ### g) null and false | Operation | Result | | :--- | :--- | | null + false | 0 | | null - false | 0 | | null * false | 0 | | null / false | #DIV/0! | | null ^ false | 1 | ## Order operations, comparisons ### a) Empty string ("") and null | Operation | Result | | :--- | :--- | | "" > null | false | | "" < null | false | | "" >= null | true | | "" <= null | true | ### b) String ("string") and boolean | Operation | Result | | :--- | :--- | | "string" > false | false | | "string" < false | true | | "string" >= false | false | | "string" <= false | true | ### c) Null and false | Operation | Result | | :--- | :--- | | null > false | false | | null < false | false | | null >= false | true | | null <= false | true | ### d) Null and positive integer | Operation | Result | | :--- | :--- | | null > 1 | false | | null < 1 | true | | null >= 1 | false | | null <= 1 | true | ### e) Negative integer and null | Operation | Result | | :--- | :--- | | -1 > null | false | | -1 < null | true | | -1 >= null | false | | -1 <= null | true | ### f) 0 and null | Operation | Result | | :--- | :--- | | 0 > null | false | | 0 < null | false | | 0 >= null | true | | 0 <= null | true | ### g) 0 and false | Operation | Result | | :--- | :--- | | 0 > false | false | | 0 < false | true | | 0 >= false | false | | 0 <= false | true | | 0 = false | false | ### h) Positive integer and true | Operation | Result | | :--- | :--- | | 1 > true | false | | 1 < true | true | | 1 >= true | false | | 1 <= true | true | | 1 = true | false | ## Comparing strings By default, HyperFormula is case and accent insensitive. This means it will ignore upper and lower-case letters and accents during the comparison. For example, if you compare `AsTrOnAuT` with `aStroNaut` they will be understood as identical, the same goes for `Préservation` and `Preservation`. It applies to comparison operators only. It can be configured with `accentSensitive` and `caseSensitive` options in the [configuration](https://hyperformula.handsontable.com/docs/guide/configuration-options.md). Apart from accents and case sensitivity, you can also configure `caseFirst.` This option defines whether upper case or lower case should come first. Additionally the `ignorePunctuation` option specifies whether punctuation should be ignored in string comparison. By default `caseFirst` is set to `'lower'` and `ignorePunctuation` is set to `false`. For more details see the official [API reference](https://hyperformula.handsontable.com/docs/api) of HyperFormula. Here is an example configuration that overwrites default settings: ```javascript // this part of the configuration shows options // related to strings only const options = { caseSensitive: true, accentSensitive: true, caseFirst: 'upper', ignorePunctuation: true }; ``` ## Concatenation operator The concatenation operator is used to combine multiple text strings into a single value. | Operator | Meaning | Example | Description | | :--- | :--- | :--- | :--- | | & | Concatenation | "a" & "b" | Concatenates two arguments (left and right) into one | ## Reference operators The reference operators are used to perform calculations of combined ranges. | Operator | Meaning | Example | Description | | :--- | :--- | :--- | :--- | | : (colon) | Range operator | A1:B1 | Makes one reference to multiple cells between the two specified references. | | , (comma) | Union operator | A1:B1,A2:B2 | Returns the intersection of multiple ranges. | | (space) | Intersection operator | A1:B1 A2:B2 | Finds the intersection of the two ranges. | --- ## Undo-redo URL: https://hyperformula.handsontable.com/docs/guide/undo-redo # Undo-redo HyperFormula supports undo-redo for CRUD and move operations. By default, you can **undo 20 actions.** The `undoLimit` can be changed inside the [configuration options](https://hyperformula.handsontable.com/docs/guide/configuration-options.md) so you can adapt that number to your needs. Be careful when setting `undoLimit` to large numbers. It may result in performance issues. Undo and redo work together as a synced pair, so each time you **undo** some action it is put onto a **redo** stack. **Named expressions** behave just like any other [CRUD operation](https://hyperformula.handsontable.com/docs/guide/basic-operations). ## isThereSomething* methods There are two methods which can be used to check the actual state of the undo-redo stack:`isThereSomethingToUndo` and `isThereSomethingToRedo`. ## Batch operations When you [batch several operations](https://hyperformula.handsontable.com/docs/guide/batch-operations.md) remember that undo-redo will recognize them as a single cumulative operation. --- ## Volatile functions URL: https://hyperformula.handsontable.com/docs/guide/volatile-functions # Volatile functions If you work with spreadsheet software regularly, then you've probably heard about Volatile Functions. They are distinctive because they affect the way the calculation engine works. **Every cell dependent on a volatile function is recalculated upon every worksheet change triggered by the operations listed below (volatile actions).** HyperFormula uses a dependency tree to keep track of all related cells and ranges of cells. On top of that, it constructs a calculation chain which determines the order in which the recalculation process should be done. Usually, only cells marked as "dirty" are calculated selectively. However, this is not the case when a volatile function exists somewhere within the workbook. Volatile functions are always treated as "dirty" and recalculated on most actions. Depending on how many cells are dependent directly or indirectly on the volatile function, it may impact the engine's performance. Use them with caution, especially in large workbooks. ## Volatile functions Volatile functions are recalculated on every volatile action, regardless of the arguments passed in the function call. Functions that depend on the structure of the sheet act as if they were volatile but only on operations on the sheet structure, such as adding or removing rows or columns. #### Built-in volatile functions: - RAND - RANDBETWEEN - NOW - TODAY #### Built-in functions that depend on the structure of the sheet: - COLUMN - ROW - COLUMNS - ROWS - FORMULATEXT See the complete [list of functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) available. ## Volatile actions These actions trigger the recalculation process of volatile functions: | Description | Related method | |:---------------------------------------|:------------------------| | Recalculate on demand | `rebuildAndRecalculate` | | Resume an automatic recalculation mode | `resumeEvaluation` | | Batch operations | `batch` | | Modify cell content | `setCellContents` | | Modify sheet content | `setSheetContent` | | Clear sheet content | `clearSheet` | | Insert a row | `addRows` | | Remove a row | `removeRows` | | Insert a column | `addColumns` | | Remove a column | `removeColumns` | | Move a cell | `moveCells` | | Move a row | `moveRows` | | Move a column | `moveColumns` | | Add a defined name | `addNamedExpression` | | Modify a defined name | `changeNamedExpression` | | Remove a defined name | `removeNamedExpression` | | Add a sheet | `addSheet` | | Remove a sheet | `removeSheet` | | Rename a sheet | `renameSheet` | | Undo | `undo` | | Redo | `redo` | | Cut | `cut` | | Paste | `paste` | ## Tweaking performance The extensive use of volatile functions may cause a performance drop. To reduce the negative effect, you can try [batching these operations](https://hyperformula.handsontable.com/docs/guide/batch-operations.md). ## Volatile custom functions There is a way to mark a custom function as volatile: ```javascript // this is an example of how the RAND function is implemented // you can do the same with a custom function 'RAND': { method: 'rand', isVolatile: true, }, ``` You can find more information about creating custom functions in [this section](https://hyperformula.handsontable.com/docs/guide/custom-functions). --- ## Types of values URL: https://hyperformula.handsontable.com/docs/guide/types-of-values # Types of values In HyperFormula, values can be of type Number, Text, Logical, Date, Time, DateTime, Error, Currency, or Percentage depending on the data. Functions may work differently based on the types of arguments. | Type of value | Description | |:---------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Number | A numeric value such as 0, 2, -40, 0.1, and also scientific notation e.g. 5.6E+01; with a period as a default decimal separator. | | Text (string) | A text value, like "ABC", "apollo". Inside a formula, it should be enclosed in double quotes (`"`). | | Logical (Distinct Boolean) | A logical value might be one of two values: TRUE or FALSE. Please note that even if there is type coercion this will be recognized as TRUE/FALSE when comparing to numbers. It will not be recognized as 1 or 0. | | Date | A Gregorian calendar date in DD/MM/YYYY (default format), like 22/06/2022. All dates from 30/12/1899 to 31/12/9999 are supported. | | Time | A time in hh:mm:ss or hh:mm (default format), like 10:40:16. | | DateTime | Date and Time types combined into one, like 22/06/2022 10:40:16. | | Error | An error returned as a result of formula calculation, like #REF! | | Currency | Number representing currency | | Percentage | Number representing percentage | ## How cell value types are determined HyperFormula automatically detects the type of cell content when you set a value using methods like `setCellContents`, `buildFromArray`, or `setSheetContent`. The type detection follows this priority order: ### For JavaScript values When you pass JavaScript values directly (not as strings): - `number` → **Number type** - `boolean` → **Logical type** - `Date` object → **Date/DateTime type** (converted to internal numeric representation) - `null` or `undefined` → **Empty cell** ```js const hf = HyperFormula.buildFromArray([ [42], // Number [true], // Logical [new Date()], // Date/DateTime [null], // Empty ]); ``` ### For string values When you pass string values, HyperFormula detects the type as follows: - String is "TRUE" or "FALSE" (case-insensitive) → **Logical type** - String starting with `=` → **Formula type** - String ending with `%` → **Percentage type** - String contains currency symbol → **Currency type** - String can be parsed as a number → **Number type** - String matches date/time format → **Date/Time/DateTime type** - None of the above match → **Text type** ```js const hf = HyperFormula.buildFromArray([ ["TRUE"], // Logical ["true"], // Logical ["=SUM(1,2,3)"], // Formula ["25%"], // Percentage (0.25) ["$100"], // Currency (100) ["123.45"], // Number ["5E+01"], // Number ["22/06/2022 10:40:16"], // DateTime ["22/06/2022"], // Date ["10:40:16"], // Time ["Hello"], // Text ]); ``` ### Forcing the text value type Sometimes a value should be treated as text even though it's parsable as a formula, number, date, time, datetime, boolean, currency or percentage. Typical examples are numeric values with no number semantics, such as ZIP codes, bank sort codes, social security numbers, etc. To prevent the automatic type conversion, prepend the value with an apostrophe (`'`). ```js const hf = HyperFormula.buildFromArray([ ["11201"], // a number: 11201 ["'11201"], // a string: "11201" ["22/06/2022"], // a date: June 22nd 2022 ["'22/06/2022"], // a string: "22/06/2022" ]); // a formula: SUM(B1,B2) hf.setCellContents({ col: 0, row: 4, sheet: 0 }, [["=SUM(B1,B2)"]]); // a string: "=SUM(B1,B2)" hf.setCellContents({ col: 0, row: 5, sheet: 0 }, [["'=SUM(B1,B2)"]]); ``` ## Date and time values For better compatibility with other spreadsheet software, HyperFormula stores date and time values as numbers. This makes it easier to perform mathematical operations such as calculating the number of days between two dates. - A Date value is represented as the number of full days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nulldate). - A Time value is represented as a fraction of a full day. - A DateTime value is represented as the number of (possibly fractional) days since [`nullDate`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nulldate). ## Text values When working with text values directly inside formulas, you must enclose them in double quotes (`"`). This is different from entering text into cells, where quotes are not required. E.g.: ``` =IF(B1="Active", "Status OK", "Check Status") ``` ## Getting cell type Cells have types that can be retrieved by using the `getCellType` method. Cell content is not calculated and the method returns only the type, so, for example, you can check if there is a formula inside a cell. Here is the list of possible cell types: `'FORMULA'`, `'VALUE'`, `'ARRAY'`, `'EMPTY`, `ARRAYFORMULA`. ## Getting cell value type You can also use the `getCellValueType` method which returns the calculated value type, so a cell's value for the formula: `'=SUM(1, 2, 3)'` will be 'NUMBER'. Here is the list of possible cell value types: `'NUMBER'`, `'STRING'`, `'BOOLEAN'`, `'ERROR'`, `'EMPTY'`. ## Getting detailed cell value type Currently, number type contains several subtypes (date, time, datetime, currency, percentage), that can be used interchangeably with numbers in computation. We keep track of those, so e.g. if a function produces currency-type output, and later the value is used in arithmetic operations, the output of those is as well-marked as currency-type. Info about those can be extracted via `getCellValueDetailedType` function. Auxiliary information about formatting (if there is any) is available via `getCellValueFormat` function. In case of currency, it would be the currency symbol used when parsing the currency (e.g. '$'). --- ## Compatibility with Microsoft Excel URL: https://hyperformula.handsontable.com/docs/guide/compatibility-with-microsoft-excel # Compatibility with Microsoft Excel Achieve nearly full compatibility with Microsoft Excel, using the right HyperFormula configuration. **Contents:** ## Overview While HyperFormula conforms to the [OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html) standard, it also follows industry practices set by other spreadsheets such as Microsoft Excel or Google Sheets. That said, there are cases when HyperFormula can't be compatible with all three at the same time, because of inconsistencies (between the OpenDocument standard, Microsoft Excel and Google Sheets), limitations of HyperFormula at its current development stage (version `3.4.0`), or limitations of Microsoft Excel or Google Sheets themselves. For the full list of such differences, see [this](https://hyperformula.handsontable.com/docs/guide/list-of-differences.md) page. Still, with the right configuration, you can achieve nearly full compatibility. ### Excel function coverage HyperFormula implements **350 out of 515 Excel functions** (68% coverage), as of version 3.1.0 and Excel 2024. This means that **165 Excel functions** (32%) are not yet available in HyperFormula. Additionally, HyperFormula includes some functions that are not part of Excel's standard function set, bringing the total number of available functions to **423**. For a complete list of supported functions, see the [built-in functions](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md) page. If you need any of the missing Excel functions, you can [contact us](https://hyperformula.handsontable.com/docs/guide/contact.md) or implement them as [custom functions](https://hyperformula.handsontable.com/docs/guide/custom-functions.md), extending HyperFormula's capabilities to meet your specific requirements. ## Configure compatibility with Microsoft Excel ### String comparison rules In the US version of Microsoft Excel, by default, [string comparison](https://hyperformula.handsontable.com/docs/guide/types-of-operators.md#comparing-strings) is accent-sensitive and case-insensitive. To set up HyperFormula in the same way, use this configuration: ```js caseSensitive: false, // set by default accentSensitive: true, ignorePunctuation: false, // set by default localeLang: 'en-US', ``` Related options: - [`caseSensitive`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#casesensitive) - [`accentSensitive`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#accentsensitive) - [`caseFirst`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#casefirst) - [`ignorePunctuation`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#ignorepunctuation) - [`localeLang`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#localelang) ### Function criteria In Microsoft Excel, functions that use criteria (`SUMIF`, `SUMIFS`, `COUNTIF` etc.) accept wildcards, don't accept regular expressions, and require whole cells to match the specified pattern. To set up HyperFormula in the same way, use the default configuration: ```js useWildcards: true, // set by default useRegularExpressions: false, // set by default matchWholeCell: true, // set by default ``` Related options: - [`matchWholeCell`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#matchwholecell) - [`useRegularExpressions`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#useregularexpressions) - [`useWildcards`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#usewildcards) ### `TRUE` and `FALSE` constants Microsoft Excel has built-in constants (keywords) for the boolean values (`TRUE` and `FALSE`). To set up HyperFormula in the same way, define `TRUE` and `FALSE` as [named expressions](https://hyperformula.handsontable.com/docs/guide/named-expressions.md), by using HyperFormula's [`TRUE()`](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#logical) and [`FALSE()`](https://hyperformula.handsontable.com/docs/guide/built-in-functions.md#logical) functions. ```js hfInstance.addNamedExpression('TRUE', '=TRUE()'); hfInstance.addNamedExpression('FALSE', '=FALSE()'); ``` ### Array arithmetic mode In Microsoft Excel, the [array arithmetic mode](https://hyperformula.handsontable.com/docs/guide/arrays.md#array-arithmetic-mode) is enabled by default. To set up HyperFormula in the same way, set the [`useArrayArithmetic`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#usearrayarithmetic) option to `true`. ```js useArrayArithmetic: true, ``` ### Whitespace in formulas In Microsoft Excel, all whitespace characters inside formulas are ignored. To set up HyperFormula in the same way, set the [`ignoreWhiteSpace`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#ignorewhitespace) option to `'any'`. ```js ignoreWhiteSpace: 'any', ``` ### Formulas that evaluate to `null` In Microsoft Excel, formulas that evaluate to empty values are forced to evaluate to zero instead. To set up HyperFormula in the same way, set the [`evaluateNullToZero`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#evaluatenulltozero) option to `true`. ```js evaluateNullToZero: true, ``` ### Leap year bug In Microsoft Excel, the year 1900 is [incorrectly](https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year) treated as a leap year. To set up HyperFormula in the same way, use this configuration: ```js leapYear1900: true, nullDate: { year: 1899, month: 12, day: 31 }, ``` ### Numerical precision Both HyperFormula and Microsoft Excel automatically round floating-point numbers. To configure this feature, use these options: - [`smartRounding`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#smartrounding) - [`precisionEpsilon`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#precisionepsilon) ### Separators In Microsoft Excel, separators depend on your configured locale, whereas in HyperFormula, you set up separators through options (e.g., [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator)). In Excel's `en-US` locale, the thousands separator and the function argument separator use the same character: `,` (a comma). But in HyperFormula, [`functionArgSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator) can't be the same as [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator). For this reason, you can't achieve full compatibility with Excel's `en-US` locale. To match Excel's `en-US` locale as closely as possible, use the default configuration: ```js functionArgSeparator: ',', // set by default decimalSeparator: '.', // set by default thousandSeparator: '', // set by default arrayColumnSeparator: ',', // set by default arrayRowSeparator: ';', // set by default ``` Related options: - [`functionArgSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#functionargseparator) - [`decimalSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#decimalseparator) - [`thousandSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#thousandseparator) - [`arrayRowSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#arrayrowseparator) - [`arrayColumnSeparator`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#arraycolumnseparator) ### Date and time formats In Microsoft Excel, date and time formats depend on your configured locale, whereas in HyperFormula you can [set them up freely](https://hyperformula.handsontable.com/docs/guide/date-and-time-handling.md). Options related to date and time formats: - [`dateFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#dateformats) - [`timeFormats`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#timeformats) - [`nullYear`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#nullyear) - [`parseDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#parsedatetime) - [`stringifyDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime) - [`stringifyDuration()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifyduration) ### `TEXT` function formats Excel's `TEXT` function supports a wide range of date, time, and currency formats. To cover the full range in HyperFormula, supply both [`stringifyDateTime()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifydatetime) (for dates and durations) and [`stringifyCurrency()`](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md#stringifycurrency) (for currency formats — locale-aware grouping, non-`$` symbols, accounting two-section patterns). See [Currency handling](https://hyperformula.handsontable.com/docs/guide/currency-handling.md) for an `Intl.NumberFormat`-based example. ## Full configuration This configuration aligns HyperFormula with the default behavior of Microsoft Excel (set to locale `en-US`), as closely as possible at this development stage (version `3.4.0`). ```js // define options const options = { dateFormats: ['MM/DD/YYYY', 'MM/DD/YY', 'YYYY/MM/DD'], timeFormats: ['hh:mm', 'hh:mm:ss.sss'], // set by default currencySymbol: ['$', 'USD'], localeLang: 'en-US', functionArgSeparator: ',', // set by default decimalSeparator: '.', // set by default thousandSeparator: '', // set by default arrayColumnSeparator: ',', // set by default arrayRowSeparator: ';', // set by default nullYear: 30, // set by default caseSensitive: false, // set by default accentSensitive: true, ignorePunctuation: false, // set by default useWildcards: true, // set by default useRegularExpressions: false, // set by default matchWholeCell: true, // set by default useArrayArithmetic: true, ignoreWhiteSpace: 'any', evaluateNullToZero: true, leapYear1900: true, nullDate: { year: 1899, month: 12, day: 31 }, smartRounding: true, // set by default }; // call the static method to build a new instance const hfInstance = HyperFormula.buildEmpty(options); // define TRUE and FALSE constants hfInstance.addNamedExpression('TRUE', '=TRUE()'); hfInstance.addNamedExpression('FALSE', '=FALSE()'); ``` --- ## ExpectedValueOfTypeError URL: https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror # ExpectedValueOfTypeError Error thrown when the expected value type differs from the given value type. It also displays the expected type. This error might be thrown while setting or updating the [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md). The following methods accept [ConfigParams](https://hyperformula.handsontable.com/docs/api/interfaces/configparams.md) as a parameter: **`see`** [buildEmpty](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildempty) **`see`** [buildFromArray](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#static-buildfromarray) **`see`** [buildFromSheets](https://hyperformula.handsontable.com/docs/api/classes/buildenginefactory.md#static-buildfromsheets) **`see`** [updateConfig](https://hyperformula.handsontable.com/docs/api/classes/hyperformula.md#updateconfig) ## Constructors ### constructor \+ **new ExpectedValueOfTypeError**(`expectedType`: string, `paramName`: string): *[ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md)* *Defined in [src/errors.ts:177](https://github.com/handsontable/hyperformula/blob/af2d59d/src/errors.ts#L177)* **Parameters:** Name | Type | ------ | ------ | `expectedType` | string | `paramName` | string | **Returns:** *[ExpectedValueOfTypeError](https://hyperformula.handsontable.com/docs/api/classes/expectedvalueoftypeerror.md)* ## Properties ### message • **message**: *string* ___ ### name • **name**: *string* ___ ### stack • **stack**? : *undefined | string* ___ ### Error ▪ **Error**: *ErrorConstructor* --- ## ContentChanges URL: https://hyperformula.handsontable.com/docs/api/classes/contentchanges # ContentChanges ## Methods ### addAll ▸ **addAll**(`other`: [ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)): *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* *Defined in [src/ContentChanges.ts:29](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L29)* **Parameters:** Name | Type | ------ | ------ | `other` | [ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md) | **Returns:** *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)* ___ ### addChange ▸ **addChange**(`newValue`: InterpreterValue, `address`: [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md), `oldValue?`: InterpreterValue): *void* *Defined in [src/ContentChanges.ts:36](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L36)* **Parameters:** Name | Type | ------ | ------ | `newValue` | InterpreterValue | `address` | [SimpleCellAddress](https://hyperformula.handsontable.com/docs/api/interfaces/simplecelladdress.md) | `oldValue?` | InterpreterValue | **Returns:** *void* ___ ### exportChanges ▸ **exportChanges**‹**T**›(`exporter`: [ChangeExporter](https://hyperformula.handsontable.com/docs/api/interfaces/changeexporter.md)‹T›): *T[]* *Defined in [src/ContentChanges.ts:40](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L40)* **Type parameters:** ▪ **T** **Parameters:** Name | Type | ------ | ------ | `exporter` | [ChangeExporter](https://hyperformula.handsontable.com/docs/api/interfaces/changeexporter.md)‹T› | **Returns:** *T[]* ___ ### getChanges ▸ **getChanges**(): *[ChangeList](https://hyperformula.handsontable.com/docs/api/globals.md#changelist)* *Defined in [src/ContentChanges.ts:53](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L53)* **Returns:** *[ChangeList](https://hyperformula.handsontable.com/docs/api/globals.md#changelist)* ___ ### isEmpty ▸ **isEmpty**(): *boolean* *Defined in [src/ContentChanges.ts:57](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L57)* **Returns:** *boolean* ___ ### empty ▸ **empty**(): *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)‹›* *Defined in [src/ContentChanges.ts:25](https://github.com/handsontable/hyperformula/blob/af2d59d/src/ContentChanges.ts#L25)* **Returns:** *[ContentChanges](https://hyperformula.handsontable.com/docs/api/classes/contentchanges.md)‹›* --- ## EmptyStatistics URL: https://hyperformula.handsontable.com/docs/api/classes/emptystatistics # EmptyStatistics Do not store stats in the memory. Stats are not needed on daily basis ## Methods ### end ▸ **end**(`_name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)): *void* *Defined in [src/statistics/EmptyStatistics.ts:27](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/EmptyStatistics.ts#L27)* **`inheritdoc`** **Parameters:** Name | Type | ------ | ------ | `_name` | [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md) | **Returns:** *void* ___ ### incrementCriterionFunctionFullCacheUsed ▸ **incrementCriterionFunctionFullCacheUsed**(): *void* *Defined in [src/statistics/EmptyStatistics.ts:12](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/EmptyStatistics.ts#L12)* **`inheritdoc`** **Returns:** *void* ___ ### incrementCriterionFunctionPartialCacheUsed ▸ **incrementCriterionFunctionPartialCacheUsed**(): *void* *Defined in [src/statistics/EmptyStatistics.ts:17](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/EmptyStatistics.ts#L17)* **`inheritdoc`** **Returns:** *void* ___ ### measure ▸ **measure**‹**T**›(`name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), `func`: function): *T* *Defined in [src/statistics/Statistics.ts:80](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L80)* Measure given statistic as execution of given function. **Type parameters:** ▪ **T** **Parameters:** ▪ **name**: *[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)* statistic to track ▪ **func**: *function* function to call ▸ (): *T* **Returns:** *T* result of the function call ___ ### reset ▸ **reset**(): *void* *Defined in [src/statistics/Statistics.ts:33](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L33)* Resets statistics **Returns:** *void* ___ ### snapshot ▸ **snapshot**(): *Map‹[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), number›* *Defined in [src/statistics/Statistics.ts:90](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/Statistics.ts#L90)* Returns the snapshot of current results **Returns:** *Map‹[StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md), number›* ___ ### start ▸ **start**(`_name`: [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md)): *void* *Defined in [src/statistics/EmptyStatistics.ts:22](https://github.com/handsontable/hyperformula/blob/af2d59d/src/statistics/EmptyStatistics.ts#L22)* **`inheritdoc`** **Parameters:** Name | Type | ------ | ------ | `_name` | [StatType](https://hyperformula.handsontable.com/docs/api/enums/stattype.md) | **Returns:** *void*