I am trying to import an excel sheet with multiple columns having different set of data and display it in a react component.
Currently i am doing,
<ReactFileReader handleFiles={this.handleFiles} fileType={'.xlsx'}>
<button>Import</button>
</ReactFileReader>
and then
handleFiles = files =>{
var fileDisplayArea = this.refs.fileDisplayArea;
var reader = new FileReader();
reader.onload = function(e){
fileDisplayArea.innerHTML = reader.result;
}
reader.readAsText(files[0], 'utf-8');
}
Although this imports the file but when rendered it displays all garbage characters.
Any help would be much appreciated.
Thanks,
Vikram
react-excel-renderer
There's a perfect library exactly for this ! It converts the excel data to JSON first, then renders it into a HTML table. Its called react-excel-renderer
- Install it
npm install react-excel-renderer --save
- Import both components ExcelRenderer and OutTable
import {ExcelRenderer, OutTable} from 'react-excel-renderer';
- Provide the file object to the ExcelRenderer function in your event
handler
fileHandler = (event) => {
let fileObj = event.target.files[0];
//just pass the fileObj as parameter
ExcelRenderer(fileObj, (err, resp) => {
if(err){
console.log(err);
}
else{
this.setState({
cols: resp.cols,
rows: resp.rows
});
}
});
}
- Once JSON is obtained, provide it to the OutTable component
<OutTable data={this.state.rows} columns={this.state.cols} tableClassName="ExcelTable2007" tableHeaderRowClass="heading" />
Thats it ! Its done !
A demo for the same can be found here