Employee Attendance Record

The following sample shows how you can use the SpreadJS spreadsheet to create useful templates that track your teams' yearly attendance.

Description
app.jsx
app-func.jsx
app-class.jsx
index.html
styles.css
Copy to CodeMine

The example is loading a predefined template using fromJSON.

  1. Record all the employee leaves on the Leave Tracker page or add specific company holidays on the Holiday sheet and see that how the data changes.

  2. Change the Employee - from dropdown below to retrieve data from different employees.

  3. Print the information by clicking the Print button.

The example is loading a predefined template using fromJSON. Record all the employee leaves on the Leave Tracker page or add specific company holidays on the Holiday sheet and see that how the data changes. Change the Employee - from dropdown below to retrieve data from different employees. Print the information by clicking the Print button.
import * as React from 'react'; import * as ReactDOM from 'react-dom'; import './styles.css'; import { AppFunc } from './app-func'; import { App } from './app-class'; // 1. Functional Component sample ReactDOM.render(<AppFunc />, document.getElementById('app')); // 2. Class Component sample // ReactDOM.render(<App />, document.getElementById('app'));
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-print'; import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; export function AppFunc() { let initSpread = function (spread) { spread.suspendPaint(); spread.fromJSON(data); var sheet = spread.sheets[0]; var printInfo = sheet.printInfo(); printInfo.showBorder(false); printInfo.showGridLine(false); printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide); printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide); var style = new GC.Spread.Sheets.Style(); style.cellButtons = [ { caption:"Print", buttonBackColor: "#FA896B", hoverBackColor: "#CCCCCC", useButtonStyle: true, width:150, height:70, command: (sheet, row, col, option) => { spread.print(0); } } ]; style.foreColor = "white"; style.font = "15pt Calibri"; sheet.setStyle(0, 20, style); spread.resumePaint(); } return (<div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => initSpread(spread)}> <Worksheet></Worksheet> </SpreadSheets> </div> </div>); }
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import '@mescius/spread-sheets-print'; import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react'; const Component = React.Component; export class App extends Component { constructor(props) { super(props); } render() { return <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread=>this.initSpread(spread)}> <Worksheet> </Worksheet> </SpreadSheets> </div> </div>; } initSpread(spread) { spread.suspendPaint(); spread.fromJSON(data); var sheet = spread.sheets[0]; var printInfo = sheet.printInfo(); printInfo.showBorder(false); printInfo.showGridLine(false); printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide); printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide); var style = new GC.Spread.Sheets.Style(); style.cellButtons = [ { caption:"Print", buttonBackColor: "#FA896B", hoverBackColor: "#CCCCCC", useButtonStyle: true, width:150, height:70, command: (sheet, row, col, option) => { spread.print(0); } } ]; style.foreColor = "white"; style.font = "15pt Calibri"; sheet.setStyle(0, 20, style); spread.resumePaint(); } }
<!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="$DEMOROOT$/spread/source/data/attendance-record.js" type="text/javascript"></script> <script src="systemjs.config.js"></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: 100%; height: 100%; overflow: hidden; float: left; } 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-print': 'npm:@mescius/spread-sheets-print/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/umd/react.production.min.js', 'react-dom': 'npm:react-dom/umd/react-dom.production.min.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);