Button

The Button CellType represents a button cell. A button cell can be useful if you want to use Spread to add even more input on your page without having to add external controls.

Description
app.vue
index.html
data.js
Copy to CodeMine

To create a button cell, follow this example:

var b1 = new GC.Spread.Sheets.CellTypes.Button();
sheet.setCellType(3, 2, b1, GC.Spread.Sheets.SheetArea.viewport);

You can customize your Button using the many provided APIs. If you want to control the button's position in the cell, use the following methods.

  • marginTop: Gets or sets the button's top margin in pixels relative to the cell.
  • marginRight: Gets or sets the button's right margin in pixels relative to the cell.
  • marginBottom: Gets or sets the button's bottom margin in pixels relative to the cell.
  • marginLeft: Gets or sets the button's left margin in pixels relative to the cell.
    b1.marginLeft(15);
    b1.marginTop(7);
    b1.marginRight(15);
    b1.marginBottom(7);

You can use the text method to get and set the button's content. Use the buttonBackColor method to get and set the button's background color. For example:

    b1.text('Margin');
    b1.buttonBackColor('red');
To create a button cell, follow this example: You can customize your Button using the many provided APIs. If you want to control the button's position in the cell, use the following methods. marginTop: Gets or sets the button's top margin in pixels relative to the cell. marginRight: Gets or sets the button's right margin in pixels relative to the cell. marginBottom: Gets or sets the button's bottom margin in pixels relative to the cell. marginLeft: Gets or sets the button's left margin in pixels relative to the cell. You can use the text method to get and set the button's content. Use the buttonBackColor method to get and set the button's background color. For example:
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> <gc-worksheet></gc-worksheet> </gc-spread-sheets> <div class="options-container"> <label>Select the button cell in Spread and edit its options with these text boxes.</label> <div class="option-row"> <label for="txtButtonCellMarginLeft">margin-left:</label> <input id="txtButtonCellMarginLeft" type="text" v-model="marginLeft" /> </div> <div class="option-row"> <label for="txtButtonCellMarginTop">margin-top:</label> <input id="txtButtonCellMarginTop" type="text" v-model="marginTop" /> </div> <div class="option-row"> <label for="txtButtonCellMarginRight">margin-right:</label> <input id="txtButtonCellMarginRight" type="text" v-model="marginRight" /> </div> <div class="option-row"> <label for="txtButtonCellMarginBottom">margin-bottom:</label> <input id="txtButtonCellMarginBottom" type="text" v-model="marginBottom" /> </div> <div class="option-row"> <label for="txtButtonCellText">text:</label> <input id="txtButtonCellText" type="text" v-model="text" /> </div> <div class="option-row"> <label for="txtButtonCellBackColor">backColor:</label> <input id="txtButtonCellBackColor" type="text" v-model="buttonBackColor" /> </div> <div class="option-row"> <input type="button" id="setProperty" value="Update Properties" :disabled="disabled" @click="updateProperty($event, true)" /> </div> </div> </div> </template> <script setup> import '@mescius/spread-sheets-vue' import { ref, computed } from 'vue'; import GC from '@mescius/spread-sheets'; import { getData } from "./data.js"; const spreadNS = GC.Spread.Sheets; const marginLeft = ref(0); const marginRight = ref(0); const marginTop = ref(0); const marginBottom = ref(0); const text = ref(''); const buttonBackColor = ref(''); const disabled = ref(false); let sheet = null; const initSpread = (spread) => { sheet = spread.getSheet(0); sheet.suspendPaint(); sheet.setColumnWidth(2, 120); sheet.setColumnWidth(1, 120); sheet.setRowHeight(1, 50); const b0 = new spreadNS.CellTypes.Button(); b0.text("Margin"); b0.marginLeft(15); b0.marginTop(7); b0.marginRight(15); b0.marginBottom(7); sheet.setCellType(1, 2, b0, spreadNS.SheetArea.viewport); sheet.setValue(1, 1, "ButtonCellType"); sheet.resumePaint(); sheet.bind(spreadNS.Events.SelectionChanged, () => { updateProperty(null, false); }); }; const updateProperty = (e, isSet) => { if (sheet) { const sels = sheet.getSelections(); if (sels && sels.length > 0) { const sel = getActualRange(sels[0], sheet.getRowCount(), sheet.getColumnCount()); const buttonCellType = sheet.getCellType(sel.row, sel.col); if (!(buttonCellType instanceof spreadNS.CellTypes.Button)) { disabled.value = true; return; } if (!isSet) { disabled.value = false; marginLeft.value = buttonCellType.marginLeft(); marginRight.value = buttonCellType.marginRight(); marginTop.value = buttonCellType.marginTop(); marginBottom.value = buttonCellType.marginBottom(); text.value = buttonCellType.text(); buttonBackColor.value = buttonCellType.buttonBackColor(); } else { buttonCellType.marginLeft(parseInt(marginLeft.value)); buttonCellType.marginTop(parseInt(marginTop.value)); buttonCellType.marginRight(parseInt(marginRight.value)); buttonCellType.marginBottom(parseInt(marginBottom.value)); buttonCellType.text(text.value); buttonCellType.buttonBackColor(buttonBackColor.value); } } sheet.repaint(); } }; const getActualRange = (range, maxRowCount, maxColCount) => { const row = range.row < 0 ? 0 : range.row; const col = range.col < 0 ? 0 : range.col; const rowCount = range.rowCount < 0 ? maxRowCount : range.rowCount; const colCount = range.colCount < 0 ? maxColCount : range.colCount; return new spreadNS.Range(row, col, rowCount, colCount); }; </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; overflow: auto; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; } .sample-options { z-index: 1000; } .option { padding-bottom: 6px; } .checkbox { padding-right: 12px; display: inline-block; } label { display: inline-block; min-width: 100px; } input, select { width: 100%; padding: 4px 0; margin-top: 4px; box-sizing: border-box; } input[type=checkbox] { width: auto; padding: 0; } 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>
export function getData() { return [ { name: "Stoves S0", line: "Washers", color: "Green", discontinued: true, rating: "Average" }, { name: "Computers C1", line: "Washers", color: "Green", discontinued: true, rating: "Average" }, { name: "Washers W3", line: "Washers", color: "Green", discontinued: true, rating: "Average" } ] }
(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);