# Compatibility with Microsoft Excel
Achieve nearly full compatibility wih Microsoft Excel, using the right HyperFormula configuration.
Contents:
# Overview
While HyperFormula conforms to the OpenDocument (opens new window) 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 2.7.1
), 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.
# Configure compatibility with Microsoft Excel
# 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 default
accentSensitive: true,
ignorePunctuation: false, // set by default
localeLang: 'en-US',
Related options:
# 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 default
useRegularExpressions: false, // set by default
matchWholeCell: true, // set by default
Related options:
# 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
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
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
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
In Microsoft Excel, the year 1900 is incorrectly (opens new window) 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
Both HyperFormula and Microsoft Excel automatically round floating-point numbers. To configure this feature, use these options:
# 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 default
decimalSeparator: '.', // set by default
thousandSeparator: '', // set by default
arrayColumnSeparator: ',', // set by default
arrayRowSeparator: ';', // set by default
Related options:
# 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
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 2.7.1
).
// 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()');