当前位置: 首页 > news >正文

纯前端使用XLSX导出excel表格

1 单个sheet 

page.js(页面中的导出方法)

import { exportExcel } from '../../../utils/exportExcel.js';   leadOut() {const arr = [{ id: 1, name: '张三', age: 14, sex: '男' },{ id: 2, name: '李四', age: 15, sex: '女' },{ id: 3, name: '王五', age: 16, sex: '男' },];const allRecordList = arr.map((item, index) => {return {序号: String(index + 1),姓名: item.name,年龄: String(item.age),性别: item.sex,};});const data = {人员列表: allRecordList,};const columnHeaders = {人员列表: ['序号', '姓名', '年龄', '性别'],};const cellStyle = [{ wch: 6 }, { wch: 10 }, { wch: 10 }, { wch: 10 }];const fileName = '人员列表';exportExcel(columnHeaders, data, cellStyle, fileName);},

 exportExcel.js(封装导出方法)

import * as XLSX from "xlsx";// 下载XLSX插件 npm i XLSXexport function exportExcel(columnHeaders, data, cellStyle, fileName) { // columnHeaders 表头信息  data数据  cellStyle 列宽度 fileName 导出文件名function outputXlsxFile(data, wscols, xlsxName) { // 用于生成并保存 Excel 文件const sheetNames = [];// 存储 sheet 名称const sheetsList = {};// 存储所有 sheet 的数据const wb = XLSX.utils.book_new();// 创建了一个新的工作簿对象 wbconsole.log(data, 'data');for (const key in data) {sheetNames.push(key);const columnHeader = columnHeaders[key] // 获取当前 sheet 对应的列头信息 columnHeaderconst temp = transferData(data[key], columnHeader);sheetsList[key] = XLSX.utils.aoa_to_sheet(temp);// 创建 sheet 对象sheetsList[key]["!cols"] = wscols;// 当前 sheet 设置列宽 wscols}console.log(sheetNames, 'sheetNames');console.log(sheetsList, 'sheetsList');console.log(wb, 'wb');wb.SheetNames = sheetNames;wb.Sheets = sheetsList;XLSX.writeFile(wb, xlsxName + ".xlsx");// 将工作簿保存为 Excel 文件}function transferData(data, columnHeader) { // 将数据按照列头信息进行转换,将每一行的数据转换成一个数组const content = [];content.push(columnHeader);data.forEach((item, index) => {const arr = [];// 用于存储当前行的数据columnHeader.map(column => {arr.push(item[column]);// 使用 map 方法遍历 columnHeader,将每个列头对应的属性值添加到 arr 数组中})content.push(arr);// 将 arr 数组添加到 content 数组中});console.log(content, 'content');return content;}outputXlsxFile(data,cellStyle,fileName);
}

 为了方便理解导出过程,变量打印如下图所示:

2 多个sheet 

当然,也可以导出多个sheet表,此时页面效果和数据如下:

    leadOut() {const arr = [{ id: 1, name: '张三', age: 14, sex: '男' },{ id: 2, name: '李四', age: 15, sex: '女' },{ id: 3, name: '王五', age: 16, sex: '男' },];const arr2 = [{ id: 1, class: '一年级', count: 30, teacher: '张三' },{ id: 2, class: '二年级', count: 31, teacher: '李四' },{ id: 3, class: '三年级', count: 32, teacher: '王五' },];const allRecordList = arr.map((item, index) => {return {序号: String(index + 1),姓名: item.name,年龄: String(item.age),性别: item.sex,};});const allRecordList2 = arr2.map((item, index) => {return {序号: String(index + 1),班级: item.class,人数: String(item.count),老师: item.teacher,};});const data = {人员列表: allRecordList,班级列表: allRecordList2,};const columnHeaders = {人员列表: ['序号', '姓名', '年龄', '性别'],班级列表: ['序号', '班级', '人数', '老师'],};const cellStyle = [{ wch: 6 }, { wch: 10 }, { wch: 10 }, { wch: 10 }];const fileName = '人员列表';exportExcel(columnHeaders, data, cellStyle, fileName);},

http://www.lryc.cn/news/262250.html

相关文章:

  • 将mjpg格式数转化成opencv Mat格式
  • 【golang/g3n】3D游戏引擎G3N的windows安装与测试
  • sap table 获取 valuation class MBEW 查表获取
  • 介绍一些操作系统—— Ubuntu 系统
  • React中props 和 state异同初探
  • spring-kakfa依赖管理之org/springframework/kafka/listener/CommonErrorHandler错误
  • 基于go语言开发的海量用户及时通讯系统
  • 19.Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
  • C 库函数 - time()
  • 基于Python数据可视化的网易云音乐歌单分析系统
  • Jenkins----基于 CentOS 或 Docker 安装部署Jenkins并完成基础配置
  • flume系列之:监控flume agent channel的填充百分比
  • 信息安全和网络安全的区别
  • 【开源项目】WPF 扩展 -- 多画面视频渲染组件
  • risc-v system instruction
  • 08 v-text指令
  • vite基本知识
  • 考研真题c语言
  • neuq-acm预备队训练week 9 P8604 [蓝桥杯 2013 国 C] 危险系数
  • 【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)
  • Nginx location+Nginx rewrite(重写)(新版)
  • uniapp实现地图电子围栏功能
  • LeetCode第376场周赛
  • 数据仓库与数据挖掘小结
  • ensp创建配置环境,实现全网互访
  • 智能优化算法应用:基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • ripro后台登录后转圈和图标不显示的原因及解决方法
  • android 源码编译android 12
  • CSS第二天导读
  • scroll-behavior属性使用方法