需求
作为信息收集者需要把用户填写的内容,用Ecxcl表格的方式导出。可以支持在线查看或者复制文件下载链接。
- 查看 excle 表格可以直接在手机上查看表格
- 复制下载地址可以通过链接在电脑上下载
实现
以收集姓名信息为例:
云函数代码
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
//操作excel用的类库
const xlsx = require('node-xlsx');
// 云函数入口函数
exports.main = async (event, context) => {
try {
let {
dataList,
excelName
} = event
// 1. 定义excel表格名
let dataCVS = 'test.xlsx'
// 2. 定义存储数据的
let alldata = [];
// 3. 定义表头
let row = ['姓名'];
alldata.push(row);
// 4. 循环取出姓名数据
for (let key in dataList) {
let arr = [];
arr.push(applyList[key].name);
alldata.push(arr)
}
//5. 把数据保存到excel里
var buffer = await xlsx.build([{
name: "mySheetName",
data: alldata
}]);
//6. 把excel文件保存到云存储里
return await cloud.uploadFile({
cloudPath: excelName + ".xlsx",
fileContent: buffer,
})
} catch (e) {
console.error(e)
return e
}
}
注意上传部署云函数的时候需要先安装node-xlsx
安装步骤:
- 打开命令行
- 输入安装命令:
npm install node-xlsx --save
小程序调用代码
- 通用调用云函数生成表格代码部分
createExcel(type) {
// 提示加载中
wx.showLoading({
title: '正在加载中...',
})
console.log('请求获取')
let data = {
dataList: 姓名数据集合,
excelName: 文件名
}
// 生成excel并存储
wx.cloud.callFunction({
name: 'excel',
data: data
}).then(res => {
// 获取存储文件ID
this.getFileUrl(res.result.fileID,type)
})
}
- 根据不同的type来实现不同的功能
2.1 type为0时查看excel
2.2 type为1时复制地址
getFileUrl(fileID, type) {
let that = this;
wx.cloud.getTempFileURL({
fileList: [fileID],
success: res => {
// get temp file URL
that.setData({
fileUrl: res.fileList[0].tempFileURL
})
// 下载文件并且打开文档
if (type == 0) {
wx.downloadFile({
url: res.fileList[0].tempFileURL,
success: function (res) {
const filePath = res.tempFilePath
wx.openDocument({
filePath: filePath
})
}
})
} else if (type == 1) {
// 复制地址
wx.setClipboardData({
data: res.fileList[0].tempFileURL
})
}
}
})
},
扩展阅读
以上涉及到的API文档地址:
node-xlsx
wx.setClipboardData
wx.uploadFile
wx.downloadFile
wx.openDocument
大佬,如果要把云存储的图片也放入excel一起导出呢?怎么实现呢
const cloud = require('wx-server-sdk')
const xl = require('excel4node')
cloud.init()
exports.main = async (event) => {
// create a new instance of a Workbook class
const wb = new xl.Workbook()
// cdd Worksheets to the workbook
const ws = wb.addWorksheet('列表')
let res = await cloud.downloadFile({
fileID: '图片路径'
})
let image = res.fileContent
ws.addImage({
image: image,
type: 'picture',
position: {
type: 'absoluteAnchor',
x: '1in',
y: '2in',
},
})
const buffer = await wb.writeToBuffer()
const resFile = await cloud.uploadFile({
cloudPath: "imgs/test.xlsx",
fileContent: buffer
})
return resFile
}