excel的导出

excel的导出是开发常见的功能,但是excel得到处都是谁导出呢?

一般情况excel都是由后端导出生成blob格式返给前端,前端进行下载,当然前端也可以自己利用数据进行excel导出,这篇文章将介绍前端导出和后端导出的一些插件使用

node端导出

1.node-xlsx

怎么使用

官网: node-xlsx - npm

根据官网,可以看到这个插件既可以生成excel,也可以对excel进行解析,这里主要讲解生成excel

(1)下载插件

npm install node-xlsx

(2)使用

引入

const xlsx = require('node-xlsx')

创建buffer

buffer = xlsx.build([{name: 'excel表名', data: 'excel数据'}], sheetOptions);

参数说明:

       sheetOptions :为表格样式

const sheetOptions = {'!cols': [{wch: 6}, {wch: 7}]};

        data的数据格式为[{},{}] 可以传入多个对象生成多个小excel ,每个对象的数据格式

{name: 'excel小表名'data: [['一行一列数据', '一行二列数据'],['二行一列数据', '二行二列数据']]}

除了直接写成buffer,也可以写成文件保存在后端,给前端excel的地址进行下载

const fs = require('fs')
fs.writeFile("文件名称.xlsx", buffer, function (err) {if (err) {console.log('写入失败‘);} else {console.log("写入成功!");}
});

案例:

egg的写的导出excel的service类

const xlsx = require('node-xlsx')
const Service = require('egg').Service;const tempArr = []tempArr.push([...header.map(col => col.header)])class exportFileService extends Service {constructor(prop) {super(prop);}// const column = [//          { header: '姓名', key: 'name', width: 30 },//          { header: '年龄', key: 'age', width: 30 },//          { header: '生日', key: 'birthday', width: 30 },// ];// data = [{name:xx, age:xx, birthday:xx}]toExport(column, data, filename = '导出') {return new Promise((reslove, reject) => {const { ctx } = this;const colArr = []colArr.push([...column.map(col => col.header)])//xlsx数据data.forEach(item => {colArr.push([...column.map(col => item[col.key])])})console.log(column, data, 'dada')const buffer = xlsx.build([{ name: '导出sheet1', data: colArr }], { '!cols': [{ wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 }, { wch: 20 },] });reslove({buffer})})}
}module.exports = exportFileService;

egg端调用servece反给前端

  async downLoad() {const { ctx, service } = this;const { id, type } = ctx.request.body;let result = [],// node段请求后端接口返回数据const res = await ctx.service.getList.list({ id, type})if (res.status === 200 && res.data.length) {result = res.data;}const header = [{ header: '姓名', key: 'name', width: 30 },{ header: '年龄', key: 'age', width: 30 },{ header: '生日', key: 'birthday', width: 30 },];// node端进行转exceltry {let res = await service.exportExcel.toExport(header, result);ctx.set('Content-disposition', `attachment;filename=1.xlsx`);// 返回文件bufferctx.body = res.buffer;} catch(err) {ctx.status = 500ctx.body = err}}

前端调用下载

         down(data) {axios({method: 'post',url: '/list/downLoad',responseType: 'blob',headers: {'Content-Type': 'application/json',},data,}).then(res => {if (res.status === 200) {let name = data.type === 'all' ? '全部列表' : '失败列表'this.saveFile(res.data, `${name}${data.id}`);)}}).catch(error => {});}saveFile(file, filename) {const ieKit = /(?:ms|\()(ie)\s([\w\.]+)|trident|(edge|edgios|edga|edg)/i.test(window.navigator.userAgent);const blobData = new Blob([ file ], { type: 'application/vnd.ms-excel' });if (ieKit) {navigator.msSaveBlob && navigator.msSaveBlob(blobData, filename + '.xlsx');} else {const objectURL = window.URL.createObjectURL(blobData);const save_link = document.createElement('a');const event = document.createEvent('MouseEvents');save_link.href = objectURL;save_link.download = filename + '.xlsx';event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);save_link.dispatchEvent(event);window.URL.revokeObjectURL(objectURL);}}

 2.exceljs

官网:https://github.com/exceljs/exceljs/blob/master/README_zh.md

(1) 下载

npm install exceljs

(2) 使用

直接看官网吧,因为官网写的很详细,如果去创建一个excel,怎么向一个表增加数据,api有些多,所以自己看吧,最后也是可以返回一个buffer给前端,前端下载;

其实有了buffer,再利用fs写一个文件给前端文件地址也是ok的

前端直接导出excel

1.js-export-excel

官网:GitHub - jiengsad/js-export-excel: json导出excel(纯js 支持中文) ES6 module

是一个纯js进行导出的,所以适用于vue和react,因此要注意其兼容性,ie 10+

// 直接导出文件
const ExportJsonExcel = require("js-export-excel");var option = {};option.fileName = "excel";option.datas = [{sheetData: [{ one: "一行一列", two: "一行二列" },{ one: "二行一列", two: "二行二列" },],sheetName: "sheet",sheetFilter: ["two", "one"],sheetHeader: ["第一列", "第二列"],columnWidths: [20, 20],},{sheetData: [{ one: "一行一列", two: "一行二列" },{ one: "二行一列", two: "二行二列" },],},
];var toExcel = new ExportJsonExcel(option); //new
toExcel.saveExcel(); //保存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候,前期的数据处理过程通常会遇到一个问题,需要将各种人脸从不同尺寸的图像中截取出来,再进行人脸对齐操作:即将人脸截取出来并将倾斜的人脸…

大数据是什么意思?现在学习还来得及么

数据的方向的切入是全方位的,基础语言的学习只是很小的一个方面,编程落实到最后到编程思想,有了指导思想学习起来就能方便很多。 随着互联网大潮走向低谷,同时传统企业纷纷进行数字化转型,基本各个公司都在考虑如何进…

QT学习之旅 - QThread多线程

文章目录 首先是主线程 其次是一个程序 通过一个QThread来放入程序 进阶一点: 手动开启关闭线程俩个线程 其实QT中的thread(线程)是很容易的 首先是主线程 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWin…

【图像处理】经营您的第一个U-Net以进行图像分割

一、说明 AI厨师们&#xff0c;今天您将学习如何准备计算机视觉中最重要的食谱之一&#xff1a;U-Net。本文将叙述&#xff1a;1语义与实例分割&#xff0c;2 图像分割中还使用了其他损失&#xff0c;例如Jaccard损失&#xff0c;焦点损失&#xff1b;3 如果2D图像分割对您来说…

spring 详解二 IOC(Bean xml配置及DI)

配置列表 Xml配置 功能描述 <bean id"" class""></bean> Bean的id&#xff0c;配置id会转为Bean名称和不配就是全限定类名 <bean name"" ></bean> Bean的别名配置&#xff0c;存储在Factory的aliasMap中通过别名也…

【SpringBoot】SpringBoot的自动配置源码解析

文章目录 1. SpringBoot的自动配置概念2. SpringBoot自动配置的原理3. EnableAutoConfiguration4. 常用的Conditional注解 1. SpringBoot的自动配置概念 SpringBoot相对于SSM来说&#xff0c;主要的优点就是简化了配置&#xff0c;不再需要像SSM哪有写一堆的XML配置&#xff0…

centos7.9修改ssh默认的端口号

多开几个ssh&#xff0c;防止配置文件错误&#xff0c;将自己关在服务器外面了 netstat -ntlp|grep ssh # ssh对应的端口号 修改sshd_config配置文件 /etc/ssh/sshd_config&#xff0c;重启sshd服务 #Port 22 Port 10011 # 端口号自己定义&#xff0c;不能超过65535&#xf…

Django系列所有漏洞复现vulhubCVE-2018-14574,CVE-2022-34265,CVE-2021-35042

文章目录 Django < 2.0.8 任意URL跳转漏洞&#xff08;CVE-2018-14574&#xff09;漏洞详情&#xff1a;复现&#xff1a; Django Trunc(kind) and Extract(lookup_name) SQL注入漏洞&#xff08;CVE-2022-34265&#xff09;漏洞详情&#xff1a;复现&#xff1a; Django Qu…

pyqt 实现计算器

1.由designer设计实现的计算器类 文件名为&#xff1a;untitled.py # -*- coding: utf-8 -*-# Form implementation generated from reading ui file untitled.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will b…

03-MySQL-基础篇-SQL之DDL语句

SQL之DDL语句 前言DDL数据库操作表操作查询操作数据类型案例修改删除 前言 本篇来学习下SQL中的DDL语句 DDL 全称Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 数据库操作 查询所有数据库 sh…

docker 发布镜像到阿里云容器镜像

1.登录阿里云 2.创建个人版实例&#xff0c;这里需要设置密码&#xff0c;一定要保存好 3.创建一个镜像仓库&#xff0c;个人实例最多创建3个 4.创建命名空间&#xff0c;个人实例最多300个 5.发布镜像到阿里云容器镜像 1、linux登录阿里云docker容器镜像 $ docker login --us…

考场作弊行为自动抓拍告警算法 yolov7

考场作弊行为自动抓拍告警系统通过yolov7python网络模型算法&#xff0c;考场作弊行为自动抓拍告警算法实时监测考场内所有考生的行为&#xff0c;对考生的行为进行自动抓拍&#xff0c;并分析判断是否存在作弊行为。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff…

Clion 配置Mingw64的 c++开发环境

1、Mingw64的安装与环境变量的配置 Mingw64文件下载 Mingw64下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/ posix相比win32拥有C 11多线程特性&#xff0c;sjlj和seh对应异常处理特性&#xff0c;sjlj较为古老&#xff0c;所以选择seh 配置环境变…

Windows git bash输入vim报错,不能使用vim-plug插件管理器

Windows系统下的git bash在安装时自带了默认的vim&#xff0c;我自己也下了个gvim&#xff0c;并且配置了.vimrc&#xff0c;其中使用了vim-plug管理nerdtree这些插件。但是在bash中vim <file>时&#xff0c;就会蹦出来几行报错&#xff1a; 处理 /c/Users/<username…

训练自己的ChatGPT 语言模型(一).md

0x00 Background 为什么研究这个&#xff1f; ChatGPT在国内外都受到了广泛关注&#xff0c;很多高校、研究机构和企业都计划推出类似的模型。然而&#xff0c;ChatGPT并没有开源&#xff0c;且复现难度非常大&#xff0c;即使到现在&#xff0c;没有任何单位或企业能够完全复…

session中间件的使用

1.安装 npm i express-session 2.导入session中间件 const sessionrequire("express-session") 3. 设置中间件 说明&#xff1a; 设置了session的名称为"sid",这是cookie的名称&#xff0c;默认值是connect.id。设置了一个密钥"forever",用于…

微服务、SpringBoot、SpringCloud 三者的区别

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…