微信小程序——使用excel-export导出excel

Posted 话·醉月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序——使用excel-export导出excel相关的知识,希望对你有一定的参考价值。

背景

  • 在学习微信小程序的过程中,需要导出excel文件数据,可是却没有后台服务器,所以只能够想着使用纯前端去导出excel
  • 使用插件:excel-export

导出思想

  • 将数据封装成excel文件
  • 将excel文件上传到云存储中
  • 将云存储的excel文件以图片的格式下载到本地
  • 修改图片文件后缀为xlsx,成为excel文件

操作

  • 将数据封装成excel文件;将excel文件上传到云存储中
    • 建立云函数(我的云函数名称:uploadexportfile),打开云函数终端,安装excel-export插件
    • 开发代码
      // 云函数入口文件
      const cloud = require(\'wx-server-sdk\')
      const nodeExcel = require(\'excel-export\');
      const path = require(\'path\'); 
      cloud.init()
      
      // 云函数入口函数
      exports.main = async (event, context) => {
      
        var tableMap = {
          styleXmlFile:path.join(__dirname,"styles.xml"),
          name: Date.now()+"-export",
          cols: [],
          rows: [],
        }
        var tableHead = ["编号", "名称", "生日", "年龄"];
        //添加表头
        for(var i=0;i<tableHead.length;i++){
          tableMap.cols[tableMap.cols.length]={
            caption:tableHead[i],
            type:\'string\'
          }
        }
        //表体:伪数据
        const tableList = [
          {编号:0,名称:\'张三\',生日:\'2019-5-1\',年龄:20},
          {编号:1,名称:\'李四\',生日:\'2019-5-1\',年龄:45}
        ]
        //添加每一行数据
        for(var i=0;i<tableList.length;i++){
          tableMap.rows[tableMap.rows.length]=[
            tableList[i].编号,
            tableList[i].名称,
            tableList[i].生日,
            tableList[i].年龄
          ]
        }
      
      
        //保存excelResult到相应位置
        var excelResult = nodeExcel.execute(tableMap);
        var filePath = "outputExcels";
        var fileName = cloud.getWXContext().OPENID + "-" + Date.now()/1000 + \'.xlsx\';
        //图片上传到云存储
        return await cloud.uploadFile({
          cloudPath: path.join(filePath, fileName),
          fileContent: new Buffer(excelResult,\'binary\')
        }).then(res=>{
          console.log(res.fileID);
          return res;
        }).catch(err=>{
      
        });
      }
    • Next
  • 将云存储的excel文件以图片的格式下载到本地;修改图片文件后缀为xlsx,成为excel文件
    • 代码如下
      //导出excel
      function exportFile(dataHeader,dataList){
      
        wx.showLoading({
          title: \'正在导出\',
        });
        console.log(dataHeader);
        console.log(dataList);
        wx.cloud.callFunction({
          name:\'uploadexportfile\',
          data:{
            dataHeader:dataHeader,
            dataList:dataList
          }
        }).then(res=>{
          const fileID = res.result.fileID;
          //下载文件
          wx.cloud.downloadFile({
            fileID: fileID
          }).then(res1 => {
            
            this.saveFileToPhotosAlbum(res1);//保存文件到相册
            this.delCloudFile(fileID);//删除云存储文件
            
          }).catch(error => {
            // handle error
          })
        }).catch(err1=>{
      
        });
      }
      
      //保存文件到本地相册
      function saveFileToPhotosAlbum(res){
        //授权
        this.writePhotosAlbumAuth();
        // 保存文件
        var saveTempPath = wx.env.USER_DATA_PATH + "/exportFile"+new Date().getTime()+".jpg";
        
        wx.saveFile({
          tempFilePath: res.tempFilePath,
          filePath: saveTempPath ,
          success:res1=> {
            //获取了相册的访问权限,使用 wx.saveImageToPhotosAlbum 将图片保存到相册中
            wx.saveImageToPhotosAlbum({
              filePath: saveTempPath ,
              success: res2 => {
                //保存成功弹出提示,告知一下用户
                wx.hideLoading();
                wx.showModal({
                  title: \'文件已保存到手机相册\',
                  content: \'文件位于tencent/MicroMsg/WeiXin下 \\r\\n将保存的文件重命名改为[ .xlsx ]后缀即可正常打开\',
                  confirmColor: \'#0bc183\',
                  confirmText: \'知道了\',
                  showCancel: false
                });
              },
              fail(err2) {
                console.log(err2)
              }
            })
          }
        });
      }
      
      //删除云存储文件
      function delCloudFile(fileID){
        const fileIDs=[];
        fileIDs.push(fileID);
        //删除云存储中的excel文件
        wx.cloud.deleteFile({
          fileList: fileIDs,
          success: res4 => {
            // handle success
            console.log(res.fileList);
          },
          fail: console.error
        })
      }
      //上传单个文件
      function uploadSingleFile(cloudPath,filePath){
        wx.cloud.uploadFile({
          cloudPath: cloudPath, // 上传至云端的路径
          filePath: filePath, // 小程序临时文件路径
          success: res => {
            // 返回文件 ID
            console.log(res.fileID)
          },
          fail: console.error
        })
      }
      
      //微信图片保存到本地相册授权
      function writePhotosAlbumAuth(){
        wx.getSetting({
          success(res) {
            if (!res.authSetting[\'scope.writePhotosAlbum\']) {
              wx.authorize({
                scope:\'scope.writePhotosAlbum\',
                success() {
                  console.log(\'授权成功\')
                }
              })
            }
          }
        })
      }
      
      
      module.exports={
        uploadSingleFile:uploadSingleFile,
        exportFile:exportFile,
        saveFileToPhotosAlbum:saveFileToPhotosAlbum,
        delCloudFile:delCloudFile,
        writePhotosAlbumAuth:writePhotosAlbumAuth
      }
    • Next
  • Next

以上是关于微信小程序——使用excel-export导出excel的主要内容,如果未能解决你的问题,请参考以下文章

v2ex一个简单易懂的微信小程序练手项目

v2ex一个简单易懂的微信小程序练手项目

木疙瘩导出的H5嵌入到微信小程序

如何导入微信小程序Demo

微信小程序文件如何下载到本地?

微信小程序 Notes | 常用开发事例基于云平台导出 Excel