{"id":23712050,"url":"https://github.com/jspreadsheet/formula","last_synced_at":"2026-01-24T06:44:32.620Z","repository":{"id":37723649,"uuid":"387011638","full_name":"jspreadsheet/formula","owner":"jspreadsheet","description":"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.","archived":false,"fork":false,"pushed_at":"2023-05-11T19:57:53.000Z","size":12,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-30T19:56:42.531Z","etag":null,"topics":["excel","formulas","google","jexcel","jspreadsheet","jss","sheets","spreadsheet"],"latest_commit_sha":null,"homepage":"https://jspreadsheet.com/products/formulas","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jspreadsheet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-17T18:24:06.000Z","updated_at":"2023-10-24T05:51:34.000Z","dependencies_parsed_at":"2022-08-27T02:39:49.308Z","dependency_job_id":null,"html_url":"https://github.com/jspreadsheet/formula","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jspreadsheet%2Fformula","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jspreadsheet%2Fformula/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jspreadsheet%2Fformula/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jspreadsheet%2Fformula/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jspreadsheet","download_url":"https://codeload.github.com/jspreadsheet/formula/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239800432,"owners_count":19699122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excel","formulas","google","jexcel","jspreadsheet","jss","sheets","spreadsheet"],"created_at":"2024-12-30T19:56:46.752Z","updated_at":"2026-01-24T06:44:27.601Z","avatar_url":"https://github.com/jspreadsheet.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003eJSS Formula Premium\u003c/h1\u003e\n\nThe JSS Formula Premium is a JavaScript software to parse and execute spreadsheet-like formulas. It handles ranges,\nvariables, worksheets, and a great number of formulas available in other spreadsheet software such as Excel or\nGoogle Spreadsheet. It deals with the JavaScript precision issues and, it is compatible with Jspreadsheet Pro plugins.\u003cbr\u003e\u003cbr\u003e\n\nThis plugin is distributed in two different versions: basic and premium.\u003cbr\u003e\u003cbr\u003e\n\n\u003ctable class='table'\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n    \u003cth\u003e\u003c/th\u003e\n    \u003cth style='text-align:center'\u003eFormula Basic\u003c/th\u003e\n    \u003cth style='text-align:center'\u003eFormula Premium\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\u003ctd\u003eLicense\u003c/td\u003e\u003ctd align='center'\u003eMIT\u003c/td\u003e\u003ctd align='center'\u003eRequired a license\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eScope\u003c/td\u003e\u003ctd align='center'\u003ewindow\u003c/td\u003e\u003ctd align='center'\u003erestricted scope\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eParser\u003c/td\u003e\u003ctd align='center'\u003enew Function\u003c/td\u003e\u003ctd align='center'\u003eCustom parser\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eJavaScript precision issues\u003c/td\u003e\u003ctd align='center'\u003eNo\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eDate operations\u003c/td\u003e\u003ctd align='center'\u003eNo\u003c/td\u003e\u003ctd align='center'\u003eYes\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eCross worksheets/spreadsheets calculations\u003c/td\u003e\u003ctd align='center'\u003eNo\u003c/td\u003e\u003ctd align='center'\u003eYes *\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eDefined names\u003c/td\u003e\u003ctd align='center'\u003eNo\u003c/td\u003e\u003ctd align='center'\u003eYes **\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eMatrix calculations\u003c/td\u003e\u003ctd align='center'\u003eNo\u003c/td\u003e\u003ctd align='center'\u003eYes **\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eNumber of implemented formulas\u003c/td\u003e\u003ctd align='center'\u003e403\u003c/td\u003e\u003ctd align='center'\u003e455\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\n\u003ch2\u003eCompatibility\u003c/h2\u003e\n\nThis software can be used stand-alone or integrated with Jspreadsheet CE, BASE, and PRO.\u003cbr\u003e\u003cbr\u003e\n\n\\* Only available on stand-alone and with the PRO distributions.\u003cbr\u003e\n\\*\\* Only available on stand-alone and with the PRO v8 distributions.\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003ch2\u003eLicense\u003c/h2\u003e\n\nThis plugin requires a license that should be associated with one specified domain. If you need a license for\nredistribution or SaaS, please keep in touch with contact@jspreadsheet.com\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003ch2\u003ePrecision\u003c/h2\u003e\n\nJSS Formula Premium tackles the JavaScript numeric precision.\u003cbr\u003e\n\n\u003cpre class=\"prettyprint linenums\"\u003e\n// Activate the precision adjust\nformula.adjustPrecision = true;\n\nformula('37.02 + 2.56');\n// Without adjustPrecision: 39.580000000000005\n// With adjustPrecision: 39.58\n\nformula('185.32 - 84.78');\n// Without adjustPrecision: 100.53999999999999\n// With adjustPrecision: 100.54\n\nformula('25.92 * 3.33');\n// Without adjustPrecision: 86.31360000000001\n// With adjustPrecision: 86.3136\n\nformula('9.15 / 6');\n// Without adjustPrecision: 1.5250000000000001\n// With adjustPrecision: 1.525\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003cp class='small'\u003eNOTE: When this option is enabled, the results will be round in a maximum ten decimal places.\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003ch2\u003eUsage\u003c/h2\u003e\n\nThe formula method receives the expression and the variables that will support the calculations.\u003cbr\u003e\n\n\u003cpre class=\"prettyprint linenums\"\u003e\n@param {string} expression - the formula to be calculated\n@param {object} variables - the variables and values necessary to parse the expression\n@param {number=} x - a optional coordinate reference\n@param {number=} y - a optional coordinate reference\n\nformula(expression: String, variables: Object, [x: Number], [y: Number]) : string|array\n\u003c/pre\u003e\n\n\n\u003cbr\u003e\u003cbr\u003e\n\n\u003ch3\u003eExamples\u003c/h3\u003e\n\nYou can run the following tests on the console of the browser when initiation as above.\u003cbr\u003e\u003cbr\u003e\n\n\u003ch4\u003eRange operations\u003c/h4\u003e\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('A1:B1*2', { A1: 2, B1: 4 });\n// Returns Array[ 4, 8 ]\n\nformula('SUM(A1:B1*2)', { A1: 1, B1: 'A2+B2', A2: 3, B2: 4 })\n// Returns 16\n\nformula('SUM(A1:A6)', { A1: 2, A2: 4, A3: 5, A4: 1, A5: 5, A6: 1 });\n// Returns 18\n\nformula('AVERAGE(CALCULATION*10)', { CALCULATION: 'A1:A3', A1: 1, A2: 2, A3: 3 })\n// Returns 20\n\nformula('SUM(B:B)', { B1: 1, B2: 1, B3: 14 });\n// Returns 16\n\u003c/pre\u003e\n\n\u003ch4\u003eConditional calculations\u003c/h4\u003e\n\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('IF(B1=0,0,B9/B1)', { B1:0, B9: 3 });\n// Returns zero when B1 is zero\n\nformula('IF(true, CALCULATION, 10)', { CALCULATION: 'A1:A3', A1: 1, A2: 2, A3: 3 })\n// Returns [[1], [2], [3]]\n\nformula('IF(C16+C15!=0,C13+C14,false)', { C16: 0, C15: 0, C14: 3, C13: 12 })\n// Returns false\n\u003c/pre\u003e\n\n\u003ch4\u003eComparisions\u003c/h4\u003e\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('1*2\u003c1^4');\n// Returns false\n\nformula('(1==1)\u003c\u003e(2\u003e2)')\n// Returns true\n\u003c/pre\u003e\n\n\u003ch4\u003eDate calculations\u003c/h4\u003e\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('NOW()+1');\n// Today + one day\n\nformula('DATE(2021,1,1) \u003e DATE(2021,2,1)');\n// false\n\u003c/pre\u003e\n\n\u003ch4\u003eCross worksheets\u003c/h4\u003e\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('SHEET1!A1*A1', { 'SHEET1!A1': 2, 'A1': 3 });\n// Returns 6\n\nformula('SUM(SHEET3!B1:B3)', { 'SHEET3!B1': 3, 'SHEET3!B2': 3, 'SHEET3!B3': 4 });\n// Returns 10\n\nformula('SUM(B:B)', { 'B1': 1, 'B2': 2, 'B3': 4 });\n// Returns 7\n\u003c/pre\u003e\n\n\u003ch4\u003eWorksheets operations\u003c/h4\u003e\n\u003cpre class=\"prettyprint linenums\"\u003e\nformula('SHEET1!A1*10', { SHEET1: [[1,2,3],[4,5,6]] });\n// Returns 1 * 10\n\nformula('SHEET1!B1*SHEET2!B1', { SHEET1: [[1,2,3],[4,5,6]], SHEET2: [[10,20,30]] });\n// Returns 2 * 20\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch2\u003eIntegrating with Jspreadsheet\u003c/h2\u003e\n\nHow to integrate Jspreadsheet and the formula-pro plugin.\u003cbr\u003e\u003cbr\u003e\n\n\u003ch3\u003eUsing CDN\u003c/h3\u003e\n\n\u003cpre class=\"prettyprint linenums\"\u003e\n\u0026#60;html\u003e\n\u0026#60;script src=\"https://jspreadsheet.com/v8/jspreadsheet.js\"\u003e\u0026#60;/script\u003e\n\u0026#60;script src=\"https://jsuites.net/v4/jsuites.js\"\u003e\u0026#60;/script\u003e\n\u0026#60;link rel=\"stylesheet\" href=\"https://jspreadsheet.com/v7/jspreadsheet.css\" type=\"text/css\" /\u003e\n\u0026#60;link rel=\"stylesheet\" href=\"https://jsuites.net/v4/jsuites.css\" type=\"text/css\" /\u003e\n\n\u0026#60;script src=\"https://jspreadsheet.com/v8/plugins/formula-pro.js\"\u003e\u0026#60;/script\u003e\n\n\u0026lt;div id='spreadsheet'\u003e\u0026lt;/div\u003e\n\n\u0026lt;script\u003e\n// License for Formula Plugin\njspreadsheet.license = 'your-license';\n\n// Add-on for Jspreasheet\njspreadsheet.setExtensions({ formula });\n\n// Create the spreadsheets\njspreadsheet(document.getElementById('spreadsheet'), {\n    worksheets: [\n        { minDimensions: [10, 10] },\n        { minDimensions: [10, 10] },\n    ],\n});\n\u0026lt;/script\u003e\n\u0026lt;/html\u003e\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch3\u003eUsing NPM\u003c/h3\u003e\n\n\u003cpre class=\"prettyprint linenums\"\u003e\n// Jspreadsheet Pro\nimport jspreadsheet from 'jspreadsheet-pro';\n\n// Formula Premium Plugin\nimport formula from '@jspreadsheet/formula-pro';\n\n// License for Formula Plugin\njspreadsheet.license = 'your-license';\n\n// Add-on for Jspreasheet\njspreadsheet.setExtensions({ formula });\n\n// Create a spreadsheet\njspreadsheet(document.getElementById('spreadsheet'), {\n    worksheets: [\n        { minDimensions: [10, 10] },\n        { minDimensions: [10, 10] },\n    ]\n});\n\u003c/pre\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjspreadsheet%2Fformula","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjspreadsheet%2Fformula","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjspreadsheet%2Fformula/lists"}