react+antd中使用插件js-export-excel将table数据导出为excel文件

首先在项目中安装js-export-excel插件,进入项目目录,执行以下命令:
npm安装:npm install --save js-export-excel
yarn安装:yarn add js-export-excel
安装好之后,查看package.json文件夹中会在dependencies(生产环境依赖)对象中显示插件版本信息:

//package.json
"dependencies": {
    "@antv/data-set": "^0.10.0",
    "@babel/runtime": "^7.2.0",
    "antd": "^3.11.6",
    "bizcharts": "^3.4.2",
    "bizcharts-plugin-slider": "^2.1.1-beta.1",
    "chalk": "^2.4.2",
    "classnames": "^2.2.6",
    "dva": "^2.4.0",
    "enquire-js": "^0.2.1",
    "hash.js": "^1.1.5",
    "js-export-excel": "^1.1.2",  //依赖安装完成后显示
    "lodash": "^4.17.10",
    "lodash-decorators": "^6.0.0",
    "react": "^16.6.3",
    "react-container-query": "^0.11.0",
    "react-copy-to-clipboard": "^5.0.1",
    "react-document-title": "^2.0.3",
    "react-dom": "^16.6.3",
    "react-fittext": "^1.0.0",
    "react-media": "^1.8.0",
    "react-router-dom": "^4.3.1"
  },

将table数据导出为excel文件的逻辑代码:

//index.jsx
import React, { PureComponent } from 'react';
import { Table, Button } from 'antd';
import { connect } from 'dva';
import { formatTime } from '@/utils/utils';
import ExportJsonExcel from 'js-export-excel';

@connect(state => {
  return {
    loading: state.loading.models.getRepaymentPlanList,
    getRepaymentPlanList: state.getRepaymentPlanList,
  };
})
export default class extends PureComponent {
	//导出为excel文件的方法
	downloadFileToExcel = () => {
		const { getRepaymentPlanList } = this.props;  //从props中获取数据源
		let option = {};  //option代表的就是excel文件
		let dataTable = [];  //excel文件中的数据内容
		if (getRepaymentPlanList && getRepaymentPlanList.length > 0) {
			for (let i in getRepaymentPlanList) {  //循环获取excel中每一行的数据
				let _planDay = formatTime(getRepaymentPlanList[i].planDay, true);  //格式化日期(自定义方法)
				let obj = {
           			'还款期数': getRepaymentPlanList[i].planPeriod,
           			'计划还款日': _planDay,
           			'租金(元)': getRepaymentPlanList[i].currentAmount,
           			'还款本金': getRepaymentPlanList[i].currentPrinciple,
           			'还款利息': getRepaymentPlanList[i].currentInterest,
            	}
            	dataTable.push(obj);  //设置excel中每列所获取的数据源
            }
        }
        option.fileName = '实际还款计划';  //excel文件名称
        option.datas = [
      		{
        		sheetData: dataTable,  //excel文件中的数据源
        		sheetName: '实际还款计划',  //excel文件中sheet页名称
        		sheetFilter: ['还款期数', '计划还款日', '租金(元)', '还款本金', '还款利息'],  //excel文件中需显示的列数据
        		sheetHeader: ['还款期数', '计划还款日', '租金(元)', '还款本金', '还款利息'],  //excel文件中每列的表头名称
      		}
    	]
    	let toExcel = new ExportJsonExcel(option);  //生成excel文件
    	toExcel.saveExcel();  //下载excel文件
	}
	render() {
		return (
	      	<>
	        	<h2 style={{ textAlign: 'center', fontSize: '24px' }}>实际还款计划</h2>
	        	<div style={{ width: "80%", margin: "0 auto" }}>
	         		<Button type="primary" onClick={this.downloadFileToExcel} style={{ marginBottom: "15px" }}>下载</Button>
		          	<Table
		            	bordered
		            	rowKey={record => record.id}
		            	style={{ background: 'white' }}
		            	columns={columns}
		            	dataSource={getRepaymentPlanList}
		            	pagination={false}
		            	size='middle'
		          	/>
	        	</div>
	      	</>
    	)
    }
}

使用插件js-export-excel并不能将页面中的table表格直接导出为excel文件,而是我们自定义一个导出为excel文件的方法,其中使用的数据源与页面的table表格的数据源一致,然后进行拼接;这样的隐式绑定方法在页面看来像是将table数据直接导出为excel文件,一旦导出excel方法中写错一个字段,那table数据和excel文件数据就会不一致,而且问题不容易排查,只能去代码里面一行一行排查代码。
页面效果图,点击下载按钮之后会自动下载excel文件:
实际还款计划
打开excel文件,内容可编辑:
在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
在前端接收并导出后端导出Excel文件,也可以使用`xlsx`和`file-saver`库来实现。 首先,需要使用`fetch`或`axios`等网络请求库向后端请求Excel文件,并将返回的二进制流进行解析。可以使用`xlsx`库的`read`方法将二进制流转换为JSON格式的数据。示例代码如下: ```javascript import { read } from 'xlsx'; import { saveAs } from 'file-saver'; // ... fetch(url, { responseType: 'blob' }).then(res => { const reader = new FileReader(); reader.onload = () => { const data = new Uint8Array(reader.result); const workbook = read(data, { type: 'array' }); // 处理表格数据 // ... // 导出表格数据 const excelBuffer = write(workbook, { type: 'array', bookType: 'xlsx' }); const excelBlob = new Blob([excelBuffer], { type: 'application/octet-stream' }); saveAs(excelBlob, /* 指定的文件名 */); }; reader.readAsArrayBuffer(res.data); }); ``` 以上代码,`fetch`请求的响应数据类型设置为`blob`,表示返回的是二进制流。接收到响应数据后,使用`FileReader`将二进制流转换为数组缓冲区,再使用`xlsx`库的`read`方法将数组缓冲区转换为JSON格式的数据。接下来根据具体需求进行表格数据处理,并使用`write`方法将数据转换为Excel文件的二进制流,最后使用`file-saver`库的`saveAs`方法将二进制流导出Excel文件。 需要注意的是,在导出Excel文件时,需要设置正确的文件类型和文件名,否则可能会导致文件无法打开或文件名不符合预期。 以上是一个简单的接收和导出Excel文件的流程,具体实现还需要根据具体情况进行相应的调整。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值