想要导出大量数据就得从腾讯云登录你得小程序云开发 CloudBase可以修改900秒得超时时间,也就是可以执行15分钟;这次导出1000个SKU用了10分钟;
执行了10分钟,导出了24m的文件
不多说,熬了俩个通宵,以及各位大佬的指点总结出来的 直接上源码
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
// API 调用都保持和云函数当前所在环境一致
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
//exceljs 安装:npm i exceljs
const ExcelJS = require('exceljs');
//引入superagent 安装 :npm i superagent
const superagent = require('superagent');
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
//查询要生成表格的数据 集合名记得改
const dataList = await db.collection("user").where({
jsxj:true //自己改改
//突破100条数据限制
}).limit(1000).get()
//获取查询到的数据
const data = dataList.data
//新建一个工作簿
const workbook = new ExcelJS.Workbook();
//创建一个工作表
const worksheet = workbook.addWorksheet('Sheet 1');
//设置第一行的行高
worksheet.properties.defaultRowHeight = 152.1;
//设置第一行的列宽
worksheet.properties.defaultColWidth = 24.95;
//设置第一行的文字垂直居中
worksheet.getRow(1).alignment = {
vertical: 'middle',
horizontal: 'center'
};
//设置第一行的文字大小加粗
worksheet.getRow(1).font = {size: 16, bold: true};
//创建表头信息
worksheet.columns = [{header:'图片',key:'id'},{header:'产品标题',key:'url'}];
//循环往工作表里加数据
for (let rowIndex in data) {
const rowcontent = []
//获取图片链接
var urls = encodeURI(data[rowIndex].cpimg[0]+'/sf200')
//获取urls的图片链接转化成Base64
const img2Base64 = await new Promise(async function (resolve, reject) {
const url = urls;
await superagent.get(url).buffer(true).parse((res) => {
let buffer = [];
res.on('data', (chunk) => {
buffer.push(chunk);
});
res.on('end', () => {
const data = Buffer.concat(buffer);
const base64Img = data.toString('base64');
resolve('data:image/png;base64,'+base64Img)
}
);
});
})
//把img2Base64的数据生成imageId2,并添加图片到工作表
const imageId2 = workbook.addImage({
base64: img2Base64,
extension: 'png',
});
//获取imageId2,修改上面工作表里的图片大小位置
worksheet.addImage(imageId2, {
tl: { col: 0, row: rowIndex-1+2},
ext: { width:200, height:200 },
editAs: 'undefined'
});
//因为第一行是图片,所以这里传一个第一行的空值
rowcontent.push("")
rowcontent.push(data[rowIndex].cpname)
//更新表格
worksheet.addRow(rowcontent);
}
//生成表格
const buffer = await workbook.xlsx.writeBuffer();
//上传到云存储
return await cloud.uploadFile({
cloudPath: 'nhb/' + Date.now() + '.xlsx',
fileContent: buffer,
})
}
来自踩了天坑的小白分享
把这段代码放到循环里
//设置所有导出的数据文字居中 worksheet.getRow(rowIndex-1+3).alignment = { vertical: 'middle', horizontal: 'center' };
您已经是大佬了