- Notifications
You must be signed in to change notification settings - Fork290
The simple, easy-to-implement library to export HTML tables to xlsx, xls, csv, and txt files.
License
clarketm/TableExport
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- Migrating from3.x to4.x?
- Migrating from4.x to5.x?
v3
docs andREADME:v4
docs andREADME:v5
docs andREADME (below):
To use this library, include theFileSaver.js library, andTableExport library before the closing<body>
tag of your HTML document:
<scriptsrc="FileSaver.js"></script>...<scriptsrc="tableexport.js"></script>
$ bower install tableexport.js
$ npm install tableexport
uncompressed | compressed | |
---|---|---|
CSS | 🔗 | 🔗 |
JS | 🔗 | 🔗 |
Images | — | 🔗xlsx🔗xls🔗csv🔗txt |
In order to provideOffice Open XML SpreadsheetML Format (.xlsx
) support, you must include the following third-party library in your project before bothFileSaver.js andTableExport.
- xlsx.core.js bySheetJS
Including
xlsx.core.js
isNOT necessary if installing withBower
ornpm
<scriptsrc="xlsx.core.js"></script><scriptsrc="FileSaver.js"></script>...<scriptsrc="tableexport.js"></script>
To support legacy browsers (Chrome < 20,Firefox < 13,Opera < 12.10,IE < 10,Safari < 6 ) include theBlob.js polyfill before theFileSaver.js script.
- Blob.js byeligrey (forked byclarketm)
Including
Blob.js
isNOT necessary if installing withBower
ornpm
<scriptsrc="Blob.js"></script><scriptsrc="FileSaver.js"></script>...<scriptsrc="tableexport.js"></script>
To use this library, simple call theTableExport
constructor:
newTableExport(document.getElementsByTagName("table"));// OR simplyTableExport(document.getElementsByTagName("table"));// OR using jQuery$("table").tableExport();
Additional properties can be passed-in to customize the look and feel of your tables, buttons, and exported data.
Notice that by default, TableExport will create export buttons for three different filetypesxls
,csv
,txt
. You can choose which buttons to generate by setting theformats
property to the filetype(s) of your choice.
/* Defaults */TableExport(document.getElementsByTagName("table"),{headers:true,// (Boolean), display table headers (th or td elements) in the <thead>, (default: true)footers:true,// (Boolean), display table footers (th or td elements) in the <tfoot>, (default: false)formats:["xlsx","csv","txt"],// (String[]), filetype(s) for the export, (default: ['xlsx', 'csv', 'txt'])filename:"id",// (id, String), filename for the downloaded file, (default: 'id')bootstrap:false,// (Boolean), style buttons using bootstrap, (default: true)exportButtons:true,// (Boolean), automatically generate the built-in export buttons for each of the specified formats (default: true)position:"bottom",// (top, bottom), position of the caption element relative to table, (default: 'bottom')ignoreRows:null,// (Number, Number[]), row indices to exclude from the exported file(s) (default: null)ignoreCols:null,// (Number, Number[]), column indices to exclude from the exported file(s) (default: null)trimWhitespace:true,// (Boolean), remove all leading/trailing newlines, spaces, and tabs from cell text in the exported file(s) (default: false)RTL:false,// (Boolean), set direction of the worksheet to right-to-left (default: false)sheetname:"id"// (id, String), sheet name for the exported spreadsheet, (default: 'id')});
Note: to use the
xlsx
filetype, you must includejs-xlsx; reference theAdd-Ons
section.
headers
footers
formats
filename
bootstrap
exportButtons
position
ignoreRows
ignoreCols
trimWhitespace
RTL
sheetname
TableExport supports additional methods (getExportData,update,reset andremove) to control theTableExport
instance after creation.
/* First, call the `TableExport` constructor and save the return instance to a variable */vartable=TableExport(document.getElementById("export-buttons-table"));
/* get export data */varexportData=table.getExportData();// useful for creating custom export buttons, i.e. when (exportButtons: false)/***************** ** exportData *** *****************{ "export-buttons-table": { xls: { data: "...", fileExtension: ".xls", filename: "export-buttons-table", mimeType: "application/vnd.ms-excel" }, ... }};*/
/* convert export data to a file for download */varexportData=table.getExportData();varxlsxData=exportData.table.xlsx;// Replace with the kind of file you want from the exportDatatable.export2file(xlsxData.data,xlsxData.mimeType,xlsxData.filename,xlsxData.fileExtension,xlsxData.merges,xlsxData.RTL,xlsxData.sheetname)
vartableId="export-buttons-table";varXLS=table.CONSTANTS.FORMAT.XLS;/* get export data (see `getExportData` above) */varexportDataXLS=table.getExportData()[tableId][XLS];/* get file size (bytes) */varbytesXLS=table.getFileSize(exportDataXLS.data,exportDataXLS.fileExtension);/********************************** ** bytesXLS (file size in bytes) **********************************352*/
/* update */table.update({filename:"newFile"// pass in a new set of properties});
/* reset */table.reset();// useful for a dynamically altered table
/* remove */table.remove();// removes caption and buttons
Below are some of the popular configurable settings to customize the functionality of the library.
/** * CSS selector or selector[] to exclude/remove cells (<td> or <th>) from the exported file(s). *@type {selector|selector[]} *@memberof TableExport.prototype */// selectorTableExport.prototype.ignoreCSS=".tableexport-ignore";// selector[]TableExport.prototype.ignoreCSS=[".tableexport-ignore",".other-ignore-class"];// OR using jQuery// selector$.fn.tableExport.ignoreCSS=".tableexport-ignore";// selector[]$.fn.tableExport.ignoreCSS=[".tableexport-ignore",".other-ignore-class"];
/** * CSS selector or selector[] to replace cells (<td> or <th>) with an empty string in the exported file(s). *@type {selector|selector[]} *@memberof TableExport.prototype */// selectorTableExport.prototype.emptyCSS=".tableexport-empty";// selector[]TableExport.prototype.emptyCSS=[".tableexport-empty",".other-empty-class"];// OR using jQuery// selector$.fn.tableExport.emptyCSS=".tableexport-empty";// selector[]$.fn.tableExport.emptyCSS=[".tableexport-empty",".other-empty-class"];
/* default charset encoding (UTF-8) */TableExport.prototype.charset="charset=utf-8";/* default `filename` property if "id" attribute is unset */TableExport.prototype.defaultFilename="myDownload";/* default class to style buttons when not using Bootstrap or the built-in export buttons, i.e. when (`bootstrap: false` & `exportButtons: true`) */TableExport.prototype.defaultButton="button-default";/* Bootstrap classes used to style and position the export button, i.e. when (`bootstrap: true` & `exportButtons: true`) */TableExport.prototype.bootstrapConfig=["btn","btn-default","btn-toolbar"];/* row delimeter used in all filetypes */TableExport.prototype.rowDel="\r\n";
/** * Format-specific configuration (default class, content, mimeType, etc.) *@memberof TableExport.prototype */formatConfig:{/** * XLSX (Open XML spreadsheet) file extension configuration *@memberof TableExport.prototype */xlsx:{defaultClass:'xlsx',buttonContent:'Export to xlsx',mimeType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',fileExtension:'.xlsx'},xlsm:{defaultClass:'xlsm',buttonContent:'Export to xlsm',mimeType:'application/vnd.ms-excel.sheet.macroEnabled.main+xml',fileExtension:'.xlsm'},xlsb:{defaultClass:'xlsb',buttonContent:'Export to xlsb',mimeType:'application/vnd.ms-excel.sheet.binary.macroEnabled.main',fileExtension:'.xlsb'},/** * XLS (Binary spreadsheet) file extension configuration *@memberof TableExport.prototype */xls:{defaultClass:'xls',buttonContent:'Export to xls',separator:'\t',mimeType:'application/vnd.ms-excel',fileExtension:'.xls',enforceStrictRFC4180:false},/** * CSV (Comma Separated Values) file extension configuration *@memberof TableExport.prototype */csv:{defaultClass:'csv',buttonContent:'Export to csv',separator:',',mimeType:'text/csv',fileExtension:'.csv',enforceStrictRFC4180:true},/** * TXT (Plain Text) file extension configuration *@memberof TableExport.prototype */txt:{defaultClass:'txt',buttonContent:'Export to txt',separator:' ',mimeType:'text/plain',fileExtension:'.txt',enforceStrictRFC4180:true}},//////////////////////////////////////////// Configuration override example///////////////////////////////////////////* Change the CSV (Comma Separated Values) `mimeType` to "application/csv" */TableExport.prototype.formatConfig.xlsx.mimeType="application/csv"
TableExport packages with customizedBootstrap CSS stylesheets to deliver enhanced table and button styling. These styles can beenabled by initializing with thebootstrap
property set totrue
.
TableExport(document.getElementsByTagName("table"),{bootstrap:true});
When used alongside Bootstrap, there are four custom classes.xlsx
,.xls
,.csv
,.txt
providing button styling for each of the exportable filetypes.
Chrome | Firefox | IE | Opera | Safari | |
---|---|---|---|---|---|
Android | ✓ | ✓ | - | ✓ | - |
iOS | ✓ | - | - | - | ✓ |
Mac OSX | ✓ | ✓ | - | ✓ | ✓ |
Windows | ✓ | ✓ | ✓ | ✓ | ✓ |
A full list ofbrowser support can be found in theFileSaver.js README. Somelegacy browsers may require an additional third-party dependency:Blob.js
headers
footers
formats
filename
bootstrap
exportButtons
position
ignoreRows
ignoreCols
trimWhitespace
RTL
sheetname
rowspan
colspan
cell data types
(string
,number
,boolean
,date
)emoji
Arabic
- TableExport + RequireJS skeleton.
- TableExport + Flask skeleton.
- TableExport + Webpack 1 skeleton.
- TableExport + Angular 4 + Webpack 2 skeleton.
TableExport is licensed under the terms of theApache-2.0 License
- Update JSDocs and TypScript definition file.
- Fix bug withCSV andTXT
ignoreRows
andignoreCols
(rows/cols rendered as empty strings rather than beingremoved). - Reimplement and test the
update
,reset
, andremove
TableExport prototype properties without requiring jQuery. - Make jQuery aspeer dependency and ensure properTableExport rendering in browser, AMD, and CommonJS environments.
- Force jQuery to be an optionally loaded module.
- Use the enhancedSheetJS
xls
,csv
, andtxt
formats (exposed viaenforceStrictRFC4180
prototype property). - Allow
ignoreCSS
andemptyCSS
to work with anyselector|selector[]
instead of solely a single CSS class. - Ensure (via testing) full consistency and backwards-compatibility for jQuery.
- AddExport as PDF support.
Special thanks the the following contributors:
About
The simple, easy-to-implement library to export HTML tables to xlsx, xls, csv, and txt files.