IO

Converting Worksheet Tables to DataTables which bind to the Data Manager results in significant performance improvements when importing Excel workbooks.

It could convert all worksheet tables to data tables which bind to the data manager by turn on the convertSheetTableToDataTable of the GC.Spread.Sheets.ImportXlsxOptions, and export to Excel file with includeBindingSource of the GC.Spread.Sheets.ExportXlsxOptions turned on. It should be known that the column based formulas will be converted when import or export, the cell based formulas will be removed when import.
import * as React from 'react'; import { createRoot } from 'react-dom/client'; import './styles.css'; import { AppFunc } from './app-func'; // import { App } from './app-class'; // 1. Functional Component sample createRoot(document.getElementById('app')).render(<AppFunc />); // 2. Class Component sample // createRoot(document.getElementById('app')).render(<App />);
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-io'; import { SpreadSheets } from '@mescius/spread-sheets-react'; let spread = null; export function AppFunc() { const initSpread = async (currSpread) => { spread = currSpread; const loadingTip = addLoadingTip(); const tableImportExcel = document.getElementById('options-container'); await tableImportExcel.setSpread(spread, '$DEMOROOT$/'); loadingTip.remove(); } return ( <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => initSpread(spread)}> </SpreadSheets> </div> <sjs-demo-table-import-excel id="options-container" class="options-container"></sjs-demo-table-import-excel> </div> ); }
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-io'; import { SpreadSheets } from '@mescius/spread-sheets-react'; const Component = React.Component; const GCsheets = GC.Spread.Sheets; export class App extends Component { constructor(props) { super(props); this.spread = null; } render() { return ( <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => this.initSpread(spread)}> </SpreadSheets> </div> <sjs-demo-table-import-excel id="options-container" class="options-container"></sjs-demo-table-import-excel> </div> ); } async initSpread(spread) { this.spread = spread; const loadingTip = addLoadingTip(); const tableImportExcel = document.getElementById('options-container'); await tableImportExcel.setSpread(spread, '$DEMOROOT$/'); loadingTip.remove(); } }
<!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$/en/react/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/en/react/node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script src="$DEMOROOT$/spread/source/data/table-dm/table-import-excel-component.js" type="text/javascript"></script> <script> System.import('$DEMOROOT$/en/lib/react/license.js').then(function () { System.import('./src/app'); }); </script> </head> <body> <div id="app"></div> </body> </html>
.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; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } #app { height: 100%; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, react: true }, meta: { '*.css': { loader: 'css' } }, 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-io': 'npm:@mescius/spread-sheets-io/index.js', '@mescius/spread-sheets-react': 'npm:@mescius/spread-sheets-react/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'react': 'npm:react/cjs/react.production.js', 'react-dom': 'npm:react-dom/cjs/react-dom.production.js', 'react-dom/client': 'npm:react-dom/cjs/react-dom-client.production.js', 'scheduler': 'npm:scheduler/cjs/scheduler.production.js', 'css': 'npm:systemjs-plugin-css/css.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: 'jsx' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);