Split Resizing

SpreadJS supports split resizing rows and columns. Split-resizing can be activated by holding the Ctrl-key while resizing a column.

Description
app.vue
index.html
Copy to CodeMine

Introduction

Split resizing allows the user to change the width of two adjacent columns or rows as a splitter between the two. For example, resizing column A would also resize column B but keep the other columns the same size, preventing important data from being moved out of the visible area when resizing other rows/columns.

This feature is useful when creating precise report layouts and need to make small adjustments without impacting the overall layout. You can set the ResizeMode to split to enable this feature for both rows and columns.

    /** enum ResizeMode {
     *   // Specifies the normal resize behavior.
     *   // @type {number}
     *   normal = 0,
     *
     *   // Specifies the split resize behavior.
     *   // @type {number}
     *   split = 1,
     * }
     */

    // e.g.:
    var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
    spread.options.columnResizeMode = GC.Spread.Sheets.ResizeMode.split;
    spread.options.rowResizeMode = GC.Spread.Sheets.ResizeMode.split;
Introduction Split resizing allows the user to change the width of two adjacent columns or rows as a splitter between the two. For example, resizing column A would also resize column B but keep the other columns the same size, preventing important data from being moved out of the visible area when resizing other rows/columns. This feature is useful when creating precise report layouts and need to make small adjustments without impacting the overall layout. You can set the ResizeMode to split to enable this feature for both rows and columns.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> <gc-worksheet> </gc-worksheet> </gc-spread-sheets> <div class="options-container"> <div class="option-row"> <p>Change the Resize Mode to Split to enable this feature. </p> <p>For example, set Column Resize Mode to split. Now change the width of column A. Column B will automatically resize while the remaining columns will stay the same size.</p> <label for="columnResizeMode">Column Resize Mode</label> <select id="columnResizeMode" @change="changeColumnResizeMode"> <option value="0">normal</option> <option value="1">split</option> </select> </div> <div class="option-row"> <label for="rowResizeMode">Row Resize Mode</label> <select id="rowResizeMode" @change="changeRowResizeMode"> <option value="0">normal</option> <option value="1">split</option> </select> </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 initSpread = (s) => spread = s; const changeRowResizeMode = (e) => { const selectElement = e.target; spread.options.rowResizeMode = parseInt(selectElement.options[selectElement.selectedIndex].value, 10); } const changeColumnResizeMode = (e) => { const selectElement = e.target; spread.options.columnResizeMode = parseInt(selectElement.options[selectElement.selectedIndex].value, 10); } </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 { margin-bottom: 6px; } input { padding: 4px 6px; } input[type=number] { width: 40px; } hr { border-color: #fff; opacity: .2; margin-top: 20px; } 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);