首页 > Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件

Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件

 

注意,前情提示:

本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》

传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客

 

在/api/demo/文件夹下面创建exportAndDownloadExcel.js

代码内容

const $g = global.SG.$g, fs = global.SG.fs, router = global.SG.router, xlsx = global.SG.xlsx;
module.exports = global.SG.router;const excelData = [["表头第一列", "表头第二列", "表头第三列"],["第一行第一列", "第一行第二列", "第一行第三列"],["第二行第一列", "第二行第二列", "第二行第三列"],["第三行第一列", "第三行第二列", "第三行第三列"]];
const tempExcelFilePath = "./temp/download/{fileName}.xlsx";//临时存储下载导出文件的位置(定时一会儿后就会自动删除对应文件夹的文临时文件)
const exportExcelFileName = "强哥导出的文件名.xlsx";
const sheetName = "强哥的Sheet";
const mkdirs = $g.dir.mkdirsByFilePath;//递归创建文件夹目录(基于文件路径)//导出Excel,必须使用get方式,在客户端用window.open直接访问接口就可以下载了
router.get("/demo/exportAndDownloadExcel", (req, res) => {const randomFilePath = tempExcelFilePath.replace(/{fileName}/g, `sgExportExcel-${$g.date.timestamp()}`);mkdirs(randomFilePath, () => {const buffer = xlsx.build([{name: sheetName, data: excelData}]);fs.writeFile(randomFilePath, buffer, err => {console.log(`${$g.date.nowtime()}写入&创建${randomFilePath}${err ? "失败" : "成功"}`);res.download(randomFilePath, exportExcelFileName, err => {console.log(`${$g.date.nowtime()}下载${randomFilePath}${err ? "失败" : "成功"}`);err || $g.dir.delayDestroyFile(randomFilePath);//延时60秒销毁服务器文件});});});
});

在index.js最后一行加入

app.use(API_PATH, require(`.${API_PATH}/demo/exportAndDownloadExcel`));//导出并下载Excel

运行

cnpm i node-xlsx & node index

更多相关:

  • mutable的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。   在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。   我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成cons...

  • 前言:很多人都把const int * 、int * const、int const* 的区别和联系搞混,我自己在学习C++的过程中,也经常性          弄不 清楚,今天特意总结一下,作为学习笔记记录下来。 一,const修饰符用于指针         将const用于指针有些很微妙的地方,有两种不同的方式将const关键...

  • 项目结构 main.js(入口文件,开启9999端口监听,实现RESTful风格接口访问) const express = require("express"); const app = express(); const port = 9999;//设置端口号,如果端口号被占用需要自己修改,否则无法跑起来(建议不要用80和80...

  • ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/   序   ES6,或许应该叫 ES2015(2015 年 6 月正式发布),对于大多数前端同学都不陌生。   首先这篇文章不是工具书,不会去过多谈概念,而是...

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...