Events

SpreadJS provides events for floating objects on the worksheet. Try interacting with floating objects in the spreadsheet below and see the JavaScript events appearing in the right panel.

Description
app.vue
index.html
styles.css
Copy to CodeMine

SpreadJS holds two kinds of events for FloatingObject property:

    sheet.bind(GC.Spread.Sheets.Events.FloatingObjectSelectionChanged, function(e, args) {
       // do something
    });
    sheet.bind(GC.Spread.Sheets.Events.FloatingObjectChanged, function(e, args) {
       // do something
    });
SpreadJS holds two kinds of events for FloatingObject property:FloatingObjectSelectionChanged when the selection of the floating object has changed.FloatingObjectChanged when any floating object has changed.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> <gc-worksheet> </gc-worksheet> </gc-spread-sheets> <div class="options-container"> <textarea id="floatingObjectEvent" style="width: 95%; height: 90px" :value="text"></textarea> </div> </div> </template> <script> import Vue from 'vue'; import '@mescius/spread-sheets-vue' import GC from '@mescius/spread-sheets'; import './styles.css'; const spreadNS = GC.Spread.Sheets; let App = Vue.extend({ name: "app", data: function () { return { text: "" }; }, methods: { initSpread: function (spread) { this.spread = spread; let spreadNS = GC.Spread.Sheets; let sheet = spread.getSheet(0); sheet.suspendPaint(); let customFloatingObject = new spreadNS.FloatingObjects.FloatingObject("f1", 10, 10, 60, 64); customFloatingObject.startRow(1); customFloatingObject.startColumn(1); customFloatingObject.endColumn(3); customFloatingObject.endRow(4); let btn = document.createElement('button'); btn.style.width = "125px"; btn.style.height = "60px"; btn.style.background = "#82bc00"; btn.style.color = "white"; btn.style.textAlign = "center"; btn.style.border = "none"; btn.innerText = "Button"; customFloatingObject.content(btn); sheet.floatingObjects.add(customFloatingObject); sheet.resumePaint(); let self = this; sheet.bind(spreadNS.Events.FloatingObjectSelectionChanged, function (e, args) { let text = self.text; if (text !== "") { text += '\n'; } self.text = text + "\n" + "Event:FloatingObjectSelectionChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + "\n"; }); sheet.bind(spreadNS.Events.FloatingObjectChanged, function (e, args) { let text = self.text; if (text !== "") { text += '\n'; } self.text = text + "Event:FloatingObjectChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + " " + args.propertyName + "\n"; }); } } }); new Vue({ render: h => h(App) }).$mount('#app'); </script>
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/vue/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/en/vue/node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('./src/app.vue'); System.import('$DEMOROOT$/en/lib/vue/license.js'); </script> </head> <body> <div id="app"></div> </body> </html>
.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; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, meta: { '*.css': { loader: 'css' }, '*.vue': { loader: 'vue-loader' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-vue': 'npm:@mescius/spread-sheets-vue/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'jszip': 'npm:jszip/dist/jszip.js', 'css': 'npm:systemjs-plugin-css/css.js', 'vue': 'npm:vue/dist/vue.min.js', 'vue-loader': 'npm:systemjs-vue-browser/index.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' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'js' }, rxjs: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' } } }); })(this);