Spreadsheet Helpers
Jspreadsheet provides a comprehensive set of helper methods for common spreadsheet operations, including coordinate conversions, formula manipulation, CSV parsing, and range management.
What's new with Version 13
transformTokenWithF4: cycles a reference through the absolute forms, also on sheet-qualified referencesverifyWorksheetName: quotes a worksheet name the way the parser expects, so a qualified range built by your code always resolves
Documentation
Methods
| Method | Description |
|---|---|
getColumnName |
Get the column letter based on a number.jspreadsheet.helpers.getColumnName(columnNumber: Number) => String |
getCellNameFromCoords |
Get the spreadsheet-like cell name from the coordinates.jspreadsheet.helpers.getCellNameFromCoords(x: Number, y: Number) => String |
getCoordsFromCellName |
Get the coordinates from the spreadsheet-like cell name.jspreadsheet.helpers.getCoordsFromCellName(cellName: String) => [Number, Number] |
shiftFormula |
Update all variables from a formula based on a shift of x, y positions.jspreadsheet.helpers.shiftFormula(formula: String, x: Number, y: Number) => String |
getTokensFromRange |
Extract the tokens from a range.jspreadsheet.helpers.getTokensFromRange(range: String) => Array |
getRangeFromTokens |
Get the range from an array of tokens.jspreadsheet.helpers.getRangeFromTokens(tokens: Array) => String |
getCoordsFromRange |
Get the coordinates from a range string.jspreadsheet.helpers.getCoordsFromRange(range: string, adjust?: boolean) => [number,number,number,number] |
getRangeFromCoords |
Get the range string such as A1:A9 from an array of numbers.jspreadsheet.helpers.getRangeFromCoords(range: [number,number,number,number]) => String |
createFromTable |
Extract the configuration to create a new spreadsheet from a static HTML element.jspreadsheet.helpers.createFromTable(element: HTMLElement, options: Object) => Object |
parseCSV |
Transform a CSV string into an array.jspreadsheet.helpers.parseCSV(data: String, delimiter: String) => Array |
getTokensFromCoords |
Get all token names from a range of coordinates.getTokensFromCoords: (x1: number, y1: number, x2: number, y2: number, wsName?: string) => [] |
transformTokenWithF4 |
Cycle a reference through the absolute forms, as the F4 key does in the formula editor: A1, $A$1, A$1, $A1. Sheet-qualified tokens cycle their reference part only.jspreadsheet.helpers.transformTokenWithF4(token: String) => String |
verifyWorksheetName |
Quote a worksheet name when a reference requires it: any non-word character or a leading digit comes back wrapped in single quotes (My Sheet becomes 'My Sheet'), so a caller building a qualified range gets a reference the engine resolves.jspreadsheet.helpers.verifyWorksheetName(name: String) => String |
Examples
Helper Methods Usage
<html>
<script src="https://jspreadsheet.com/v13/jspreadsheet.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v13/jspreadsheet.css" type="text/css" />
<script src="https://jsuites.net/v6/jsuites.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v6/jsuites.css" type="text/css" />
<div id="spreadsheet"></div>
<script>
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NTg1ZDc1NzA5MDQ5N2ZjY2I2MTk3ODE3OGUwMWJiMmY4MmZmYzdjNDllYWU0ZjU2MjdlMjllZDY4ZmM1YWIxZjQ4MWZjYWVhY2FlNDVlZjJhYWZkYmJlNTk0OWFjMWQxN2RlYTVjMGZmNWJkYTk3YWE0NTU1MjEyZGVkMGFiY2QsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94Tnprd01qRXlPREl6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');
let worksheets = jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [{
minDimensions: [6,6],
data: [
['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3']
]
}]
});
// Helper method examples
console.log('Cell name A1:', jspreadsheet.helpers.getCellNameFromCoords(0,0));
console.log('Range coords B1:C4:', jspreadsheet.helpers.getCoordsFromRange('B1:C4'));
console.log('Cell B2 coords:', worksheets[0].helpers.getCoordsFromCellName('B2'));
// Parse CSV example
let csvData = "Name,Age,City\nJohn,25,NYC\nJane,30,LA";
let parsedData = jspreadsheet.helpers.parseCSV(csvData, ',');
console.log('Parsed CSV:', parsedData);
</script>
</html>
import React, {useRef} from "react";
import {Spreadsheet, Worksheet, jspreadsheet} from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NTg1ZDc1NzA5MDQ5N2ZjY2I2MTk3ODE3OGUwMWJiMmY4MmZmYzdjNDllYWU0ZjU2MjdlMjllZDY4ZmM1YWIxZjQ4MWZjYWVhY2FlNDVlZjJhYWZkYmJlNTk0OWFjMWQxN2RlYTVjMGZmNWJkYTk3YWE0NTU1MjEyZGVkMGFiY2QsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94Tnprd01qRXlPREl6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
const handleDemo = () => {
if (spreadsheet.current) {
// Returns A1
let cellName = jspreadsheet.helpers.getCellNameFromCoords(0, 0);
console.log('Cell name:', cellName);
// Returns [1, 0, 2, 3]
let range = jspreadsheet.helpers.getCoordsFromRange('B1:C4');
console.log('Range coords:', range);
// Also works with the worksheet instance. Returns [1,1]
let coords = spreadsheet.current[0].helpers.getCoordsFromCellName('B2');
console.log('Cell coords:', coords);
}
};
// Render data grid component
return (
<>
<Spreadsheet ref={spreadsheet}>
<Worksheet minDimensions={[6,6]} />
</Spreadsheet>
<button onClick={handleDemo}>Test Helper Methods</button>
</>
);
}
<template>
<Spreadsheet ref="spreadsheet">
<Worksheet />
</Spreadsheet>
</template>
<script>
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NTg1ZDc1NzA5MDQ5N2ZjY2I2MTk3ODE3OGUwMWJiMmY4MmZmYzdjNDllYWU0ZjU2MjdlMjllZDY4ZmM1YWIxZjQ4MWZjYWVhY2FlNDVlZjJhYWZkYmJlNTk0OWFjMWQxN2RlYTVjMGZmNWJkYTk3YWE0NTU1MjEyZGVkMGFiY2QsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94Tnprd01qRXlPREl6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');
export default {
components: {
Spreadsheet,
Worksheet,
},
mounted() {
// Helper method examples
console.log('Cell name A1:', jspreadsheet.helpers.getCellNameFromCoords(0,0));
console.log('Range coords B1:C4:', jspreadsheet.helpers.getCoordsFromRange('B1:C4'));
// Wait for the spreadsheet to be ready
this.$nextTick(() => {
if (this.$refs.spreadsheet.current[0]) {
console.log('Cell B2 coords:', this.$refs.spreadsheet.current[0].helpers.getCoordsFromCellName('B2'));
}
});
}
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css"
import "jsuites/dist/jsuites.css"
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NTg1ZDc1NzA5MDQ5N2ZjY2I2MTk3ODE3OGUwMWJiMmY4MmZmYzdjNDllYWU0ZjU2MjdlMjllZDY4ZmM1YWIxZjQ4MWZjYWVhY2FlNDVlZjJhYWZkYmJlNTk0OWFjMWQxN2RlYTVjMGZmNWJkYTk3YWE0NTU1MjEyZGVkMGFiY2QsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94Tnprd01qRXlPREl6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');
@Component({
standalone: true,
selector: "app-root",
template: `<div #spreadsheet></div>`
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
worksheets: [
{
minDimensions: [6,6],
data: [
['Sample', 'Data', 'Here'],
['Row2', 'Col2', 'Val3'],
['Test', 'Values', 'Demo']
]
}
]
});
// Helper method examples
console.log('Cell name A1:', jspreadsheet.helpers.getCellNameFromCoords(0,0));
console.log('Range coords B1:C4:', jspreadsheet.helpers.getCoordsFromRange('B1:C4'));
console.log('Cell B2 coords:', this.worksheets[0].helpers.getCoordsFromCellName('B2'));
// Parse CSV functionality
const csvString = 'Name,Age\nJohn,25\nJane,30';
const parsed = jspreadsheet.helpers.parseCSV(csvString, ',');
console.log('Parsed CSV:', parsed);
}
}