zoukankan      html  css  js  c++  java
  • Excel文件导入导出(基于Nodejs、exceljs)

    Excel导入、导出是大多数项目的管理后台必备功能。几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法。

    大凡厉害的技术的文档咋一看都想字典一样,让人懵逼。exceljs这个包也貌似不易入手,但实际上,还是很简单易用的。

    导出

    // controller.js
    const workbook = new Excel.Workbook();
    const worksheet = workbook.addWorksheet();
    worksheet.columns = excelInfo.balanceFlow.columns;
    worksheet.addRows(result.rows);
    ctx.response.attachment(excelInfo.balanceFlow.filename);
    ctx.status = 200;
    await workbook.xlsx.write(ctx.res);
    ctx.res.end();

    同上文代码,引入包、创建工作簿(同创建excel文件)、创建工作页(同Excel的sheet1编辑)、写表头、写表格数据、最后输出文件流,就这么简单几步就完成了Excel文件的导出。其中,addRows()方法的传参,是传最常规的列表数据结构,形如[{},{},{}...]。

    这里简单啰嗦一下,所谓本文的Excel文件导出,实际是服务端从数据库获取数据,并用获取到的数据生成Excel文件的过程 。

    Excel表头配置文件如下:

    module.exports = {
      userList: {
        filename: '用户列表.xlsx',
        columns: [
          {header: '用户ID', key: 'id',  10},
          {header: '用户账号', key: 'username',  16},
          {header: '用户姓名', key: 'nickname',  10},
          {header: '注册日期', key: 'createdAt',  20, style: {numFmt: 'yyyy/dd/mm hh:mm:ss'}},
          {header: '启用状态', key: 'usertype',  15}
        ]
      },
    };

     使用该包遇到的最大麻烦是,前端如何接收文件数据。该包提供了三种文件数据输出方式,1.直接writeFile()生成Excel文件,由前端直接访问文件。2.write()方法生成文件数据,前端在新的标签页访问URL,会自动将相应文件下载到本地;3.writeBuffer()生成buffer,由前端通过file-saver之类的前端工具转为文件,由于Buffer数据URL传输过程中的序列化问题,没有走通该方法,如有走通的朋友,可以留言,以供大家参考。

    查资料不过是偏门,撸源码才是脱离苦海的正道。
  • 相关阅读:
    4.VS2010C++建立DLL工程
    C++-教程2-VS2010C++相关文件说明
    C++-教程1-VS2010环境设置
    Android实例-实现扫描二维码并生成二维码(XE8+小米5)
    C++-教程3-VS2010C++各种后缀说明
    Android问题-No resource found that matches the given name (at 'theme' with value '@style/CaptureTheme').
    Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”
    启动程序的同时传参给接收程序(XE8+WIN764)
    Android实例-程序切换到后台及从后台切换到前台
    Unity向量投影使用
  • 原文地址:https://www.cnblogs.com/jarvisjin/p/10062247.html
Copyright © 2011-2022 走看看