Events

SpreadJS provides a variety of events to allow customizing spreadsheet behavior or implementing spreadsheet UI interactions.

Description
app.vue
index.html
Copy to CodeMine

You can bind Workbook and Worksheet events using bind and unbind or unbindAll to unbind all the events. For example:

    var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
    var sheet = spread.getSheet(0);
    var activeSheetChanged = GC.Spread.Sheets.Events.ActiveSheetChanged;
    spread.bind(activeSheetChanged, function(e,args) { // spread event
       //do some thing...
    });
    var selectionChanged = GC.Spread.Sheets.Events.SelectionChanged
    sheet.bind(selectionChanged, function(e,args) { // sheet event
       //do some thing...
    });

You can suspend Spread or a Sheet events using suspendEvent. Suspended events can be resumed using resumeEvent. This improved performance during long updates to Workbook content. For example:

    var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
    spread.suspendEvent();
    //do some operation...
    spread.resumeEvent();
You can bind Workbook and Worksheet events using bind and unbind or unbindAll to unbind all the events. For example: You can suspend Spread or a Sheet events using suspendEvent. Suspended events can be resumed using resumeEvent. This improved performance during long updates to Workbook content. For example:
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> <gc-worksheet></gc-worksheet> <gc-worksheet></gc-worksheet> <gc-worksheet></gc-worksheet> </gc-spread-sheets> <div class="options-container"> <div class="option-row"> <label>Click the sheet tab to change the active sheet. Click the cell or select range to edit.</label> </div> <div class="option-row"> <textarea id="showSpreadEvents" cols="40" rows="8" style="width: 90%" :value="eventLog"></textarea> </div> </div> </div> </template> <script setup> import GC from "@mescius/spread-sheets"; import { ref } from "vue"; import "@mescius/spread-sheets-vue"; let spread = null; const eventLog = ref(''); const initSpread = (s) => { spread = s; spread.suspendPaint(); let spreadNS = GC.Spread.Sheets; spread.bind(spreadNS.Events.ActiveSheetChanged, function (e, args) { eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.ActiveSheetChanged + ' event called' + '\n' + 'oldSheetName: ' + args.oldSheet.name() + '\n' + 'newSheetName: ' + args.newSheet.name(); }); spread.bind(spreadNS.Events.CellClick, function (e, args) { let sheetArea = args.sheetArea === 0 ? 'sheetCorner' : args.sheetArea === 1 ? 'columnHeader' : args.sheetArea === 2 ? 'rowHeader' : 'viewPort'; eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.CellClick + ' event called' + '\n' + 'sheetArea: ' + sheetArea + '\n' + 'row: ' + args.row + '\n' + 'col: ' + args.col; }); spread.bind(spreadNS.Events.SelectionChanging, function (e, args) { let selection = args.newSelections.pop(); let sheetArea = args.sheetArea === 0 ? 'sheetCorner' : args.sheetArea === 1 ? 'columnHeader' : args.sheetArea === 2 ? 'rowHeader' : 'viewPort'; eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.SelectionChanging + ' event called' + '\n' + 'sheetArea: ' + sheetArea + '\n' + 'row: ' + selection.row + '\n' + 'column: ' + selection.col + '\n' + 'rowCount: ' + selection.rowCount + '\n' + 'colCount: ' + selection.colCount; }); spread.bind(spreadNS.Events.SelectionChanged, function (e, args) { let selection = args.newSelections.pop(); if (selection.rowCount > 1 && selection.colCount > 1) { let sheetArea = args.sheetArea === 0 ? 'sheetCorner' : args.sheetArea === 1 ? 'columnHeader' : args.sheetArea === 2 ? 'rowHeader' : 'viewPort'; eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.SelectionChanged + ' event called' + '\n' + 'sheetArea: ' + sheetArea + '\n' + 'row: ' + selection.row + '\n' + 'column: ' + selection.col + '\n' + 'rowCount: ' + selection.rowCount + '\n' + 'colCount: ' + selection.colCount; } }); spread.bind(spreadNS.Events.EditStarting, function (e, args) { eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.EditStarting + ' event called' + '\n' + 'row: ' + args.row + '\n' + 'column: ' + args.col; }); spread.bind(spreadNS.Events.EditEnded, function (e, args) { eventLog.value = 'SpreadEvent: ' + GC.Spread.Sheets.Events.EditEnded + ' event called' + '\n' + 'row: ' + args.row + '\n' + 'column: ' + args.col + '\n' + 'text: ' + args.editingText; }); spread.resumePaint(); } </script> <style scoped> #app { height: 100%; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); 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; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; } input[type=button] { margin-top: 6px; display: block; } 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);