SPELLNUMS

SpreadJS allows users to format or display the numbers as words, for example display ‘34’ as ‘thirty four’. This is done thanks to the SPELLNUMS custom function.

Syntax Argument Description arg (Required) - the value that will be transformed into words. You can input the SPELLNUMS function from the above code directly into a cell, or you can use the setFormula method to apply the formula. Usage notes The SPELLNUMS function is very easy to use. It requires a type number argument that represent the value you wish to convert into text. Note that, when your number has a fractional part it will be rounded up to the nearest integer. Benefits There might be various reasons to change digits stored as numbers to text. For example: in the invoice totals or when you have a text paragraph inside your spreadsheet (numbers can disrupt readability so for writing purpose is better to spell the numbers smaller than 100). This function allows you to convert a given number into words without having to create complicated custom functions and methods.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> <gc-worksheet :autoGenerateColumns='autoGenerateColumns'> </gc-worksheet> </gc-spread-sheets> </div> </template> <script setup> import '@mescius/spread-sheets-vue'; import { ref } from "vue"; import GC from "@mescius/spread-sheets"; const spreadRef = ref(null); let initSpread = function (spread) { spreadRef.value = spread; //custom function - should be a genuine one function NumbersToWords() { this.name = "SPELLNUMS"; this.maxArgs = 1; this.minArgs = 1; } NumbersToWords.prototype = new GC.Spread.CalcEngine.Functions.Function(); NumbersToWords.prototype.evaluate = function (arg) { if (arguments.length === 1 && !isNaN(parseInt(arg))) { let string = Math.floor(arg).toString(), units, tens, scales, start, end, chunks, chunksLen, chunk, ints, i, word, words, and = 'and'; /* Remove spaces and commas */ string = string.replace(/[, ]/g, ""); if (parseInt(string) === 0) { return 'zero'; } units = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']; tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']; scales = ['', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quatttuor-decillion', 'quindecillion', 'sexdecillion', 'septen-decillion', 'octodecillion', 'novemdecillion', 'vigintillion', 'centillion']; start = string.length; chunks = []; while (start > 0) { end = start; chunks.push(string.slice((start = Math.max(0, start - 3)), end)); } chunksLen = chunks.length; if (chunksLen > scales.length) { return ''; } words = []; for (i = 0; i < chunksLen; i++) { chunk = parseInt(chunks[i]); if (chunk) { /* Split chunk into array of individual integers */ ints = chunks[i].split('').reverse().map(parseFloat); /* If tens integer is 1, i.e. 10, then add 10 to units integer */ if (ints[1] === 1) { ints[0] += 10; } /* Add scale word if chunk is not zero and array item exists */ if ((word = scales[i])) { words.push(word); } /* Add unit word if array item exists */ if ((word = units[ints[0]])) { words.push(word); } /* Add tens word if array item exists */ if ((word = tens[ints[1]])) { words.push(word); } /* Add 'and' string after units or tens integer if: */ if (ints[0] || ints[1]) { /* Chunk has a hundreds integer or chunk is the first of multiple chunks */ if (ints[2] || !i && chunksLen) { if (ints.length > 2) { words.push(and); } } } /* Add hundreds word if array item exists */ if ((word = units[ints[2]])) { words.push(word + ' hundred'); } } } return words.reverse().join(' '); } return "#VALUE!"; }; spread.suspendPaint(); let sheet = spread.getSheet(0); sheet.addCustomFunction(new NumbersToWords()); sheet.setColumnWidth(0, 120); sheet.setColumnWidth(1, 120); sheet.setValue(0, 0, 'Number'); sheet.setValue(0, 1, 'Formula'); sheet.setValue(0, 2, 'Result'); sheet.setValue(1, 0, '23679'); sheet.setValue(1, 1, '=SPELLNUMS(A2)'); sheet.setFormula(1, 2, 'SPELLNUMS(A2)'); sheet.setValue(2, 0, '34'); sheet.setValue(2, 1, '=SPELLNUMS(A3)'); sheet.setFormula(2, 2, 'SPELLNUMS(A3)'); sheet.setValue(3, 0, '4567893400'); sheet.setValue(3, 1, '=SPELLNUMS(A4)'); sheet.setFormula(3, 2, 'SPELLNUMS(A4)'); spread.resumePaint(); } </script> <style scoped> #app { height: 100%; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } #switchAutoMergeMode { margin: 10px 0px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } </style>
<!DOCTYPE html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>SpreadJS VUE</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/vue3/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/en/vue3/node_modules/systemjs/dist/system.src.js"></script> <script src="./systemjs.config.js"></script> <script src="./compiler.js" type="module"></script> <script> var System = SystemJS; System.import("./src/app.js"); System.import('$DEMOROOT$/en/lib/vue3/license.js'); </script> </head> <body> <div id="app"></div> </body> </html>
(function (global) { SystemJS.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, packageConfigPaths: [ './node_modules/*/package.json', "./node_modules/@mescius/*/package.json", "./node_modules/@babel/*/package.json", "./node_modules/@vue/*/package.json" ], map: { 'vue': "npm:vue/dist/vue.esm-browser.js", 'tiny-emitter': 'npm:tiny-emitter/index.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', "systemjs-babel-build": "npm:systemjs-plugin-babel/systemjs-babel-browser.js", '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-resources-en': 'npm:@mescius/spread-sheets-resources-en/index.js', '@mescius/spread-sheets-vue': 'npm:@mescius/spread-sheets-vue/index.js' }, meta: { '*.css': { loader: 'systemjs-plugin-css' }, '*.vue': { loader: "../plugin-vue/index.js" } } }); })(this);