以前我们导出表格都是走的后台接口调用,后台处理数据给我们返回Excel文件,这样就会增加后台的工作量,自从知道React Table表格组件可以导出excel后,就去研究了一下:
GitHub地址:
https://github.com/zsusac/ReactHTMLTableToExcel
安装插件react-html-table-to-excel:
npm install --save react-html-table-to-excel
国内的由于各种原因可以安装淘宝镜像,用下面方法安装插件
//cnpm install --save react-html-table-to-excel
安装插件react-dom:
npm install --save react-dom
国内的由于各种原因可以安装淘宝镜像,用下面方法安装插件
//cnpm install --save react-dom
引入依赖:
import ReactHTMLTableToExcel from 'react-html-table-to-excel';
const ReactDOM = require('react-dom');
React Table组件写法如下:
//下方Table的Ref<定义在constructor,*React已经不允许用字符串的方法定义组件的ref了>
constructor(props) {
super(props);
this.IversonRef= React.createRef();
}
//Table中有数据后<后台拿到数据后,在拿数据方法的后面定义如下:>
const tableCon = ReactDOM.findDOMNode(this.IversonRef.current)
const table = tableCon.querySelector('table');
table.setAttribute('id','table-to-xls');
//组件中写法如下:
<ReactHTMLTableToExcel
// id="test-table-xls-button"
className="download-table-xls-button"
table="table-to-xls"
filename="XX统计表"
sheet="XX统计表"
buttonText="下载XX统计表"/>
<Table
ref={this.IversonRef}
/>
*特别的,用上面的方法并不能下载完整的Excel,因为React的表格分为antd-table-header和antd-table-body,下载下来的表格要么没有表头要么没有表格的内容Emmmmmmm,这样做显然是不对的
所以又想到另一个实现方法,思路如下:
用Html原生的table标签去实现下载功能<让这个table不显示display:'none'>,用React表格组件去实现显示QAQ
实现代码如下:
{TableDataList && TableDataList.length>0 ?
<ReactHTMLTableToExcel
//className="btnAdd"
table="TableDataListToXLS"
filename="XX统计表"
sheet="XX统计表"
buttonText="下载XX统计表Excel"/>
: null}
<table id="TableDataListToXLS" style={{display:'none'}}>
<tbody>
<tr>
<th>表头01</th>
<th>表头02</th>
<th>表头03</th>
</tr>
{TableDataList&& TableDataList.length>0 ?
TableDataList.map(x=>{
return(
<tr key={x.ID}>
<td>{x.A}</td>
<td>{x.B}</td>
<td>{x.C}</td>
</tr>
)
}) : <tr></tr>}
</tbody>
</table>
其中key={x.ID}是为了给每一行给定一个唯一的标识~~~
END
来源:CSDN
作者:即将拥有人鱼线的Iverson
链接:https://blog.csdn.net/iversons/article/details/84645868#comments