Row States and Column States

The row state and column state are extended versions of the cell state, giving states to entire rows and columns.

We support 7 kinds of states in the row or column direction, and you can try them in different sheets in this demo. States Hover state Hover row: hovering over a row Hover column: hovering of a column Invalid state Invalid row: if one cell is invalid, then its row is invalid state Invalid column: if one cell is invalid, then its column is invalid state Edit state Edit row: when editing a cell, then its row is edit state Edit column: when editing a cell, then its column is edit state Active state Active row: the active row Active column: the active column Selected state Selected row: when one cell is selected, then its row is selected state Selected column: when one cell is selected, then its column is selected state Dirty state Dirty row: if one cell is dirty, then its row is dirty state Dirty column: if one cell is dirty, then its column is dirty state Inserted state Inserted row: the inserted row Invalid Formula Invalid Formula row: if one cell is invalid formula, then its row is invalid formula state Invalid Formula column: if one cell is invalid formula, then its column is invalid formula state You could find them in GC.Spread.Sheets.RowColumnStates. Add State Rule The row state and column state is based on conditional formatting, so you could use addRowStateRule or addColumnStateRule: Or you can also create a new StateRule, then use addRule. Here is same sample code: Multiple Styles for Multiple Ranges You could set multiple styles for multiple ranges.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbook-initialized="initSpread"> <gc-worksheet></gc-worksheet> </gc-spread-sheets> </div> </template> <script setup> import { ref } from 'vue'; import '@mescius/spread-sheets-vue'; import GC from '@mescius/spread-sheets'; const suppliersData = [ ["Id", "ContactName", "CompanyName", "Country", "phone"], [4, "Yoshi Nagase", "Tokyo Traders", "Japan", "(03) 3555-5011"], [5, "Antonio del Valle Saavedra", "Cooperativa de Quesos 'Las Cabras'", "Spain", "(98) 598 76 54"], [6, "Mayumi Ohno", "Mayumi's", "Japan", "(06) 431-7877"], [7, "Ian Devling", "Pavlova Ltd.", "Australia", "(03) 444-2343"], [8, "Peter Wilson", "Specialty Biscuits Ltd.", "UK", "(161) 555-4448"], [9, "Lars Peterson", "PB Knäckebröd AB", "Sweden", "031-987 65 43"], [10, "Carlos Diaz", "Refrescos Americanas LTDA", "Brazil", "(11) 555 4640"], [11, "Petra Winkler", "Heli Süßwaren GmbH & Co. KG", "Germany", "(010) 9984510"], [2, "Shelley Burke", "New Orleans Cajun Delights", "USA", "(100) 555-4822"] ]; const ordersData = [ ["Id", "CustomerId", "ShipVia", "shipName", "Freight"], [10271, "SPLIR", 2, "Split Rail Beer & Ale", 4.54], [10266, "WARTH", 3, "Wartian Herkku", 25.73], [10279, "LEHMS", 2, "Lehmanns Marktstand", 25.83], [10292, "TRADH", 2, "Tradiçao Hipermercados", 1.35], [10295, "VINET", 2, "Vins et alcools Chevalier", 1.15], [10313, "QUICK", 2, "QUICK-Stop", 1.96], [10317, "LONEP", 1, "Lonesome Pine Restaurant", 12.69], [10322, "PERIC", 3, "Pericles Comidas clásicas", 0.4], [10320, "WARTH", 3, "Wartian Herkku", 34.57] ]; const productsData = [ ["Id", "UnitPrice", "ProductName", "UnitsInStock", "QuantityPerUnit", "Discontinued"], [4, 22, "Chef Anton's Cajun Seasoning", 53, "48 - 6 oz jars", true], [5, 21.35, "Chef Anton's Gumbo Mix", 0, "36 boxes", true], [6, 25, "Grandma's Boysenberry Spread", 120, "12 - 8 oz jars", false], [7, 30, "Uncle Bob's Organic Dried Pears", 15, "12 - 1 lb pkgs.", false], [8, 40, "Northwoods Cranberry Sauce", 6, "12 - 12 oz jars", false], [9, 97, "Mishi Kobe Niku", 29, "18 - 500 g pkgs.", true], [10, 31, "Ikura", 31, "12 - 200 ml jars", false], [2, 19, "Chang", 17, "24 - 12 oz bottles", false], [3, 10, "Aniseed Syrup", 13, "12 - 550 ml bottles", false], [11, 21, "Queso Cabrales 2", 22, "1 kg pkg.", false], [12, 38, "Queso Manchego La Pastora", 86, "10 - 500 g pkgs.", false], [13, 6, "Konbu", 24, "2 kg box", false], [14, 23.25, "Tofu", 35, "40 - 100 g pkgs.", false], [15, 15.5, "Genen Shouyu", 39, "24 - 250 ml bottles", false], [1, 18, "Chai", 39, "10 boxes x 20 bags", false], [16, 17.45, "Pavlova", 29, "32 - 500 g boxes", false], [17, 39, "Alice Mutton", 0, "20 - 1 kg tins", true], [18, 62.5, "Carnarvon Tigers", 42, "16 kg pkg.", false], [19, 9.2, "Teatime Chocolate Biscuits", 25, "10 boxes x 12 pieces", false], [20, 81, "Sir Rodney's Marmalade", 40, "30 gift boxes", false], [24, 4.5, "Guaraná Fantástica", 20, "12 - 355 ml cans", true] ]; const spread = ref(null); const initSpread = (spreadInstance) => { spread.value = spreadInstance; spreadInstance.setSheetCount(8); initHoverStateSheet(spreadInstance); initEditStateSheet(spreadInstance); initActiveStateSheet(spreadInstance); initSelectedStateSheet(spreadInstance); initDirtyStateSheet(spreadInstance); initInsertedStateSheet(spreadInstance); initInvalidStateSheet(spreadInstance); initInvalidFormulaStateSheet(spreadInstance); }; const initHoverStateSheet = (spread) => { const sheet = spread.getSheet(0); sheet.name("hover"); const description = "Use you mouse to hover the table cells."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const style1 = new GC.Spread.Sheets.Style("rgb(240, 67, 54)", "rgb(255, 255, 255)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri"); sheet.tables.add("rowTable0", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.hover, [style, style1, style], [new GC.Spread.Sheets.Range(4, 1, 9, 2), new GC.Spread.Sheets.Range(4, 3, 9, 1), new GC.Spread.Sheets.Range(4, 4, 9, 2)]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri"); sheet.tables.add("columnTable1", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.hover, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri"); sheet.tables.add("bothTable2", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.hover, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.hover, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; const initEditStateSheet = (spread) => { const sheet = spread.getSheet(1); sheet.name("edit"); const description = "Double click the table cells or input something directly to edit it."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri"); sheet.tables.add("rowTable3", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.edit, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri"); sheet.tables.add("columnTable4", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.edit, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri"); sheet.tables.add("bothTable5", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.edit, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.edit, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; const initActiveStateSheet = (spread) => { const sheet = spread.getSheet(2); sheet.name("active"); const description = "Focus table cells to active it."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri"); sheet.tables.add("rowTable6", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.active, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri"); sheet.tables.add("columnTable7", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.active, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri"); sheet.tables.add("bothTable8", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.active, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.active, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; const initSelectedStateSheet = (spread) => { const sheet = spread.getSheet(3); sheet.name("selected"); const description = "Select table cells, you could also use ctrl to multiple select or deselect."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri"); sheet.tables.add("rowTable9", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.selected, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri"); sheet.tables.add("columnTable10", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.selected, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri"); sheet.tables.add("bothTable11", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.selected, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.selected, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; const initDirtyStateSheet = (spread) => { const sheet = spread.getSheet(4); sheet.name("dirty"); const description = "Edit table cells value or insert rows to make them dirty."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri") sheet.tables.add("rowTable12", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.dirty, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri") sheet.tables.add("columnTable13", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.dirty, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri") sheet.tables.add("bothTable14", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.dirty, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.dirty, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.clearPendingChanges(); sheet.resumePaint(); }; const initInsertedStateSheet = (spread) => { const sheet = spread.getSheet(5); sheet.name("inserted"); const description = "Insert rows, not support the inserted column."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri") sheet.tables.add("rowTable15", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.inserted, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri") sheet.tables.add("columnTable16", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.inserted, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri") sheet.tables.add("bothTable17", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.inserted, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.inserted, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.clearPendingChanges(); sheet.resumePaint(); }; const initInvalidStateSheet = (spread) => { spread.options.highlightInvalidData = true; const sheet = spread.getSheet(6); sheet.name("invalid"); const description = "Edit table cells value to make them invalid."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); const dv1 = new GC.Spread.Sheets.DataValidation.createListValidator('Japan, Spain, Australia, UK, Sweden, Brazil, Germany, USA'); dv1.inputTitle('Please choose a country:'); sheet.setDataValidator(rowRange.row, 4, rowRange.rowCount, 1, dv1); const dv2 = new GC.Spread.Sheets.DataValidation.createNumberValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between, 1, 3); sheet.setDataValidator(columnRange.row, 3, columnRange.rowCount, 1, dv2); const dv3 = new GC.Spread.Sheets.DataValidation.createNumberValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between, 0, 120); sheet.setDataValidator(bothRange.row, 10, bothRange.rowCount, 1, dv3); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction(The validator is at the 'Country' column.)").font("bold 14.6667px Calibri") sheet.tables.add("rowTable18", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.invalid, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction(The validator is at the 'ShipVia' column. The valid number is between 1 ~ 3)").font("bold 14.6667px Calibri") sheet.tables.add("columnTable19", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.invalid, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction(The validator is at the 'UnitsInStock' column. The valid number is between 0 ~ 120)").font("bold 14.6667px Calibri") sheet.tables.add("bothTable20", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.invalid, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.invalid, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; const initInvalidFormulaStateSheet = (spread) => { spread.options.allowInvalidFormula = true; const sheet = spread.getSheet(7); sheet.name("invalid formula"); const description = "Edit table cells value to invalid formula, such as '=SUM()'."; const cfs = sheet.conditionalFormats; const style = new GC.Spread.Sheets.Style("rgb(205, 228, 153)"); const rowRange = new GC.Spread.Sheets.Range(4, 1, 9, 5); const columnRange = new GC.Spread.Sheets.Range(16, 1, 9, 5); const bothRange = new GC.Spread.Sheets.Range(4, 7, 21, 6); sheet.suspendPaint(); sheet.getCell(1, 1).value(description).foreColor("red"); sheet.getCell(rowRange.row - 2, rowRange.col).value("Row Direction").font("bold 14.6667px Calibri") sheet.tables.add("rowTable21", rowRange.row - 1, rowRange.col, rowRange.rowCount + 1, rowRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(rowRange.row - 1, rowRange.col, suppliersData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.invalidFormula, style, [rowRange]); sheet.getCell(columnRange.row - 2, columnRange.col).value("Column Direction").font("bold 14.6667px Calibri") sheet.tables.add("columnTable22", columnRange.row - 1, columnRange.col, columnRange.rowCount + 1, columnRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(columnRange.row - 1, columnRange.col, ordersData); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.invalidFormula, style, [columnRange]); sheet.getCell(bothRange.row - 2, bothRange.col).value("Both Direction").font("bold 14.6667px Calibri") sheet.tables.add("bothTable23", bothRange.row - 1, bothRange.col, bothRange.rowCount + 1, bothRange.colCount, GC.Spread.Sheets.Tables.TableThemes.light1); sheet.setArray(bothRange.row - 1, bothRange.col, productsData); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.invalidFormula, style, [bothRange]); cfs.addColumnStateRule(GC.Spread.Sheets.RowColumnStates.invalidFormula, style, [bothRange]); sheet.autoFitColumn(2); sheet.autoFitColumn(3); sheet.autoFitColumn(4); sheet.autoFitColumn(5); sheet.autoFitColumn(9); sheet.autoFitColumn(11); sheet.autoFitColumn(12); sheet.resumePaint(); }; </script> <style scoped> #app { height: 100%; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .options-row { font-size: 14px; padding: 5px; margin-top: 10px; } label { display: inline-block; margin-bottom: 6px; } 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);