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.jsx
app-func.jsx
app-class.jsx
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.
import * as React from 'react'; import * as ReactDOM from 'react-dom'; import './styles.css'; import { AppFunc } from './app-func'; // import { App } from './app-class'; // 1. Functional Component sample ReactDOM.render(<AppFunc />, document.getElementById('app')); // 2. Class Component sample // ReactDOM.render(<App />, document.getElementById('app'));
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; let spread = null; export function AppFunc() { const [text, setText] = React.useState(""); const initSpread = (currSpread) => { spread = currSpread; var spreadNS = GC.Spread.Sheets; var sheet = spread.getSheet(0); sheet.suspendPaint(); var customFloatingObject = new spreadNS.FloatingObjects.FloatingObject("f1", 10, 10, 60, 64); customFloatingObject.startRow(1); customFloatingObject.startColumn(1); customFloatingObject.endColumn(3); customFloatingObject.endRow(4); var 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(); sheet.bind(spreadNS.Events.FloatingObjectSelectionChanged, function (e, args) { var text = floatingObjectEvent.value; if (text !== "") { text += '\n'; } setText(text + "\n" + "Event:FloatingObjectSelectionChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + "\n"); }); sheet.bind(spreadNS.Events.FloatingObjectChanged, function (e, args) { var text = floatingObjectEvent.value; if (text !== "") { text += '\n'; } setText(text + "Event:FloatingObjectChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + " " + args.propertyName + "\n"); }); } return <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => initSpread(spread)}> <Worksheet></Worksheet> </SpreadSheets> </div> <div className="options-container"> <textarea id="floatingObjectEvent" style={{ width: '95%', height: '90px' }} value={text} /> </div> </div>; }
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; const Component = React.Component; export class App extends Component { constructor(props) { super(props); this.spread = null; this.state = { text: "", } } render() { return <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => this.initSpread(spread)}> <Worksheet></Worksheet> </SpreadSheets> </div> <div className="options-container"> <textarea id="floatingObjectEvent" style={{ width: '95%', height: '90px' }} value={this.state.text} /> </div> </div>; } initSpread(spread) { this.spread = spread; var spreadNS = GC.Spread.Sheets; var sheet = spread.getSheet(0); sheet.suspendPaint(); var customFloatingObject = new spreadNS.FloatingObjects.FloatingObject("f1", 10, 10, 60, 64); customFloatingObject.startRow(1); customFloatingObject.startColumn(1); customFloatingObject.endColumn(3); customFloatingObject.endRow(4); var 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(); var self = this; sheet.bind(spreadNS.Events.FloatingObjectSelectionChanged, function (e, args) { var text = floatingObjectEvent.value; if (text !== "") { text += '\n'; } self.setState({ text: text + "\n" + "Event:FloatingObjectSelectionChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + "\n" }); }); sheet.bind(spreadNS.Events.FloatingObjectChanged, function (e, args) { var text = floatingObjectEvent.value; if (text !== "") { text += '\n'; } self.setState({ text: text + "Event:FloatingObjectChanged" + "\n" + "FloatingObject " + args.floatingObject.name() + " " + args.propertyName + "\n" }); }); } }
<!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/react/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/en/react/node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('$DEMOROOT$/en/lib/react/license.js').then(function () { System.import('./src/app'); }); </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; } #app { height: 100%; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, react: true }, meta: { '*.css': { loader: 'css' } }, 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-react': 'npm:@mescius/spread-sheets-react/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'react': 'npm:react/umd/react.production.min.js', 'react-dom': 'npm:react-dom/umd/react-dom.production.min.js', 'css': 'npm:systemjs-plugin-css/css.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: 'jsx' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);