Compatibility with Microsoft Excel
Achieve nearly full compatibility with Microsoft Excel, using the right HyperFormula configuration.
Contents:
Overview
Section titled “Overview”While HyperFormula conforms to the OpenDocument 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.3.0), or limitations of Microsoft Excel or Google Sheets themselves. For the full list of such differences, see this page.
Still, with the right configuration, you can achieve nearly full compatibility.
Excel function coverage
Section titled “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 418.
For a complete list of supported functions, see the built-in functions page.
If you need any of the missing Excel functions, you can contact us or implement them as custom functions, extending HyperFormula’s capabilities to meet your specific requirements.
Configure compatibility with Microsoft Excel
Section titled “Configure compatibility with Microsoft Excel”String comparison rules
Section titled “String comparison rules”In the US version of Microsoft Excel, by default, string comparison is accent-sensitive and case-insensitive.
To set up HyperFormula in the same way, use this configuration:
caseSensitive: false, // set by defaultaccentSensitive: true,ignorePunctuation: false, // set by defaultlocaleLang: 'en-US',Related options:
Function criteria
Section titled “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:
useWildcards: true, // set by defaultuseRegularExpressions: false, // set by defaultmatchWholeCell: true, // set by defaultRelated options:
TRUE and FALSE constants
Section titled “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, by using HyperFormula’s TRUE() and FALSE() functions.
hfInstance.addNamedExpression('TRUE', '=TRUE()');hfInstance.addNamedExpression('FALSE', '=FALSE()');Array arithmetic mode
Section titled “Array arithmetic mode”In Microsoft Excel, the array arithmetic mode is enabled by default.
To set up HyperFormula in the same way, set the useArrayArithmetic option to true.
useArrayArithmetic: true,Whitespace in formulas
Section titled “Whitespace in formulas”In Microsoft Excel, all whitespace characters inside formulas are ignored.
To set up HyperFormula in the same way, set the ignoreWhiteSpace option to 'any'.
ignoreWhiteSpace: 'any',Formulas that evaluate to null
Section titled “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 option to true.
evaluateNullToZero: true,Leap year bug
Section titled “Leap year bug”In Microsoft Excel, the year 1900 is incorrectly treated as a leap year.
To set up HyperFormula in the same way, use this configuration:
leapYear1900: true,nullDate: { year: 1899, month: 12, day: 31 },Numerical precision
Section titled “Numerical precision”Both HyperFormula and Microsoft Excel automatically round floating-point numbers. To configure this feature, use these options:
Separators
Section titled “Separators”In Microsoft Excel, separators depend on your configured locale, whereas in HyperFormula, you set up separators through options (e.g., 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 can’t be the same as 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:
functionArgSeparator: ',', // set by defaultdecimalSeparator: '.', // set by defaultthousandSeparator: '', // set by defaultarrayColumnSeparator: ',', // set by defaultarrayRowSeparator: ';', // set by defaultRelated options:
Date and time formats
Section titled “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.
Options related to date and time formats:
Full configuration
Section titled “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.3.0).
// define optionsconst 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 instanceconst hfInstance = HyperFormula.buildEmpty(options);
// define TRUE and FALSE constantshfInstance.addNamedExpression('TRUE', '=TRUE()');hfInstance.addNamedExpression('FALSE', '=FALSE()');