微信小程序通过知晓云云函数导出excle(无须后台开发)

前言

前阶段用后端云(知晓云 bmob云之类,不需要后台开发接口只需要用后端云api操作云上的数据库)接到了个需求,就是导出excle文件。
导出excle在有后端开发的时候是很简单的一个接口,但是在使用后端云的时候就麻烦了,没有现成的api方法。
因此研究了下云函数,使用nodejs开发。
大概思路是:

  1. 前端发送需要导出excle的数组
  2. 云函数接口参数,并生成excle文件,上传到后端云,返回excle文件的url
  3. 在小程序通过下载文件api下载需要导出的excle文件
    git地址

知晓云介绍

知晓云是个好用、顺手的小程序开发工具。它免去了小程序开发中服务器搭建、域名备案、数据接口实现等繁琐流程。让您专注于业务逻辑的实现,使用知晓云开发小程序,门槛更低,效率更高。

知晓云官网注册地址

开发步骤

前期准备
  1. nodejs

  2. 小程序

  3. 知晓云账号,绑定小程序 balabala的 注册后按照提示操作即可

  4. 安装命令行工具

    npm install -g mincloud
    
  5. 进入工作目录(自己创建一个目录即可)

     cd /Users/ifanr/demo
    
  6. 登录

    mincloud login d2****************83 6a************************************22
    

    请到 知晓云控制台 查看 client_id 和 client_secret;如果登录失败,请检查 client_id 和 client_secret 是否已经改变。

  7. 创建云函数

    mincloud new exportExcle
    cd exportExcle
    
  8. 初始化 package,生成 package.json 文件

    npm init
    
  9. 在第七步创建的目录exportExcle,新建 src 文件夹,用来存放源码(第13步的index.js)。 接下来会使用 webpack 将 src 里的代码,打包并保存到 exportExcle 目录下的 index.js

  10. 在exportExcle目录新建 webpack.config.js 文件(先放空,内容在12步)。

  11. 安装 webpack

    npm install -D webpack webpack-cli
    
  12. 修改webpack.config.js和package.json script 配置

    module.exports = {
      output: {
        path: __dirname,
        filename: 'index.js',
        library: 'exports.main',
        libraryTarget: 'assign',
      },
      target: 'node',
    }
    
      "scripts": {
        "build": "webpack --mode production",
        "deploy": "mincloud deploy xxxxx ../"
      },
    
  13. 创建文件src/index.js

    var Excel = require('exceljs');
    module.exports = function (event, callback) {
    	
    
    //cell style
    var fills = {
        solid: {type: "pattern", pattern:"solid", fgColor:{argb:"FFFFAAAA"}}
    };
    //create a workbook
    var workbook = new Excel.Workbook();
    
    //add header
    var ws1 = workbook.addWorksheet("测试一");
    ws1.addRow(["地址","地面"]);
    ws1.addRow(["总人口", "不可计数"]);
    ws1.addRow(["类型", "动物", "非动物"]);
    ws1.addRow(["统计日期", "1111-11-11 11:11:11"]);
    ws1.addRow();
    
    //A6:E6
    ws1.addRow(["你", "在", "说些", "神马", "呢?"]);
    ws1.getCell("A6").fill = fills.solid;
    ws1.getCell("B6").fill = fills.solid;
    ws1.getCell("C6").fill = fills.solid;
    ws1.getCell("D6").fill = fills.solid;
    ws1.getCell("E6").fill = fills.solid;
    
    //7 - 13(A7:A13) - 7
    ws1.addRow(["什么跟神马", 10, 1, "凡人修仙传", 7]);
    ws1.addRow(["","","","一号遗迹", 2]);
    ws1.addRow(["","","","六号遗迹", 0]);
    ws1.addRow(["","","","古国一号", 0]);
    ws1.addRow(["","","","锻体期", 0]);
    ws1.addRow(["","","","合体期", 0]);
    ws1.addRow(["","","","没资质", 1]);
    
    
    ws1.mergeCells("A7:A13")
    ws1.mergeCells("B7:B13")
    ws1.mergeCells("C7:C13")
    
    //a6-e13 a b c d e
    //ws1.getCell('A7').alignment = { vertical: 'middle', horizontal: 'center' };
    
    rowCenter(ws1, 6, 13); 
    colWidth(ws1, [1,2,3,4,5], 20);
    
    var ws2 = workbook.addWorksheet("测试二");
    
    
    var ws3 = workbook.addWorksheet("测试三");
    
    //设置 start-end 行单元格水平垂直居中/添加边框
    function rowCenter(arg_ws, arg_start, arg_end) {
        for(i = arg_start; i <= arg_end; i++) {
            arg_ws.findRow(i).alignment = { vertical: 'middle', horizontal: 'center' };
            //循环 row 中的 cell,给每个 cell添加边框
            arg_ws.findRow(i).eachCell(function (cell, index) {
                cell.border = {
                    top: {style:'thin'},
                    left: {style:'thin'},
                    bottom: {style:'thin'},
                    right: {style:'thin'}
                };
            })
    
        }
    }
    
    //设置 start-end 列的宽度
    function colWidth(arg_ws, arg_cols, arg_width) {
        for(i in arg_cols) {
            arg_ws.getColumn(arg_cols[i]).width = arg_width;
        }
    }
    
    workbook.xlsx.writeFile('/var/log/test2.xlsx')
        .then(function(){
        	//生成excle文件后,通过知晓云api上传到知晓云
    		let MyFile = new BaaS.File()
    		MyFile.upload('/var/log/test2.xlsx').then(function(a, b, c) {
    			console.log(a,b,c);
    			console.log('生成 xlsx');
    			callback(null, "生成 xlsx")
    		})
        });
    }
    
    
  14. 安装exceljs

    npm install exceljs
    
  15. 打包
    在项目根目录下执行npm run build,即可启动 webpack 进行代码打包。

    npm run build
    
  16. 部署
    在项目根目录下运行:

    npm run deploy
    
  17. 回到上级目录,并部署到云函数

    cd ..
    mincloud deploy exportExcle
    
  18. 测试云函数
    测试云函数图例
    测试结果1
    测试结果2

    https://cloud-minapp-24278.cloud.ifanrusercontent.com/1gt1FlTKm39G6dug.xlsx
    
  19. 使用小程序下载excle文件

    wx.downloadFile({
      url: 'https://cloud-minapp-24278.cloud.ifanrusercontent.com/1gt1FlTKm39G6dug.xlsx', // 仅为示例,并非真实的资源
      success(res) {
        // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
        if (res.statusCode === 200) {
          // res.tempFilePath 
        }
      }
    })
    
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值