微信小程序云开发导出数据到excel,支持自动列宽,内容居中,很详细
很早以前做过小程序导出excel功能,那时候在网上找的资料做的比较简单,是用node-xlsx写的,
最近又要做一个导出功能,在网上找了一圈也基本都是node-xlsx做的,而且都是简单的demo,不支持居中和自动列宽,所以我找了大量资料找到了这个exceljs,还比较好用的,废话不多说,下面是我写的一个demo,注释写的比较详细,可以直接复制使用,我把步骤写下来,供大家学习使用:
-
找到云函数目录,鼠标右键创建新的nodejs函数,我这里就建一个函数名叫export
-
在export文件夹上右击,打开终端
-
安装exceljs依赖
npm install exceljs
安装好之后export文件夹下面就会多出两个文件
-
然后我们就可以在index.js中编写云函数代码了
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境
const excel = require('exceljs');
// 云函数入口函数
exports.main = async (event, context) => {
// 创建一个表格
const workbook = new excel.Workbook();
// 创建一个sheet
const worksheet = workbook.addWorksheet('Sheet 1');
// 假设data是一个二维数组是我们要导出去的数据,代表表格数据 row 是每一行数据
// 这里我们伪造假数据 你们到时候可以从前端传进来
var data = [
["姓名", "微信号", "年龄"],
["小熊熊1", "hyx1416120335", "18"],
["小熊熊2", "hyx1416120335", "25"]
];
data.forEach((row, rowIndex) => {
row.forEach((value, colIndex) => {
// 设置单元格的值
worksheet.getCell(rowIndex + 1, colIndex + 1).value = value;
// 假设你想让所有内容都居中,并且设置自动列宽(这可能需要一些自定义逻辑)
worksheet.getColumn(colIndex + 1).alignment = {
horizontal: 'center',
vertical: 'middle'
};
// 注意:exceljs没有直接的“自动列宽”功能,但你可以根据内容长度来动态设置列宽 如果没有达到你们的效果,可以尝试调一下5这个数值
worksheet.getColumn(colIndex + 1).width = Math.min(20, value.toString().length * 5);
});
});
// 将工作簿写入文件 返回buffer流
const buffer = await workbook.xlsx.writeBuffer();
// 把excel文件保存到云存储里 并将下载链接返回到前端
var fileName = "test.xlsx";
let res = await cloud.uploadFile({
cloudPath: 'exportExcel/' + fileName,
fileContent: buffer, //excel二进制文件
})
if (!res.fileID) {
return '上传失败'
} else {
// 获取临时链接路径
let res2 = await cloud.getTempFileURL({
fileList: [res.fileID],
})
if (!res2.fileList.length) {
return '获取下载地址失败'
} else {
let fileUrl = res2.fileList[0].tempFileURL
console.log('文件下载链接' + fileUrl);
return fileUrl
}
}
}
- 然后右击上传云函数
- 云函数上传完成后,就可以在前端调用了
目录结构
wxml代码
<button bind:tap="export">导出到excel</button>
js代码
Page({
/**
* 页面的初始数据
*/
data: {
},
export () {
wx.cloud.callFunction({
name: 'export',
data: {}, // 可以将参数传入到云函数中
success: res => {
console.log(res);
var downUrl = res.result;
// 这个就是downUrl下载链接了
},
fail: err => {
console.log(err);
}
})
}
})
完毕!!!
PS:本人本职是java工程师,业余学习小程序5年,如有不足,请予以指正