NodeJS生成Excel

比特启航
• 阅读 6114

  本来只是想写个NodeJS爬虫,中间涉及到一点Excel。找了找Excel模块,xlsx模块在npm官网上搜索排名很靠前,就选了它,star数还比较可观。仔细了解了xlsx模块才发现这玩意生成Excel文件实在太麻烦,搜索网上的博客,那些人都是互相抄袭,代码也不够优雅。得了,还是我自己造轮子吧。
  注释很详细,直接上代码:

    const XLSX = require('xlsx');
    
    class WorkBook {
        /**
         * @param {Object} data Excel表格源数据,格式如下:
         * {
         *      Sheet1: [
         *          ['姓名', '学号', '籍贯'],
         *          ['lxz', '10131911', 'hunan']
         *      ]
         * }
         */
        constructor(srcData) {
            this.srcData = srcData;
            this.workbook = {};
            this.workbook.SheetNames = [];
            this.workbook.Sheets = {};
    
            for(let item in srcData) {
                this.workbook.SheetNames.push(item);
                this.addSheet(item, srcData[item]);
            }
        }
    
        /**
         * 往Excel文件添加一个表格
         * @param {string} sheetName 表格名
         * @param {object} sheet 表格数据
         * @returns void
         */
        addSheet(sheetName, sheet) {
            this.workbook['Sheets'][sheetName] = {};
            let row = sheet.length;
            let col = sheet[0].length;
            let to = '';
    
            for(let i=0; i<row; i++) {
                for(let j=0; j<col; j++) {
                    let key = this.ten2twentysix(j+1) + (i+1);
                    this.workbook['Sheets'][sheetName][key] = {'v': sheet[i][j]};
                    to = key;
                }
            }
            this.workbook['Sheets'][sheetName]['!ref'] = 'A1:' + to;
        }
    
    
        /**
         * 10进制转26进制
         * @param {number} num 正整数
         * @returns string
         */
        ten2twentysix(num) {
            let str = '';
            while(num) {
                let rest = num % 26;
                num = (num-rest) / 26;
                str += String.fromCharCode(rest + 64);
            }
    
            let twentysixNumber = '';
            let len = str.length;
            for(let i=len-1; i>=0; i--) {
                twentysixNumber += str[i];
            }
    
            return twentysixNumber;
        }
    
        /**
         * 将数据写入Excel
         * @param {string} filename 文件路径
         */
        writeFile(filename) {
            XLSX.writeFile(this.workbook, filename);
        }
    }
    
    module.exports = WorkBook;
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
java实现 Excel 导入导出
日常工作中,Excel是我们经常需要处理的文件,报表的生成,数据的导出,几乎每个项目都需要写对应的处理.作者也是编写这块代码大军的一员,能否有方法让我们不用重复编写代码呢,能否只要简单配置就可以完成我们的Excel生成呢,作者分析了Excel和对象的关系,发现Row就是我们的一个对象cell是我们的一个属性,从而开发了Easypoi,下面讲解下用
Karen110 Karen110
4年前
Python办公自动化|批量提取Excel数据
大家好,又到了Python办公自动化系列。今天我们来讲解一个比较简单的案例,使用openpyxl从Excel中提取指定的数据并生成新的文件,之后进一步批量自动化实现这个功能,通过本例可以学到的知识点:openpyxl模块的运用glob模块建立批处理数据源:阿里云天池的电商婴儿数据(可自行搜索并下载,如果要完成进阶难度可直接将该
Stella981 Stella981
4年前
ABAP学习(16):ABAP2XLSX,操作excel
ABAP2XLSX   ABAP2XLS是一个操作EXCEL的开源项目,相比较OLE2和DOI方式操作excel更加方便。   ABAP中搜索ZDEMO\_EXCEL\搜索Program可以查看SAP提供的示例程序,实现多种Excel。1.创建excel   Excel类:zcl\_excel类
Stella981 Stella981
4年前
Excel依然是一款强大的数据可视化利器~
早期的数据小魔方用户大概都知道,我最初也是从学习Excel起步的,只是学习的深入了之后,才开开慢慢的迁移到R语言。我往R语言转型并不代表自己开始放弃Excel或者觉得Excel不适合做可视化,只是想体验一下Excel外围的可视化世界是什么样子的,毕竟在这个大行业内,还活跃着太多可视化领域的佼佼者,譬如PowerBI、Tableau等。
Stella981 Stella981
4年前
Python 操作excel
python操作excel使用xlrd、xlwt和xlutils模块。xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的一、python 读取excelimportxlrdbookxlrd.open_workbook('all_stu.xls')打开一个excelsheetb
Wesley13 Wesley13
4年前
Java如何准确判断是Excel文件
这两天逛guthub,看到一个Java操作Excel文件的项目,突然想到我们公司的WEB应用,也经常会涉及到Excel的操作,比如说很常用的Excel文件导入。那么我们是如何判断出,上传的文件确实是Excel文件呢?我翻阅了一下我们系统里面的代码,常见的写法如下:!(https://oscimg.oschina.net/osc
Stella981 Stella981
4年前
Python操作Excel
前言:Python操作Excel使用openpyxl模块,python中有好几个与excel相关操作的模块。xlrd库:从excel中读取数据,支持xls、xlsx格式。xlwt库:对excel进行修改操作,不支持对xlsx格式的修改。xlutils库:在xlrd和xlwd中对一个已存在的文件进行修改。openpyxl库:
Wesley13 Wesley13
4年前
Java 复杂excel报表导出
MyExcel,是一个可直接使用Html文件,或者使用内置的Freemarker、Groovy、Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。Github:https:/
Stella981 Stella981
4年前
EasyExcel写入百万级数据到多sheet
EasyExcel是什么?快速、简单避免OOM的java处理Excel工具一、项目需求    从mongo库中查询数据,导出到excel文件中。但是动态导出的excel有多少列、列名是什么、有多少sheet页都需要动态获取。所以生成的excel也必须是动态生成,不能通过注解配置对象映射。而且写入的数据量,有可能达到100W级,使用传统的PO
Stella981 Stella981
4年前
Echarts 数据视图 生成Excel的方法
一、生成Excel,两大方向:1后台生成Excel  查询数据库,使用NOPI生成Excel。2前台js生成Excel三种方式1)jquery.table2excel.js\采用,优势:兼容IE和Chrome。2)handsontable0.32.0问题:不兼容IE。3)手写js有兼容性问题。问题:浏览器兼容
上海张律师 上海张律师
8个月前
如何导出Excel文件 -- excel_hm介绍 ##三方SDK##
前阵子在和朋友讨论,记账类的app已经那么普遍了,如果想要做点不一样的还能加什么功能。从我自己的角度出发,我觉得完全可以加一个导出Excel嘛。但是目前原生鸿蒙并没有导出Excel的方法,常规的做法是通过服务器端生成Excel文件后,再下载到本地……服务器