@pequity/format-formula
v1.0.3
Published
Pretty print Excel formulas.
Downloads
1,364
Readme
format-formula
This project is a partial port of the excel-formula library to ES6.
It contains a set of functions that can be used to pretty print Excel formulas.
Key Differences from excel-formula:
- Removed external dependencies (Bootstrap, jQuery)
- Removed methods not related to formatting
- Removed jQuery methods and replaced them with ES6 equivalents
- Modularized the library with support for tree-shaking
- Does not expose a global (window) variable
- Added
isEu
as an option to thegetTokens
,formatFormula
andformatFormulaHTML
methods - Provides ES, CJS, and UMD module formats
Install
npm install @pequity/format-formula
Usage
Module bundler
import { formatFormula } from '@pequity/format-formula';
const formattedFormula = formatFormula('SUM(A1:A2)');
Browser
<script src="https://unpkg.com/@pequity/format-formula"></script>
<script>
const formattedFormula = FormatFormula.formatFormula('SUM(A1:A2)');
</script>
Available methods
formatFormula
Formats an excel formula.
Signature:formatFormula(formula: string, options): string
formula
- The excel formula to formatoptions
- An optional object with the following properties:
| Name | Description | Default |
| ------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| tmplFunctionStart | Template for the start of a function, the {{token}}
will contain the name of the function. | '{{autoindent}}{{token}}(\n'
|
| tmplFunctionStop | Template for when the end of a function has been reached. | '\n{{autoindent}}{{token}})'
|
| tmplOperandError | Template for errors. | ' {{token}}'
|
| tmplOperandRange | Template for ranges and variable names. | '{{autoindent}}{{token}}'
|
| tmplLogical | Template for logical operators | '{{token}}{{autolinebreak}}'
|
| tmplOperandLogical | Template for logical operators such as + - = ...
| '{{autoindent}}{{token}}'
|
| tmplOperandNumber | Template for numbers. | '{{autoindent}}{{token}}'
|
| tmplOperandText | Template for text/strings. | '{{autoindent}}"{{token}}"'
|
| tmplArgument | Template for argument separators such as ,.
| '{{token}}\n'
|
| tmplOperandOperatorInfix | - | ' {{token}}{{autolinebreak}}'
|
| tmplFunctionStartArray | Template for the start of an array. | ''
|
| tmplFunctionStartArrayRow | Template for the start of an array row. | '{'
|
| tmplFunctionStopArrayRow | Template for the end of an array row. | '}'
|
| tmplFunctionStopArray | Template for the end of an array. | ''
|
| tmplSubexpressionStart | Template for the sub expression start. | '{{autoindent}}(\n'
|
| tmplSubexpressionStop | Template for the sub expression stop. | '\n)'
|
| tmplIndentTab | Template for the tab char. | '\t'
|
| tmplIndentSpace | Template for space char. | ' '
|
| autoLineBreak | When rendering line breaks automatically which types should it break on. | 'TOK_TYPE_FUNCTION \| TOK_TYPE_ARGUMENT \| TOK_SUBTYPE_LOGICAL \| TOK_TYPE_OP_IN'
|
| newLine | Used for the {{autolinebreak}}
replacement as well as some string parsing. | '\n'
|
| trim | Trim the output. | true
|
| customTokenRender | This is a call back to a custom token function. | null
|
| prefix | Add a prefix to the formula. | ''
|
| postfix | Add a suffix to the formula. | ''
|
| isEu | If true
then ;
is treated as list separator, if false
then ;
is treated as array row separator | false
|
Template Values
{{autoindent}}
- apply auto indent based on current tree level{{token}}
- the named token such as FUNCTION_NAME or "string"{{autolinebreak}}
- apply line break automatically. tests for next element only at this point
customTokenRender Example
function (tokenString, token, indent, lineBreak) {
const outStr = token
const useTemplate = true
// In the return object "useTemplate" tells formatFormula()
// weather or not to apply the template to what your return from the "tokenString".
return { tokenString: outStr, useTemplate }
}
formatFormulaHTML
Formats an excel formula into HTML.
Signature:formatFormulaHTML(formula: string, options): string
formula
- The excel formula to formatoptions
- An optional object with the following properties (inherits defaults fromformatFormula
):
| Name | Description | Default |
| ------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| tmplFunctionStart | Template for the start of a function, the {{token}}
will contain the name of the function. | '{{autoindent}}<span class="function">{{token}}</span><span class="function_start">(</span><br />'
|
| tmplFunctionStop | Template for when the end of a function has been reached. | '<br />{{autoindent}}{{token}}<span class="function_stop">)</span>'
|
| tmplOperandError | Template for errors. | ' {{token}}'
|
| tmplOperandRange | Template for ranges and variable names. | '{{autoindent}}{{token}}'
|
| tmplLogical | Template for logical operators | '{{token}}{{autolinebreak}}'
|
| tmplOperandLogical | Template for logical operators such as + - = ...
| '{{autoindent}}{{token}}'
|
| tmplOperandNumber | Template for numbers. | '{{autoindent}}{{token}}'
|
| tmplOperandText | Template for text/strings. | '{{autoindent}}<span class="quote_mark">"</span><span class="text">{{token}}</span><span class="quote_mark">"</span>'
|
| tmplArgument | Template for argument separators such as ,.
| '{{token}}<br />'
|
| tmplOperandOperatorInfix | - | ' {{token}}{{autolinebreak}}'
|
| tmplFunctionStartArray | Template for the start of an array. | ''
|
| tmplFunctionStartArrayRow | Template for the start of an array row. | '{'
|
| tmplFunctionStopArrayRow | Template for the end of an array row. | '}'
|
| tmplFunctionStopArray | Template for the end of an array. | ''
|
| tmplSubexpressionStart | Template for the sub expression start. | '{{autoindent}}('
|
| tmplSubexpressionStop | Template for the sub expression stop. | ' )'
|
| tmplIndentTab | Template for the tab char. | '<span class="tabbed"> </span>'
|
| tmplIndentSpace | Template for space char. | ' '
|
| autoLineBreak | When rendering line breaks automatically which types should it break on. | 'TOK_TYPE_FUNCTION \| TOK_TYPE_ARGUMENT \| TOK_SUBTYPE_LOGICAL \| TOK_TYPE_OP_IN '
|
| newLine | Used for the {{autolinebreak}}
replacement as well as some string parsing. | '<br />'
|
| trim | Trim the output. | true
|
| customTokenRender | This is a call back to a custom token function. | Custom function for formatFormulaHTML |
| prefix | Add a prefix to the formula. | '='
|
| postfix | Add a suffix to the formula. | ''
|
getTokens
Tokenizes an excel formula.
Signature:
getTokens(formula: string isEu: boolean): F_token[]
formula
- The excel formula to formatisEu
- Iftrue
then;
is treated as list separator, iffalse
then;
is treated as array row separator
Returns an array of tokens, e.g. given the formula A1+1000
the output would be:
[
{
"subtype": "range",
"type": "operand",
"value": "A1"
},
{
"subtype": "math",
"type": "operator-infix",
"value": "+"
},
{
"subtype": "number",
"type": "operand",
"value": "1000"
}
]