当前位置:   article > 正文

uniapp开发小程序excel导出(亲测可用,前后端代码都有)_uniapp 使用node-xlsx

uniapp 使用node-xlsx

uniapp开发小程序excel导出(亲测可用,前后端代码都有)

在微信开发者工具和小程序端都可以打开excel,需要前后端(node.js)一起配合完成。

前端接受后端传回的二进制流格式文件,如下

在这里插入图片描述

1.前端在button按钮的事件中写入请求

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)
				                 }
				               })
				             }
				           });
				         }
				       }
				     })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
2.后端node.js编辑xlsx表内容格式

2.1 先下载依赖包,引入schema和增删改查的文件。

2.2 下面是用来计算持续时间的,在下方有示例。

2.3 在数据库表中查出数据以后在编辑成数组套数组的格式,然后用xlsx.build()即可生成二进制流文件形式的xlsx表。

const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
  • 1
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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
      status: 417
            }
        })
    }
});

// console.log("1221")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

})

module.exports = router;




大概就这些了,若有什么不懂得可以交流。
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/264074
推荐阅读
相关标签
  

闽ICP备14008679号