다중 헤더 고정

워크시트에 TableSheet 데이터 범위 행 헤더를 포함하려는 경우 TableSheet를 렌더링할 때 sticky 옵션을 활성화할 수 있습니다.

설명
app.vue
index.html
styles.css

사용법

다음 코드는 TableSheet를 워크시트로 렌더링한 다음 행 헤더를 표시하는 방법을 보여줍니다.

var tableSheetName = "TableSheet1";
var dataRangeName = "TableSheetDataRange";
var dataRangeStartRow = 2;
var dataRangeStartCol = 2;
sheet.dataRanges.add(dataRangeName, tableSheetName, new GC.Spread.Sheets.Range(dataRangeStartRow, dataRangeStartCol, -1, -1));

스티커 헤더

var options = { sticky: { top: 1 } };
sheet.dataRanges.add(dataRangeName, tableSheetName, new GC.Spread.Sheets.Range(dataRangeStartRow, dataRangeStartCol, -1, -1), options);

이 데모의 기능

  • 여러 헤더
사용법 다음 코드는 TableSheet를 워크시트로 렌더링한 다음 행 헤더를 표시하는 방법을 보여줍니다. 스티커 헤더 이 데모의 기능 여러 헤더
/*REPLACE_MARKER*/ /*DO NOT DELETE THESE COMMENTS*/ <template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread" > </gc-spread-sheets> </div> </template> <script> import Vue from "vue"; import "@mescius/spread-sheets-vue"; import GC from "@mescius/spread-sheets"; import '@mescius/spread-sheets-shapes'; import '@mescius/spread-sheets-datacharts-addon'; import "@mescius/spread-sheets-tablesheet"; import '@mescius/spread-sheets-resources-ko'; GC.Spread.Common.CultureManager.culture("ko-kr"); import "./styles.css"; let App = Vue.extend({ name: "app", methods: { initSpread: function (spread) { spread.suspendPaint(); var sheet = spread.getActiveSheet(); initTableSheet(spread, function(tableSheet) { spread.setActiveSheet(sheet.name()); var dataRange = registerTableSheetIntoWorksheet(tableSheet, sheet); beautifySheet(sheet, dataRange); spread.undoManager().clear(); }); spread.resumePaint(); }, }, }); async function initTableSheet(spread, callback) { spread.options.autoFitType = GC.Spread.Sheets.AutoFitType.cellWithHeader; //init a data manager var dataManager = spread.dataManager(); var productAPI = getBaseApiUrl() + "/Product"; var productTable = dataManager.addTable("productTable", { remote: { read: { url: productAPI }, update: { url: productAPI, method: "PUT" }, create: { url: productAPI }, delete: { url: productAPI } } }); //init a table sheet var tableSheet = spread.addSheetTab(0, "MyTableSheet", GC.Spread.Sheets.SheetType.tableSheet); await productTable.fetch(); var myView = productTable.addView("myView", [ { value: "ProductName", caption: "Name", width: 250 }, { value: "SupplierId", caption: ["Foreign Keys", "Supplier Id"], width: 140 }, { value: "CategoryId", caption: ["Foreign Keys", "Category Id"], width: 140 }, { value: "QuantityPerUnit", caption: ["Product Infos", "Quantity Per Unit"], width: 140 }, { value: "UnitPrice", caption: ["Product Infos", "Unit Price"], width: 140 }, { value: "UnitsInStock", caption: ["Product Infos", "Units In Stock"], width: 140 }, { value: "=[@UnitPrice]*[@UnitsInStock]", caption: ["Product Infos", "Total Price"] } ]); tableSheet.setDataView(myView); spread.suspendPaint(); callback && callback(tableSheet); spread.resumePaint(); return tableSheet; } function registerTableSheetIntoWorksheet (tableSheet, sheet) { var name = tableSheet.name() + "_DataRange"; var row = 1; var col = 1; var dataRange = sheet.dataRanges.add(name, tableSheet.name(), new GC.Spread.Sheets.Range(row, col, -1, -1), { sticky: { top: 1 } }); return dataRange; } function beautifySheet(sheet, dataRange) { var range = dataRange.range(); for (var i = range.row; i < range.row + range.rowCount; i++) { sheet.autoFitRow(i); } for (var i = range.col; i < range.col + range.colCount; i++) { sheet.autoFitColumn(i); } sheet.setColumnWidth(1, 30); } function getBaseApiUrl() { return window.location.href.match(/http.+spreadjs\/learn-spreadjs\//)[0] + 'server/api'; } new Vue({ render: (h) => h(App), }).$mount("#app"); </script>
<!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$/ko/vue/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/ko/vue/node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('./src/app.vue'); System.import('$DEMOROOT$/ko/lib/vue/license.js'); </script> </head> <body> <div id="app"></div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, meta: { '*.css': { loader: 'css' }, '*.vue': { loader: 'vue-loader' } }, 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-resources-ko': 'npm:@mescius/spread-sheets-resources-ko/index.js', '@mescius/spread-sheets-shapes': 'npm:@mescius/spread-sheets-shapes/index.js', '@mescius/spread-sheets-datacharts-addon': 'npm:@mescius/spread-sheets-datacharts-addon/index.js', '@mescius/spread-sheets-tablesheet': 'npm:@mescius/spread-sheets-tablesheet/index.js', '@mescius/spread-sheets-vue': 'npm:@mescius/spread-sheets-vue/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'jszip': 'npm:jszip/dist/jszip.js', 'css': 'npm:systemjs-plugin-css/css.js', 'vue': 'npm:vue/dist/vue.min.js', 'vue-loader': 'npm:systemjs-vue-browser/index.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' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'js' }, rxjs: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' } } }); })(this);