# Table2Excel.js This is a library to export html tables to excel sheets. ## Precondition It has to be a row * column table ## Features 1. able to export with width, alignment and colors 2. extendable ## Dependencies [ExcelJS](https://github.com/guyonroche/exceljs) [FileSaver.js](https://github.com/eligrey/FileSaver.js) ## Live Demo [Demo](https://jackgit.github.io/table2excel.js/index.html) ## Include table2excel.js ### npm `ExcelJS` is peer dependency to `table2excel.js`, so you need to install exceljs first: ```bash npm i exceljs ``` then, install table2excel.js: ```bash npm i table2excel.js ``` use in your code like: ```js import Table2Excel from 'table2excel.js' new Table2Excel('table').export() ``` you may also need a config in webpack: ```js node: { fs: 'empty' } ``` ### table2excel.min.js (with ExcelJS packed) ```html ``` ### table2excel.core.js (without ExcelJS packed) ```html ``` ## Basic Usage ```js const table2Excel = new Table2Excel(selector, options) // new Table2Excel('table') table2Excel.export(fileName, extension) // table2Excel.export('my-exported-table', 'xlsx') ``` `extension` can be `'xls'` or `'xlsx'`, default as `'xlsx'` ### selector It's optional, and defaulted as `'table'` ### options It's optional, and defaulted as: ```js { workbook: { views: [{ x: 0, y: 0, width: 10000, height: 20000, firstSheet: 0, activeTab: 1, visibility: 'visible' }] }, widthRatio: .14, plugins: [ Table2Excel.plugins.fontPlugin, Table2Excel.plugins.fillPlugin, Table2Excel.plugins.formPlugin, Table2Excel.plugins.alignmentPlugin, Table2Excel.plugins.hyperlinkPlugin, Table2Excel.plugins.autoWidthPlugin ] } ``` `workbook` is options used while creating a workbook, please refer [exceljs#create-a-workbook](https://github.com/guyonroche/exceljs#create-a-workbook) for details. `widthRatio` is a ratio that will be used while converting `width` style of html table cells to width of sheet cells. ## Plugins Plugin helps to extend the ability of transforming table to excel. Build-in plugins can be access like: ```js Table2Excel.plugins.fontPlugin, Table2Excel.plugins.fillPlugin, Table2Excel.plugins.formPlugin, Table2Excel.plugins.alignmentPlugin, Table2Excel.plugins.hyperlinkPlugin, Table2Excel.plugins.autoWidthPlugin ``` A plugin can be defined to join different phase of table to excel process, and in different phase, plugin is able to access different objects from context. ```js { /** * after an empty workbook created * @param {ExcelJS.Workbook} context.workbook * @param {NodeList} context.tables */ workbookCreated ({ workbook, tables }) {}, /** * after an empty worksheet created * @param {ExcelJS.Workbook} workbook * @param {NodeList} tables * @param {ExcelJS.Worksheet} worksheet * @param {HTMLTableElement} table */ worksheetCreated ({ workbook, tables, worksheet, table }) {}, /** * after a worksheet been filled with data from table * @param {ExcelJS.Workbook} workbook * @param {NodeList} tables * @param {ExcelJS.Worksheet} worksheet * @param {HTMLTableElement} table */ worksheetCompleted ({ workbook, tables, worksheet, table }) {}, /** * after an cell of worksheet created * @param {ExcelJS.Workbook} workbook * @param {NodeList} tables * @param {ExcelJS.Worksheet} worksheet * @param {HTMLTableElement} table * @param {ExcelJS.Cell} workcell * @param {HTMLTableCellElement} cell * @param {colRange} [from, to] * @param {rowRange} [from, to] */ workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, colRange, rowRange }) {} } ``` Example 1, you can define a plugin to make some rows or columns hidden of exported excel: ```js const table2Excel = new Table2Excel('table', { plugins: [{ worksheetCompleted ({ workbook, tables, worksheet, table }) { worksheet.getRow(1).hidden = true worksheet.getColumn(1).hidden = true } }] }) ``` Example 2, you can add your customized cell parser for your table: ```js const table2Excel = new Table2Excel('table', { plugins: [{ workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, rowRange, colRange }) { workcell.value = { text: '', link: '' } workcell.style = { ...workcell.style, font: {}, color: {} } } }] }) ```