Meta Information
Store and manage hidden metadata for individual cells programmatically. Meta-information enables attaching custom data to cells without affecting their visible content or user interface.
Documentation
Methods
The following methods provide programmatic control over cell meta information:
Method | Description |
---|---|
getMeta |
Get meta information from a specific cell or all cells.getMeta('A1') or getMeta() for allgetMeta(cellName?: string) => object |
setMeta |
Set meta information for single or multiple cells.setMeta('A1', 'key', 'value') or setMeta({A1: {key: 'value'}}) setMeta(cellName: string | object, key?: string, value?: any) => void |
resetMeta |
Reset meta information for specified cells or all cells.resetMeta(['A1', 'B2']) or resetMeta() for allresetMeta(cellNames?: string[]) => void |
Events
Event | Description |
---|---|
onchangemeta |
Triggered when meta information changes.onchangemeta(worksheet, meta) => void |
Configuration
Property | Description |
---|---|
meta: object |
Initial meta information object with cell names as keys |
Examples
Meta Information Management
This example demonstrates programmatic cell metadata management using the getMeta, setMeta, and resetMeta methods.
<html>
<script src="https://jspreadsheet.com/v12/jspreadsheet.js"></script>
<script src="https://jsuites.net/v6/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v12/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v6/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<div id="spreadsheet"></div>
<p><textarea id='console' style='width:100%;height:80px;'></textarea></p>
<input type="button" id="btn1" value="Set meta data for multiple cells"/><br/><br/>
<input type="button" id="btn2" value="Set meta information for B2"/><br/><br/>
<input type="button" id="btn3" value="Reset meta information for A1, B2, C2"/><br/><br/>
<input type="button" id="btn4" value="Get meta information for A1"/><br/><br/>
<input type="button" id="btn5" value="Get all meta information"/><br/><br/>
<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('Zjg3ZDljNzBiMWVhODgyYmJjZTExMTY3NDM4MWU1YmE3ZDIzZmVhZDEyNzAzM2FiY2UwYWZkMzg0MmYwMDQyOWJlMWM0YzI3YjQyMTk4OTUyZDgwOTU2N2VlNWM2NzAyNTNiNGQ4ZDY4YjAyNTA1NmM1NjcyMjc2NTg4MzhmZTgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJORFkwTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');
// Create the spreadsheet
let table = jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [{
data: [
['US', 'Apples', 'Yes', '2019-02-12'],
['CA;US;UK', 'Carrots', 'Yes', '2019-03-01'],
['CA;BR', 'Oranges', 'No', '2018-11-10'],
['BR', 'Coconuts', 'Yes', '2019-01-12'],
],
columns: [
{
type: 'dropdown',
title: 'Product Origin',
width: '300px',
url: 'https://jspreadsheet.com/jspreadsheet/countries',
autocomplete: true,
multiple: true
},
{ type: 'text', title: 'Description', width: '200px' },
{ type: 'dropdown', title: 'Stock', width: '100px', source: ['No','Yes'] },
{ type: 'calendar', title: 'Best before', width: '100px' },
],
meta:{
A1: { myMeta: 'this is just a test', otherMetaInformation: 'other test' },
A2: { info: 'test' }
},
}]
});
document.getElementById("btn1").onclick = () => table[0].setMeta({ C1: { id:'1', y:'2019' }, C2: { id:'2' } });
document.getElementById("btn2").onclick = () => table[0].setMeta('B2', 'myMetaData', prompt('myMetaData:'));
document.getElementById("btn3").onclick = () => table[0].resetMeta(['A1','B2','C2'])
document.getElementById("btn4").onclick = () => document.getElementById('console').value = JSON.stringify(table[0].getMeta('A1'));
document.getElementById("btn5").onclick = () => document.getElementById('console').value = JSON.stringify(table[0].getMeta());
</script>
</html>
import React, {useRef} from "react";
import {Spreadsheet, Worksheet, jspreadsheet} from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('Zjg3ZDljNzBiMWVhODgyYmJjZTExMTY3NDM4MWU1YmE3ZDIzZmVhZDEyNzAzM2FiY2UwYWZkMzg0MmYwMDQyOWJlMWM0YzI3YjQyMTk4OTUyZDgwOTU2N2VlNWM2NzAyNTNiNGQ4ZDY4YjAyNTA1NmM1NjcyMjc2NTg4MzhmZTgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJORFkwTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
const console = useRef();
// Data
const data = [
['US', 'Apples', 'Yes', '2019-02-12'],
['CA;US;UK', 'Carrots', 'Yes', '2019-03-01'],
['CA;BR', 'Oranges', 'No', '2018-11-10'],
['BR', 'Coconuts', 'Yes', '2019-01-12'],
];
// Columns
const columns = [
{
type: 'dropdown',
title: 'Product Origin',
width: '300px',
url: 'https://jspreadsheet.com/jspreadsheet/countries',
autocomplete: true,
multiple: true
},
{type: 'text', title: 'Description', width: '200px'},
{type: 'dropdown', title: 'Stock', width: '100px', source: ['No', 'Yes']},
{type: 'calendar', title: 'Best before', width: '100px'},
];
// Meta information
const meta = {
A1: {myMeta: 'this is just a test', otherMetaInformation: 'other test'},
A2: {info: 'test'}
}
let style = {width: '100%', height: '80px'}
// Render component
return (
<>
<Spreadsheet ref={spreadsheet}>
<Worksheet data={data} columns={columns} meta={meta}/>
</Spreadsheet>
<textarea ref={console} style={style}></textarea>
<input type="button" value="Set meta data for multiple cells"
onClick={() => spreadsheet.current[0].setMeta({C1: {id: '1', y: '2019'}, C2: {id: '2'}})}/>
<input type="button" value="Set meta information for B2"
onClick={() => spreadsheet.current[0].setMeta('B2', 'myMetaData', prompt('myMetaData:'))}/>
<input type="button" value="Reset meta information for A1, B2, C2"
onClick={() => spreadsheet.current[0].resetMeta(['A1', 'B2', 'C2'])}/>
<input type="button" value="Get meta information for A1"
onClick={() => console.current.value = JSON.stringify(spreadsheet.current[0].getMeta('A1'))}/>
<input type="button" value="Get all meta information"
onClick={() => console.current.value = JSON.stringify(spreadsheet.current[0].getMeta())}/>
</>
);
}
<template>
<Spreadsheet ref="spreadsheet">
<Worksheet :data="data" :columns="columns" :meta="meta" />
</Spreadsheet>
<textarea ref="log" style="width: 100%; height: 80px"></textarea>
<input type="button" value="Set meta data for multiple cells" @click="handleSetMultipleMeta" />
<input type="button" value="Set meta information for B2" @click="handleSetB2Meta" />
<input type="button" value="Reset meta information for A1, B2, C2" @click="handleResetMeta" />
<input type="button" value="Get meta information for A1" @click="handleGetA1Meta" />
<input type="button" value="Get all meta information" @click="handleGetAllMeta" />
</template>
<script>
import { Spreadsheet, Worksheet, jspreadsheet } from '@jspreadsheet/vue';
import 'jsuites/dist/jsuites.css';
import 'jspreadsheet/dist/jspreadsheet.css';
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('Zjg3ZDljNzBiMWVhODgyYmJjZTExMTY3NDM4MWU1YmE3ZDIzZmVhZDEyNzAzM2FiY2UwYWZkMzg0MmYwMDQyOWJlMWM0YzI3YjQyMTk4OTUyZDgwOTU2N2VlNWM2NzAyNTNiNGQ4ZDY4YjAyNTA1NmM1NjcyMjc2NTg4MzhmZTgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJORFkwTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');
export default {
components: {
Spreadsheet,
Worksheet,
},
data() {
// Data
const data = [
['US', 'Apples', 'Yes', '2019-02-12'],
['CA;US;UK', 'Carrots', 'Yes', '2019-03-01'],
['CA;BR', 'Oranges', 'No', '2018-11-10'],
['BR', 'Coconuts', 'Yes', '2019-01-12'],
];
// Columns
const columns = [
{
type: 'dropdown',
title: 'Product Origin',
width: '300px',
url: 'https://jspreadsheet.com/jspreadsheet/countries',
autocomplete: true,
multiple: true,
},
{ type: 'text', title: 'Description', width: '200px' },
{
type: 'dropdown',
title: 'Stock',
width: '100px',
source: ['No', 'Yes'],
},
{ type: 'calendar', title: 'Best before', width: '100px' },
];
// Meta information
const meta = {
A1: { myMeta: 'this is just a test', otherMetaInformation: 'other test' },
A2: { info: 'test' },
};
return {
data,
columns,
meta,
};
},
methods: {
// Extracted functions
handleSetMultipleMeta() {
this.$refs.spreadsheet.current[0].setMeta({
C1: { id: '1', y: '2019' },
C2: { id: '2' },
});
},
handleSetB2Meta() {
this.$refs.spreadsheet.current[0].setMeta(
'B2',
'myMetaData',
prompt('myMetaData:')
);
},
handleResetMeta() {
this.$refs.spreadsheet.current[0].resetMeta(['A1', 'B2', 'C2']);
},
handleGetA1Meta() {
this.$refs.log.value = JSON.stringify(
this.$refs.spreadsheet.current[0].getMeta('A1')
);
},
handleGetAllMeta() {
this.$refs.log.value = JSON.stringify(
this.$refs.spreadsheet.current[0].getMeta()
);
},
},
};
</script>
// @ts-nocheck
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
import jspreadsheet from 'jspreadsheet';
import 'jsuites/dist/jsuites.css';
import 'jspreadsheet/dist/jspreadsheet.css';
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('Zjg3ZDljNzBiMWVhODgyYmJjZTExMTY3NDM4MWU1YmE3ZDIzZmVhZDEyNzAzM2FiY2UwYWZkMzg0MmYwMDQyOWJlMWM0YzI3YjQyMTk4OTUyZDgwOTU2N2VlNWM2NzAyNTNiNGQ4ZDY4YjAyNTA1NmM1NjcyMjc2NTg4MzhmZTgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJORFkwTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');
// Create component
@Component({
standalone: true,
selector: 'app-root',
template: `
<div #spreadsheet></div>
<textarea #log style='width:100%;height:80px;'></textarea>
<button type="button" (click)="handleSetMultipleMeta()">Set meta data for multiple cells</button>
<button type="button" (click)="handleSetB2Meta()">Set meta information for B2</button>
<button type="button" (click)="handleResetMeta()">Reset meta information for A1, B2, C2</button>
<button type="button" (click)="handleGetA1Meta()">Get meta information for A1</button>
<button type="button" (click)="handleGetAllMeta()">Get all meta information</button>
`,
})
export class AppComponent implements AfterViewInit {
@ViewChild('spreadsheet') spreadsheet: ElementRef;
@ViewChild('log') log: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Extracted functions
handleSetMultipleMeta() {
this.worksheets[0].setMeta({ C1: { id: '1', y: '2019' }, C2: { id: '2' } });
}
handleSetB2Meta() {
let metadata = prompt('myMetaData:');
this.worksheets[0].setMeta('B2', 'myMetaData', metadata || '');
}
handleResetMeta() {
this.worksheets[0].resetMeta(['A1', 'B2', 'C2']);
}
handleGetA1Meta() {
this.log.nativeElement.value = JSON.stringify(
this.worksheets[0].getMeta('A1')
);
}
handleGetAllMeta() {
this.log.nativeElement.value = JSON.stringify(this.worksheets[0].getMeta());
}
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
worksheets: [
{
data: [
['US', 'Apples', 'Yes', '2019-02-12'],
['CA;US;UK', 'Carrots', 'Yes', '2019-03-01'],
['CA;BR', 'Oranges', 'No', '2018-11-10'],
['BR', 'Coconuts', 'Yes', '2019-01-12'],
],
columns: [
{
type: 'dropdown',
title: 'Product Origin',
width: 300,
url: 'https://jspreadsheet.com/jspreadsheet/countries',
autocomplete: true,
multiple: true,
},
{ type: 'text', title: 'Description', width: 200 },
{
type: 'dropdown',
title: 'Stock',
width: 100,
source: ['No', 'Yes'],
},
{ type: 'calendar', title: 'Best before', width: 100 },
],
meta: {
A1: {
myMeta: 'this is just a test',
otherMetaInformation: 'other test',
},
A2: { info: 'test' },
},
},
],
});
}
}