Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jspreadsheet/formula
The JSS Formula Premium is a JavaScript software to parse and execute spreadsheet-like formulas. It handles ranges, variables, worksheets, and a great number of formulas available in other spreadsheet software such as Excel or Google Spreadsheet.
https://github.com/jspreadsheet/formula
excel formulas google jexcel jspreadsheet jss sheets spreadsheet
Last synced: about 1 month ago
JSON representation
The JSS Formula Premium is a JavaScript software to parse and execute spreadsheet-like formulas. It handles ranges, variables, worksheets, and a great number of formulas available in other spreadsheet software such as Excel or Google Spreadsheet.
- Host: GitHub
- URL: https://github.com/jspreadsheet/formula
- Owner: jspreadsheet
- Created: 2021-07-17T18:24:06.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-07-17T18:37:34.000Z (over 3 years ago)
- Last Synced: 2023-03-05T17:33:50.512Z (almost 2 years ago)
- Topics: excel, formulas, google, jexcel, jspreadsheet, jss, sheets, spreadsheet
- Homepage: https://jspreadsheet.com/products/formulas
- Size: 8.79 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
JSS Formula Premium
The JSS Formula Premium is a JavaScript software to parse and execute spreadsheet-like formulas. It handles ranges,
variables, worksheets, and a great number of formulas available in other spreadsheet software such as Excel or
Google Spreadsheet. It deals with the JavaScript precision issues and, it is compatible with Jspreadsheet Pro plugins.This plugin is distributed in two different versions: basic and premium.
Formula Basic
Formula PremiumLicenseMITRequired a license
Scopewindowrestricted scope
Parsernew FunctionCustom parser
JavaScript precision issuesNoYes
Date operationsNoYes
Cross worksheets/spreadsheets calculationsNoYes *
Defined namesNoYes **
Matrix calculationsNoYes **
Number of implemented formulas403455
Compatibility
This software can be used stand-alone or integrated with Jspreadsheet CE, BASE, and PRO.
\* Only available on stand-alone and with the PRO distributions.
\*\* Only available on stand-alone and with the PRO v8 distributions.
License
This plugin requires a license that should be associated with one specified domain. If you need a license for
redistribution or SaaS, please keep in touch with [email protected]
Precision
JSS Formula Premium tackles the JavaScript numeric precision.
// Activate the precision adjust
formula.adjustPrecision = true;formula('37.02 + 2.56');
// Without adjustPrecision: 39.580000000000005
// With adjustPrecision: 39.58formula('185.32 - 84.78');
// Without adjustPrecision: 100.53999999999999
// With adjustPrecision: 100.54formula('25.92 * 3.33');
// Without adjustPrecision: 86.31360000000001
// With adjustPrecision: 86.3136formula('9.15 / 6');
// Without adjustPrecision: 1.5250000000000001
// With adjustPrecision: 1.525
NOTE: When this option is enabled, the results will be round in a maximum ten decimal places.
Usage
The formula method receives the expression and the variables that will support the calculations.
@param {string} expression - the formula to be calculated
@param {object} variables - the variables and values necessary to parse the expression
@param {number=} x - a optional coordinate reference
@param {number=} y - a optional coordinate referenceformula(expression: String, variables: Object, [x: Number], [y: Number]) : string|array
Examples
You can run the following tests on the console of the browser when initiation as above.
Range operations
formula('A1:B1*2', { A1: 2, B1: 4 });
// Returns Array[ 4, 8 ]formula('SUM(A1:B1*2)', { A1: 1, B1: 'A2+B2', A2: 3, B2: 4 })
// Returns 16formula('SUM(A1:A6)', { A1: 2, A2: 4, A3: 5, A4: 1, A5: 5, A6: 1 });
// Returns 18formula('AVERAGE(CALCULATION*10)', { CALCULATION: 'A1:A3', A1: 1, A2: 2, A3: 3 })
// Returns 20formula('SUM(B:B)', { B1: 1, B2: 1, B3: 14 });
// Returns 16Conditional calculations
formula('IF(B1=0,0,B9/B1)', { B1:0, B9: 3 });
// Returns zero when B1 is zeroformula('IF(true, CALCULATION, 10)', { CALCULATION: 'A1:A3', A1: 1, A2: 2, A3: 3 })
// Returns [[1], [2], [3]]formula('IF(C16+C15!=0,C13+C14,false)', { C16: 0, C15: 0, C14: 3, C13: 12 })
// Returns falseComparisions
formula('1*2<1^4');
// Returns falseformula('(1==1)<>(2>2)')
// Returns trueDate calculations
formula('NOW()+1');
// Today + one dayformula('DATE(2021,1,1) > DATE(2021,2,1)');
// falseCross worksheets
formula('SHEET1!A1*A1', { 'SHEET1!A1': 2, 'A1': 3 });
// Returns 6formula('SUM(SHEET3!B1:B3)', { 'SHEET3!B1': 3, 'SHEET3!B2': 3, 'SHEET3!B3': 4 });
// Returns 10formula('SUM(B:B)', { 'B1': 1, 'B2': 2, 'B3': 4 });
// Returns 7Worksheets operations
formula('SHEET1!A1*10', { SHEET1: [[1,2,3],[4,5,6]] });
// Returns 1 * 10formula('SHEET1!B1*SHEET2!B1', { SHEET1: [[1,2,3],[4,5,6]], SHEET2: [[10,20,30]] });
// Returns 2 * 20
Integrating with Jspreadsheet
How to integrate Jspreadsheet and the formula-pro plugin.
Using CDN
<html>
<script src="https://jspreadsheet.com/v8/jspreadsheet.js"></script>
<script src="https://jsuites.net/v4/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v7/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v4/jsuites.css" type="text/css" /><script src="https://jspreadsheet.com/v8/plugins/formula-pro.js"></script>
<div id='spreadsheet'></div>
<script>
// License for Formula Plugin
jspreadsheet.license = 'your-license';// Add-on for Jspreasheet
jspreadsheet.setExtensions({ formula });// Create the spreadsheets
jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [
{ minDimensions: [10, 10] },
{ minDimensions: [10, 10] },
],
});
</script>
</html>
Using NPM
// Jspreadsheet Pro
import jspreadsheet from 'jspreadsheet-pro';// Formula Premium Plugin
import formula from '@jspreadsheet/formula-pro';// License for Formula Plugin
jspreadsheet.license = 'your-license';// Add-on for Jspreasheet
jspreadsheet.setExtensions({ formula });// Create a spreadsheet
jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [
{ minDimensions: [10, 10] },
{ minDimensions: [10, 10] },
]
});