具体需求是,导出excel中含有图片,这些图片是从 云存储里面下载的?循环放入excel中, 当数据超过五十多条, 并且每条有两张以上图片时就会超时60秒
// 创建工作簿
const wb = new xl.Workbook();
const style = wb.createStyle(myStyle);
// 向工作簿添加一个表格
let ws = wb.addWorksheet('Sheet1');
//2,定义存储数据的
ws.cell(1, 1).string('序号').style(style); // A1
ws.cell(1, 2).string('微信昵称').style(style); // B1
ws.cell(1, 3).string('提交时间').style(style);
// 接着处理表的属性
var forms = jielong.form;
var isSetHeight = false;
for (let formIndex in forms) {
let form = forms[formIndex];
if (form.type == 2){
ws.column(parseInt(formIndex) + 4).setWidth(50);
isSetHeight = true;
}
ws.cell(1, parseInt(formIndex) + 4).string(form.title).style(style);
}
for (var i in recordList) {
i = parseInt(i);
if (isSetHeight){
ws.row(i + 2).setHeight(250);
}
const record = recordList[i];
console.log("循环中record=", i, record);
ws.cell(i + 2, 1).number(i + 1).style(style);
ws.cell(i + 2, 2).string(record.nickName).style(style);
ws.cell(i + 2, 3).string(record.day).style(style);
console.log("循环中record=", i, record);
var forms = record.values;
for (var formIndex in forms) {
var celT = 3 + 1 + parseInt(formIndex);
console.log("循环中celT=", celT);
const form = forms[formIndex];
if (form.type != 2) {
ws.cell(i + 2, celT).string(form.value).style(style);
} else {
var images = form.value;
var urlTotal;
for (let imIndex in images) {
var im = images[imIndex];
urlTotal = im.url;
console.log("图片地址:urlTotal=", urlTotal);
let res = await cloud.downloadFile({
fileID: urlTotal
})
let image = res.fileContent;
ws.addImage({
image: image,
type: 'picture',
position: {
type: 'twoCellAnchor',
from: {
col: celT,
colOff: 0,
row: i + 2,
rowOff: 0,
},
to: {
col: parseInt(celT) + 1,
colOff: 0,
row: i + 3,
rowOff: 0,
},
},
});
}
}
}
}
可以访问 https://cloud.tencent.com/
通过微信扫描小程序公众号授权方式选择指定小程序登陆,然后找到cloudbase中的微信小程序对应的云开发环境,然后设置云函数的超时时间,最大可设置成900秒。
这里建议改成:Promise.all
Promise.all(arr)
.then(res => {
console.log("resall=", res);
// 循环把图片放进excel
for (let resIndex in res) {
let imageData = res[resIndex];
console.log("imageData=", imageData);
ws.addImage({// 这里不会执行
image: imageData.fileContent,
type: 'picture',
position: {
type: 'twoCellAnchor',
from: {
col: imageData.fromCol,
colOff: 0,
row: imageData.fromRow,
rowOff: 0,
},
to: {
col: imageData.toCol,
colOff: 0,
row: imageData.toRow,
rowOff: 0,
},
},
});
console.log("里面执行完了")
}
ws.cell(2, 7).string("imageData.toCol3").style(style);// 这里不会执行
console.log("外面执行完了")
})
.catch(err => {
console.log("导出报错了", err);
});
大佬,用了Promise.all 但是导出的这个插件方法不会执行,但是别的代码会执行,是什么原因呢?