Auto Expand

SpreadJS allows the users to auto expand the table range using the UI operations. For example, click in cell E5 (‘Sales Manager’) then press the TAB key. A new row will automatically be added. Refer to the description below for further options.

Description
app.vue
index.html
Copy to CodeMine

Users can automatically expand the table range by adding data or using copy-paste, drag-fill, and drag-drop actions. Depending on the action, a new table column will be inserted to the right of the table or a new table row will be added below the last row.

  1. Add data immediately to the right of a table column or after the last table row.

  2. Paste data that exceeds the current table range.

  3. Drag fill from a table range.

  4. Drag drop a range to table range.

You can disable/enable the auto expand function by using allowAutoExpand. You can also get the toggle state of auto expand by this API.

    table.allowAutoExpand(true); // Allow the table auto expand.
    table.allowAutoExpand(false); // Don't allow the table auto expand.
    table.allowAutoExpand(); // Get the toogle state of auto expand.
Users can automatically expand the table range by adding data or using copy-paste, drag-fill, and drag-drop actions. Depending on the action, a new table column will be inserted to the right of the table or a new table row will be added below the last row.   1. Add data immediately to the right of a table column or after the last table row.   2. Paste data that exceeds the current table range.   3. Drag fill from a table range.   4. Drag drop a range to table range. You can disable/enable the auto expand function by using allowAutoExpand. You can also get the toggle state of auto expand by this API.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> </gc-spread-sheets> <div class="options-container"> <p>Select the table in the Spread instance and change the state of allow table auto expand.</p> <div class="option-group"> <input type="checkbox" id="allowAutoExpand" v-bind:checked="isAllowAutoExpand" v-on:change="onAllowAutoExpand" /> <label for="allowAutoExpand">Allow Table Auto Expand</label> </div> </div> </div> </template> <script setup> import '@mescius/spread-sheets-vue'; import { ref } from "vue"; import GC from "@mescius/spread-sheets"; const GCsheets = GC.Spread.Sheets; const spreadRef = ref(null); const tableRef = ref(null); const isAllowAutoExpand = ref(true); const initSpread = (spread) => { spreadRef.value = spread; spread.suspendPaint(); let sheet = spread.getActiveSheet(); tableRef.value = sheet.tables.add("table1", 1, 1, 4, 4, GCsheets.Tables.TableThemes.light1); sheet.setColumnWidth(1, 120); sheet.setColumnWidth(2, 120); sheet.setColumnWidth(3, 120); sheet.setColumnWidth(4, 120); sheet.getCell(1, 1).text("First Name"); sheet.getCell(1, 2).text("Last Name"); sheet.getCell(1, 3).text("Score"); sheet.getCell(1, 4).text("Position"); sheet.getCell(2, 1).text("Alexa"); sheet.getCell(2, 2).text("Wilder"); sheet.getCell(2, 3).text("90"); sheet.getCell(2, 4).text("Web Developer"); sheet.getCell(3, 1).text("Victor"); sheet.getCell(3, 2).text("Wooten"); sheet.getCell(3, 3).text("70"); sheet.getCell(3, 4).text(".NET Developer"); sheet.getCell(4, 1).text("Ifeoma"); sheet.getCell(4, 2).text("Mays"); sheet.getCell(4, 3).text("85"); sheet.getCell(4, 4).text("Sales Manager"); spread.resumePaint(); } const onAllowAutoExpand = (e) => { let table = tableRef.value; if (table) { try { const checked = !isAllowAutoExpand.value; isAllowAutoExpand.value = checked; table.allowAutoExpand(checked); } catch (ex) { alert(!!ex.message ? ex.message : ex); } } } </script> <style scoped> #app { height: 100%; } .sample { position: relative; height: 100%; overflow: auto; } .sample::after { display: block; content: ""; clear: both; } .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; } .option-group { margin-bottom: 6px; } label { display: inline-block; min-width: 90px; margin-bottom: 6px; } select { padding: 4px 6px; } p { padding: 0 0 12px; margin: 0; } .options-toggle { display: none; } 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-vue': 'npm:@mescius/spread-sheets-vue/index.js' }, meta: { '*.css': { loader: 'systemjs-plugin-css' }, '*.vue': { loader: "../plugin-vue/index.js" } } }); })(this);