nodejs+jsxlsx使用文件流方式下载excel

本文介绍用 Node.js 中的依赖库来处理 Excel 文件,主要利用js-xlsx库来处理 Excel 文件。

问题:

  1.由于公司正式服务器的权限收的很紧,站点的linux账户没有写权限,无法利用写文件的方式导出excel,于是查询资料采用文件流的方式导出。

  2.因为不熟悉nodejs 导致无限踩坑。

js-xlsx github地址 https://github.com/SheetJS/sheetjs

因为需要导出excel文件 则根据github上的文档显示可以采用这些方法 最简单的如果没有类似权限的其他限制 采用writeFile以写文件的方式导出

如果也有类似的限制 writeFile这种方式就不是最佳选择,查询资料过后,准备以文件流的方式进行处理

jsxlsx 也提供了很简单的处理  根据文档write方式就可以满足我的需要 在write_opts中设置我们需要的类型,诸如:

let buf = Excel.write(wb, {    type: ‘buffer‘,    bookType: ‘xlsx‘})在此之前我们还需要将我们要导出的数据装载如工作表中:
let ws = Excel.utils.aoa_to_sheet(data); //data就是我们的数据let wb = Excel.utils.book_new();Excel.utils.book_append_sheet(wb, ws, ‘XX数据‘);在经过这些步骤之后 我们导出的工作基本上已经完成了,但是别忘了因为是采用文件流的方式相应的设置也要加上
ctx.set(‘Content-disposition‘, ‘attachment; filename=‘ + fileName);ctx.type = "xlsx"ctx.body = buf

前端在接收到后端返回的文件流时,利用Blob进行相应的处理:
const data = res.data;const filename = res.headers[‘content-disposition‘].split(‘=‘)[1]// console.log(res.headers)const url = window.URL.createObjectURL(    new Blob([data], {        type:            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"    }));const link = document.createElement("a");link.style.display = "none";link.href = url;link.setAttribute("download", filename);document.body.appendChild(link);link.click();document.body.removeChild(link);

原文地址:https://www.cnblogs.com/cyworz/p/12023516.html

时间: 2024-08-30 15:10:54

nodejs+jsxlsx使用文件流方式下载excel的相关文章

数据表格,查询、导出共用一个form表单,实现文件流方式下载

在开发中遇到问题是这样的: 在维护老的管理系统的过程中,老板说让加导出功能:项目中,查询的筛选条件是用的表单提交的方式写的. 解决方案有两种: 一.用ajax方式导出 var array = $('#frmSearch').serialize(); 获得表单数据后,用post方式提交给服务器,服务器返回文件所存在的网络地址,然后用windows.open()的方式下载文件 但是我希望文件下载后,能够把文件删除了:用上边方式就不太合适了,不能及时删除旧文件,于是想出下面的方式: 二.文件流的方式下

前端下载excel文件功能的三种方法

1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这种方式比较适用于该数据需要能够导出下载并且同时要展现在页面的场景 2 通过form表单接收文件 如果后端已经处理成了excel,就不需要前端在处理生成,但是Ajax能够返回的数据格式只能为html,script,json,xml,不能直接接受excel文件,如果你直接通过ajax去获取文件就会报错.

angularJS通过post方法下载excel文件

最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://stackoverflow.com/questions/22447952/angularjs-http-post-convert-binary-to-excel-file-and-download ,改动了里面部分代码搞定. 详细代码: $http.post($rootScope.restful_api.last_output_excel,body_data,{responseType:

解决:下载EXCEL文件,自动用迅雷下载aspx

解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null && !string.IsNullOrEmpty(Request.QueryStr

【原创】POI 生成Excel文件并下载

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</versio

jsp下载excel文件

jsp下载excel文件的的实现方法很多,今天也遇到这个问题,乱敲了一阵,终于搞定了,记下来和朋友们分享吧. 假设需要下载excel文件的jsp页面名为:down.jsp 对应的后台action名为:downExcel.java(用struts实现,其他框架也类似) 在downExcel.java的添加downAction方法,实现下载步骤 public ActionForward downAction(ActionMapping mapping, ActionForm form,    Htt

C# 之 下载EXCEL文件,自动用迅雷下载aspx

在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null &&am

流方式下载文件

public ActionResult DownLoadAttachment(string attachmentId) { Attachment attachment = _customerInfoService.GetAttachment(attachmentId); if (attachment != null) { try { string fileName = attachment.FileName; string filePath = attachment.Path; string f

下载EXCEL文件Utils

import jxl.*; import jxl.biff.DisplayFormat; import jxl.format.Alignment; import jxl.format.BoldStyle; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.*; import jxl.format.VerticalAlignment; import jxl.write.*; import j