微信小程序云开发:使用excel-export导出excel
前言
关于小程序的excel导出,我也走过了不少坑。之前看了很多人要不使用其他云作为excel的导出工具,要不压根就只是nodejs,而不是微信小程序的云开发。因此,我写了此篇文章作为纪念和分享用excel-export在小程序导出excel的方法
excel-export
在node-excel-export上面有关于nodejs如何导出excel的简单方法,这里我主要讲几个方面:
- excel-export采用的方法是利用zip转xlsx的方法:
你可以做个实验:在电脑上新建一个"test.xlsx"然后把后缀名改成“.zip”,然后解压,我相信你会看到有趣的东西
- excel-export利用的zip加码解码的工具是:node-zip。它派生自:jszip。但是:jszip保存zip的函数是:
jszip.executeSysnc
和jszip.executeNodeStream
。分别可以将结果以不同形式保存:binary,node-stream,base64…。but,node-zip的保存zip的函数是:jszip.execute({base64:false,compression: "DEFLATE"})
,这就意味着当我尝试改变源代码的时候:比如调用原来jszip的东西,程序会告诉你:**** is not a function
- 最重要的是:下面代码里面的excelResult的格式其实是binary
const nodeExcel = require(‘excel-export’);
var excelResult = nodeExcel.execute(tableMap);
来自node-zip-npm的详细说明:
核心代码
小程序端
getExcel: function(e){
wx.cloud.callFunction({
name:'get_excel',
data:{},
success: function(res){
console.log(res.result.fileID);
}
} }
云开发的云端
安装excel-export
cd 该云函数的本地文件夹
npm install excel-export
get_excel.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
const nodeExcel = require('excel-export')
const path = require('path');
cloud.init()
// 云函数入口函数 exports.main = async (event, context) => {
var tableHead = ["发票编号", "发票代码", "开票时间", "金额"];
var tableMap = {
styleXmlFile:path.join(__dirname,"styles.xml"),
name: Date.now()+"-export",
cols: [],
rows: [],
}
//添加表头
for(var i=0;i<tableHead.length;i++){
tableMap.cols[tableMap.cols.length]={
caption:tableHead[i],
type:'string'
}
}
//伪数据
const Output = [
{发票编号:0,发票代码:'001',开票时间:'2019-5-1',金额:100},
{发票编号:1,发票代码:'002',开票时间:'2019-5-1',金额:200}
]
//添加每一行数据
for(var i=0;i<Output.length;i++){
tableMap.rows[tableMap.rows.length]=[
Output[i].发票编号,
Output[i].发票代码,
Output[i].开票时间,
Output[i].金额
]
}
//保存excelResult到相应位置
var excelResult = nodeExcel.execute(tableMap);
var filePath = "outputExcels";
var fileName = cloud.getWXContext().OPENID + "-" + Date.now()/1000 + '.xlsx';
console.log(excelResult);
//上传文件到云端
return await cloud.uploadFile({
cloudPath: path.join(filePath, fileName),
fileContent: new Buffer(excelResult,'binary')
});
} catch(e){
console.log(e);
return null;
}
}
注意把node-excel-export下载的文件里面的example文件夹下的style.xml
复制到云函数的文件夹下