小程序端导出Excel文件实现方法:使用exceljs库与云端nodejs依赖解决方案

2025-04-18
来源:网络整理

参考链接:

我参考了这篇文章,可以实现静态出口。如果有更多需求,我可以在此基础上进行扩展。

代码链接

前言

我们团队的迷你计划开发使用 作为后端( , ,BMOB 等,不需要后端开发接口,但只需要使用后端云API来在云上操作数据库),并且已经接收了一个需要在Mini程序上导出文件的项目。

开发后端时导出是一个非常简单的接口,但是在云背景中,不需要现成的API和第三方库。但是,云功能依赖的云不能直接引入第三方库,因此问题如下:

1。使用库函数生成

2。库的引入需要安装相关依赖项(NPM)

3。安装相关的依赖项,该依赖关系不能直接写在任何云产品的背景中(编写本地代码)

4。在本地编写后,使用命令行工具将代码软件包和相关依赖项上传到背景

云的开发或云背景中的其他云功能都是使用云开发开发的。

想法

1。迷你程序调用云功能(生成的云功能)并传递参数

2。云功能接收参数,生成文件,将其上传到云背景并返回文件的URL

3。下载需要通过下载文件API在中导出的文件

发展步骤

1。安装node.js

在线有很多教程,百度

2。迷你计划写作

3。遵循注册指南以完成操作,链接

4。安装NPM工具

npm install -g mincloud

5。创建一个工作目录(任何地方都可以)

输入工作目录(我在桌面上构建了一个文件夹)

cd C:\Users\Administrator\Desktop\ifanrFunc

6。本地登录到后端

mincloud login d2****************83 6a************************************22

请前往控制台查看和;如果登录失败,请检查更改是否已更改。

7。创建云功能

mincloud new exportExcle cd exportExcle

可以看出,创建云功能是创建文件夹。目前,文件主页中只有一个.js文件夹。

8。初始化和生成.json文件(如果此步骤是错误的,则需要为此文件夹设置写入权限,并且可以在上对其进行操作以进行自己的特定操作)

npm init

输入命令出现,只需按一直按。

成功后,显示了下图:

9。在步骤7中创建的文件夹中,创建一个新的SRC文件夹以存储源代码(步骤13.JS)。

接下来,您将使用.js在SRC中包装代码并将其保存到目录。

包装可以理解为汇编,用支持的功能代替第三方库的功能

10。在目录中创建一个新的..Js文件(首先,内容为12个步骤)。

11。安装

npm install -D webpack webpack-cli

安装过程:

安装完成:

12。修改..Js和.json配置

.. JS

module.exports = { output: { path: __dirname, filename: 'index.js', library: 'exports.main', libraryTarget: 'assign', }, target: 'node', }

.json

"scripts": {

智能小程序开发_小程序云开发入门到实践_知晓云小程序开发

"build": "webpack --mode production", "deploy": "mincloud deploy xxxxx ../" },

13。创建一个文件

在目录中的SRC文件夹中创建.js文件

.js下的src是工作目录,它是您编写自己的代码的地方

下面的.js将被替换,并存储编译的代码(替换您使用的库功能),并将文件直接上传到云中。

在参考博客中发布代码,可以运行(您的眼睛确认~~~)

var Excel = require('exceljs'); module.exports = function (event, callback) { //cell style var fills = { solid: {type: "pattern", pattern:"solid", fgColor:{argb:"FFFFAAAA"}} }; //create a workbook var workbook = new Excel.Workbook(); //add header var ws1 = workbook.addWorksheet("测试一"); ws1.addRow(["地址","地面"]); ws1.addRow(["总人口", "不可计数"]); ws1.addRow(["类型", "动物", "非动物"]); ws1.addRow(["统计日期", "1111-11-11 11:11:11"]); ws1.addRow(); //A6:E6 ws1.addRow(["你", "在", "说些", "神马", "呢?"]); ws1.getCell("A6").fill = fills.solid; ws1.getCell("B6").fill = fills.solid; ws1.getCell("C6").fill = fills.solid; ws1.getCell("D6").fill = fills.solid; ws1.getCell("E6").fill = fills.solid; //7 - 13(A7:A13) - 7 ws1.addRow(["什么跟神马", 10, 1, "凡人修仙传", 7]); ws1.addRow(["","","","一号遗迹", 2]); ws1.addRow(["","","","六号遗迹", 0]); ws1.addRow(["","","","古国一号", 0]); ws1.addRow(["","","","锻体期", 0]); ws1.addRow(["","","","合体期", 0]); ws1.addRow(["","","","没资质", 1]); ws1.mergeCells("A7:A13") ws1.mergeCells("B7:B13") ws1.mergeCells("C7:C13") //a6-e13 a b c d e //ws1.getCell('A7').alignment = { vertical: 'middle', horizontal: 'center' }; rowCenter(ws1, 6, 13);  colWidth(ws1, [1,2,3,4,5], 20); var ws2 = workbook.addWorksheet("测试二"); var ws3 = workbook.addWorksheet("测试三"); //设置 start-end 行单元格水平垂直居中/添加边框 function rowCenter(arg_ws, arg_start, arg_end) { for(i = arg_start; i <= arg_end; i++) { arg_ws.findRow(i).alignment = { vertical: 'middle', horizontal: 'center' }; //循环 row 中的 cell,给每个 cell添加边框 arg_ws.findRow(i).eachCell(function (cell, index) { cell.border = { top: {style:'thin'}, left: {style:'thin'}, bottom: {style:'thin'}, right: {style:'thin'} }; }) } } //设置 start-end 列的宽度 function colWidth(arg_ws, arg_cols, arg_width) { for(i in arg_cols) { arg_ws.getColumn(arg_cols[i]).width = arg_width; } } workbook.xlsx.writeFile('/var/log/test2.xlsx') .then(function(){ //生成excle文件后,通过知晓云api上传到知晓云 let MyFile = new BaaS.File() MyFile.upload('/var/log/test2.xlsx').then(function(a, b, c) { console.log(a,b,c); console.log('生成 xlsx'); callback(null, "生成 xlsx") }) }); }

14。安装

npm install exceljs

安装成功后,您可以看到.json中还有其他依赖关系

15。包装

npm run build

这是汇编和替换过程

16。部署

npm run deploy

部署有点耗时,耐心等待

17。测试云功能

18。使用小程序下载文件

wx.downloadFile({ url: 'https://cloud-minapp-24278.cloud.ifanrusercontent.com/1gt1FlTKm39G6dug.xlsx', // 仅为示例,并非真实的资源 success(res) { // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容 if (res.statusCode === 200) { // res.tempFilePath } } })

下面是我第一次玩操作过程的屏幕截图:您可以自己参考

分享