赞
踩
前端接受后端传回的二进制流格式文件,如下
1.1 notice:下面url的域名我用百度代替了,需要传入你自己的域名,这个域名需要在你自己的小程序中 左边找 开发---->开发管理----->服务器域名配置,添加你要使用的服务器url。
1.2filepath为配置的xlsx表名,例如xx人xx项目 开始时间—结束时间.xlsx
wx.request({ url:`https://baidu.com:3006/api/pop_center/export_excel?start=${obj.start_time}&&end=${obj.end_time} &&project_id=${obj.project_id}&&by_issue_id=${obj.by_issue_id}`, method: "GET", responseType: "arraybuffer", //此处是请求文件流,必须带入的属性 success: rest => { console.log(rest) if(rest.statusCode === 200){ const fs = wx.getFileSystemManager(); //获取全局唯一的文件管理器 fs.writeFile({ // 写文件 filePath: wx.env.USER_DATA_PATH + `/${item_only}-${person_only}${obj.start_time}——${obj.end_time}.xlsx`, // wx.env.USER_DATA_PATH 指定临时文件存入的路径,后面字符串自定义 data: rest.data, encoding: "binary", //二进制流文件必须是 binary success (res){ wx.openDocument({ // 新开页面打开文档 filePath: wx.env.USER_DATA_PATH + `/${obj.start_time}——${obj.end_time}.xlsx`, //拿上面存入的文件路径 success: function (res) { setTimeout(()=>{wx.hideLoading()},500) } }) } }); } } })
2.1 先下载依赖包,引入schema和增删改查的文件。
2.2 下面是用来计算持续时间的,在下方有示例。
2.3 在数据库表中查出数据以后在编辑成数组套数组的格式,然后用xlsx.build()即可生成二进制流文件形式的xlsx表。
const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
var express = require('express'); var router = express.Router(); var xlsx = require('node-xlsx'); var fs = require('fs'); var Task_listSchema = require('../../../model/Task_listSchema'); var sql = require("../../../model/index") stream = require('stream') const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000) /* GET home page. */ router.get('/', function (req, res) { // console.log(req.query) Task_listSchema.find({ project_id: req.query.project_id, by_issue_id: req.query.by_issue_id, "start": { "$gte": req.query.start, "$lte": req.query.end } }, function (err, docs) { if (docs.length != 0) { let array1 = []; let newarr = []; let itemarr = ["项目名称", "发起人", "接收人", "时长", "状态", "任务详情", "任务开始时间", "任务结束时间"]//状态,接收人by_issue_name,时长last_time,发起人issue_name for (let j = 0; j < docs.length; j++) { array1[0] = docs[j].project_name array1[1] = docs[j].issue_name array1[2] = docs[j].by_issue_name // 计算2个日期之间相差多少天 if(dayDif(new Date(docs[j].start), new Date(docs[j].end)) == 0){ array1[3] = "1天" }else{ array1[3] = dayDif(new Date(docs[j].start), new Date(docs[j].end))+"天" } if(docs[j].state == -1){ array1[4] = "未确认" }else if(docs[j].state == 0){ array1[4] = "已确认" }else if(docs[j].state == 1){ array1[4] = "已完成" }else if(docs[j].state == 2){ array1[4] = "未完成" }else if(docs[j].state == 3){ array1[4] = "已反馈" } // array1[4] = docs[j].state array1[5] = docs[j].task_details array1[6] = docs[j].start array1[7] = docs[j].end newarr.push(array1) array1 = [] } var list = [{ name: docs[0].project_name, data: [ itemarr, ...newarr ] }]; var buffer = xlsx.build(list); res.set('Content-Type', 'application/octet-stream;charset=utf-8;'); res.set("Content-Disposition", `attachment;filename=${encodeURIComponent('结果呢')}.xlsx`); let readStream = new stream.PassThrough(); readStream.end(buffer); readStream.pipe(res); return; } else { res.json({ data: [], meta: { msg: "目前没有任务。", status: 417 } }) } }); // console.log("1221") }) module.exports = router;
status: 417
}
})
}
});
// console.log("1221")
})
module.exports = router;
大概就这些了,若有什么不懂得可以交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。