react 前端分页查询数据导出excel

  • 前言
  • 一、安装file-saver、xlsx插件
  • 二、创建export.ts文件
  • 三、导出方法

前言

需求:前端实现导出Table中所有数据(不止是当前页面显示数据),生成excel。
实现:递归调用接口,使用file-saver、xlsx插件导出数据。


一、安装file-saver、xlsx插件

npm i file-saver --save
npm i xlsx --save

二、创建export.ts文件

创建 exportList 方法:

import XLSX from 'xlsx';
import FileSaver from 'file-saver';
import _ from 'lodash';export const exportList = (title: string, headers: string[], values: any) => {try {//如果value的json字段的key值和想要的headers值不一致时,可做如下更改//将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值const keyMap: any = {winnerId: 'ID',winnerNickName: '昵称',prizeName: '名称',prizeType: '类型',winTime: '时间',receiving: '地址',};const data = values.map((i: any) => {const ne = _.cloneDeep(i);const rzt = {..._.pick(ne, headers),};//改变key值为要求的excel的title值,但是edge不兼容,ca// const newRzt = Object.fromEntries(Object.entries(rzt).map(([k, v]) => [keyMap[k]||k, v]))const newRzt = Object.keys(rzt).reduce((newData: any, key) => {//上面的方法不兼容,所以用了这个方法处理headersconst newKey = keyMap[key] || key;newData[newKey] = rzt[key];return newData;}, {});return newRzt;});if (_.isEmpty(values)) {return;}const workbook = XLSX.utils.book_new(); //创建一个新的工作簿对象const ws = XLSX.utils.json_to_sheet(data); //将json对象数组转化成工作表ws['!cols'] = [//设置每一列的宽度{ wch: 20 },{ wch: 42 },{ wch: 40 },{ wch: 25 },{ wch: 30 },{ wch: 75 },];XLSX.utils.book_append_sheet(workbook, ws, 'sheet1'); //把sheet添加到workbook里,第三个参数是sheet名const wopts: any = { bookType: 'xlsx', bookSST: false, type: 'array' }; //写入的样式bookType:输出的文件类型,type:输出的数据类型,bookSST: 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性const wbout = XLSX.write(workbook, wopts); // 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该APIFileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }),`${title}.xlsx`); //保存文件} catch (e) {console.log(e, e.stack);}
};

三、导出方法

导出:

import { exportList } from './utils/export';// 导出
const handleExport = async () => {// exportData 为最终的导出数据, (id, query 均为请求接口的查询参数)const exportData = await getExportData({ id, query });// 调用 exportList 方法exportList('名单',['winnerId','winnerNickName','prizeName','prizeType','winTime','receiving',],exportData);
};

getExportData方法如下:

// getExportData 获取最终导出数据
const getExportData = async ({ id, query }) => {let recordsData: any = [];const length = 0;const pageNum = 1;// recordsData 是递归调用接口后获取到的所有数据recordsData = await getDatas(id, length, pageNum, query, recordsData);const exportData = recordsData?.map((item: any) => {// 此处对返回的数据做额外的处理);return item;});return exportData;
};

getDatas 方法 (递归调用接口):

// 递归调用接口
const getDatas = async (id: number,length: number,pageNum: number,query: any,recordsData: any
): Promise<any> => {const params = {query: {activityId: id,...query,pageNum,pageSize: 50,  // 一次请求50条数据},};const res: any = await getWinList(params); // 请求接口// records 为每次请求到的数据, total 为所有数据总条数const { records, total } = res;  length += records.length;pageNum += 1;recordsData = recordsData.concat(records);if (length >= total) { // 递归终止条件return recordsData;}return getDatas(id, length, pageNum, query, recordsData);
};

react 前端分页查询数据导出excel相关推荐

  1. 摘抄:java查询数据导出excel并返回给浏览器下载

    maven地址为: <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml ...

  2. SpringBoot后端+Vue之AntDesignVue前端实现查询表格导出excel功能

    用的是阿里的com.alibaba.excel包,pom的依赖如下 <dependency><groupId>com.alibaba</groupId><ar ...

  3. 『解疑』前端通过json数据导出excel表格文件(支持多级表头、复杂表头)(json转excel)

    问题 如何友好的通过规范的json数据导出成excel文件. 解题 制定规范的json数据结构: ( 只要将现有的数据处理成以下格式即可导出 ) {headerList: [ // 多级表头(2选1即 ...

  4. ASP将查询数据导出EXCEL

    一.用OWC 什么是OWC? OWC是Office Web Compent的缩写,即Microsoft的Office Web组件,它为在Web中绘制图形提供 了灵活的同时也是最基本的机制.在一个int ...

  5. java查询数据导出excel并返回给浏览器下载

    效果图: 1.点击导出表按钮 2.接着就会出现下图 3.点击上图中的确定按钮再接着就会出现下图 4.点击上图中的保存按钮接着就会出现下图,浏览器下载完成后的提示 5.打开下载好的文件如下图 好了,废话 ...

  6. java中将查询数据导出_如何在R中将数据框导出到Excel

    java中将查询数据导出 What if I tell, that you can export data frames to excel in R within a couple of minute ...

  7. 大数据分页查询 or 导出 慢sql治理

    大数据分页查询 or 导出 慢sql治理 背景 缺陷 要求 优化方案 适用场景 方案优点 方案缺点 时间拆分如处理分页查询问题 方案说明 使用说明 分页查询工具 时间拆分工具 背景 当前日增数据量将近 ...

  8. 【前端html页面数据导出为pdf文件】

    [前端html页面数据导出为pdf文件] 文前白话 在网页端导出 Excel 数据表格保存本地 前端html页面数据导出为pdf文件 文前白话 项目需要,将网页端查询的数据结果与数据分析结果导出文件, ...

  9. 大量数据导出Excel方案

    序 最近可能会遇到大量数据导出Excel的场景,今天趁现在需求告一段落来做下技术预研,然后这里就顺便分享给大家. 一.数据量预判 因为我们是做物联网的,这里要导出的数据就是设备的上报数据.客户说要这些 ...

最新文章

  1. python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com
  2. 微软全球副总裁洪小文:应对数字化转型挑战,跨界共创正当时
  3. 独家 | 关于NLP和机器学习之文本处理的你需要知道的一切(附学习资源)
  4. html不同平台,基于H5端自定义平台怎么使用和H5端不一样的index.html?
  5. python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】...
  6. 聊聊如何构建一支自驱团队(一)
  7. 无法使用JDK 8卸载JavaFX SceneBuilder 1.0
  8. Android代码混淆方法,Android 代码混淆零基础入门
  9. centos7 安装Golang环境
  10. elasticsearch工具类_Django + Elasticsearch——搜索精彩的TED演讲
  11. Jackson Annotation Examples
  12. “C 不再是一种编程语言”
  13. ​越狱iOS必备神器Flex使用指南-屏蔽越狱检测的破解利器
  14. python将列表元素全部小写_在Python中的字符串列表中转换元素的大小写
  15. 抖音自拍特效如何java实现_抖音特效在 Web 端的实现
  16. Django部署服务器
  17. Python中form的使用
  18. 【飞桨PaddleSpeech语音技术课程】— 语音唤醒
  19. Linux下 timerfd创建定时器并使用 epoll 监听
  20. mysql 集群 运维_【MySQL运维】Canal集群模式与多数据库同步部署

热门文章

  1. JAVA常见的权限控制算法的实现[转]
  2. 开学季都有哪些数码产品推荐?2022年数码好物推荐
  3. VRay Next for SketchUp室内局部空间渲染
  4. 吉他谱——浪花一朵朵
  5. Hybrid APP 混合开发经验总结《三》
  6. STC89c52定时器的使用以及相关案例
  7. 【备忘录】成本中心的分配与分摊
  8. Jenkins - 默认用户名和密码及启动方法
  9. 51单片机——计算器编写的一种办法(C语言版)
  10. 金蝶K/3系统结账前检查