node.js使用xlsx实现Excel生成及读取

2023-11-07

xlsx工具npm地址:https://www.npmjs.com/package/xlsx

生成excel(导出)
将数据导出成excel方法,下面介绍两种方式,一种是将数组数据导出成excel,一种是将json数据导出成excel,都非常简单

import XLSX from 'xlsx';

let arrayData = [
  ['name', 'age'],
  ['zhangsan', 20],
  ['lisi', 21],
  ['wangwu', 22],
  ['zhaoliu', 23],
  ['sunqi', 24],
];

let jsonData = [{
  name: "zhangsan1",
  age: 30
}, {
  name: "lisi1",
  age: 31
}, {
  name: "wangwu1",
  age: 32
}, {
  name: "zhaoliu1",
  age: 33
}, {
  name: "sunqi1",
  age: 34,
  length: "hello"
}];

// 将数据转成workSheet
let jsonWorkSheet = XLSX.utils.json_to_sheet(jsonData);
// console.log(arrayWorkSheet);
// console.log(jsonWorkSheet);
// 构造workBook
let workBook = {
  SheetNames: ['jsonWorkSheet'],
  Sheets: {
    'jsonWorkSheet': jsonWorkSheet,
  }
};
// 将workBook写入文件
xlsx.writeFile(workBook, "./aa.xlsx");

生成的文件长下面这个样
在这里插入图片描述

读取excel(导入)
读取就比生成excel要麻烦些了,具体代码如下

const xlsx = require('xlsx');

let workbook = xlsx.readFile('./aa.xlsx');
let sheetNames = workbook.SheetNames;
// 获取第一个workSheet
let sheet1 = workbook.Sheets[sheetNames[0]];
// console.log(sheet1);

let range = xlsx.utils.decode_range(sheet1['!ref']);

//循环获取单元格值
for (let R = range.s.r; R <= range.e.r; ++R) {
  let row_value = '';
  for (let C = range.s.c; C <= range.e.c; ++C) {
    let cell_address = {c: C, r: R}; //获取单元格地址
    let cell = xlsx.utils.encode_cell(cell_address); //根据单元格地址获取单元格
    //获取单元格值
    if (sheet1[cell]) {
      // 如果出现乱码可以使用iconv-lite进行转码
      // row_value += iconv.decode(sheet1[cell].v, 'gbk') + ", ";
      row_value += sheet1[cell].v + ", ";
    } else {
      row_value += ", ";
    }
  }
  console.log(row_value);
}

打印结果如下

name, age,
zhangsan, 20,
lisi, 21,
wangwu, 22,
zhaoliu, 23,
sunqi, 24,

我的写法如下:

var _ = { map: require('lodash.map') };
static xlsxParse(mixed: string, options?: any) {
        var ws;
        if (typeof mixed === 'string') ws = XLSX.readFile(mixed, options);
        else ws = XLSX.read(mixed, options);
        // 引入lodash的map方法,入参((Array|Object): 用来迭代的集合, (Array|Function|Object|string): 每次迭代调用的函数)返回值:(Array): 返回新的映射后数组
        return _.map(ws.Sheets, function (sheet: XLSX.WorkSheet, name: string) {
            var flag = { header: 1, raw: true, comment: true };
            return { name: name, data: XLSX.utils.sheet_to_json(sheet, flag) };
        });
    }

返回结果是一个data中带list-list的形式,引用的lodash.map为lodash的map方法,reduce对遍历的每个单元格进行转json操作

参考博文:nodejs 使用 xlsx 实现导入导出,其中的部分实现稍作调整

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js使用xlsx实现Excel生成及读取 的相关文章

随机推荐

  • Q-learning

    学习增强学习有段时间了 也接触了 learning了 但对此理解不是很透彻 知道看到头条文章对一篇 翻译文才对此有了较深的理解 特此copy 望见谅 目录 故事案例 table简介 Q learning 算法 学习动作值函数 action
  • MATLAB中生成随机数方法总结

    好久没用MATLAB了 今天在利用MATLAB进行数据处理时 突然发现自己忘记了该如何产生自己需要的随机数形式 于是又查了一通资料 现对其进行一个简单的总结 供自己和大家以后参考 1 randi 产生均匀分布的伪随机整数 产生一个1至10之
  • linux下查询缺少的依赖文件归属于哪个rpm包

    我们在redhat下使用rpm ivh安装rpm包的时候 经常会报缺少依赖条件的错误 如下 root abc Packages rpm ivh httpd 2 4 6 17 el7 x8664 rpm 错误 依赖检测失败 etc mime
  • 浏览器的跨域问题

    什么导致的浏览器的跨域问题 不同源的ajax请求会导致出现跨域的错误 必须要是ajax请求 并且是不同源的才会出现跨域问题 跨域主要是出现在浏览器阻止了响应的接收 服务器有接收到请求也有发出响应 这里是浏览器存在同源策略 什么是同源 同源是
  • 视频剪辑利器:全能的音视频处理工具

    本次推荐的四个开源项目共同展现了开放 灵活和高效的多媒体处理能力 你可以使用它们进行剪辑 格式转换 添加音频轨道或字幕 甚至通过自动生成字幕来裁剪视频 无论是优化媒体文件 节省存储空间还是创造出令人惊叹的视觉效果 这些项目都将成为你不可或缺
  • (转)知乎-区块链技术:如何赋能供应链创新

    区块链技术 如何赋能供应链创新 佳晨说 可能很多人对区块链技术有一定的了解 这份了解大多数都是来自于比特币这样的一个概念 区块链的本质到底是什么 为什么又能够为供应链创新提供新的动力 因为区块链技术可以在供应链的物流 信息流 资金流和业务流
  • Android 11.0 无源码apk设置默认启动Launcher的相关属性

    目录 1 概述 2 无源码apk设置默认启动Launcher的相关属性的核心类
  • vue中使用vditor(发布,编辑,详情回显、上传图片+粘贴图片回显问题,表情的处理)

    文章目录 1 使用方法 1 html 2 dom 发布和编辑页面 3 详情页面 1 页面 2 引入 3 dom 效果图 补充遗漏的XSS过滤 1 注入脚本 2 过滤方法 3 在input val 中调用 补充防盗链功能 此方法有视觉变化 3
  • 获取和设置tinyMCE 4编辑器的内容

    对于tinymce编辑器是无法通过js进行内容的读写的 必须使用编辑器自身的方法才行 下面是一些方法 希望能对用到的朋友有所帮助 1 如果当前页面只有一个编辑器 获取内容 tinyMCE activeEditor getContent 设置
  • STL中set的基本介绍

    STl中的基本内容 容器 set multiset 在集合中 所有的元素只能出现一次 并且默认按照元素的值从小到大自动排序 set不能通过迭代器来修改元素的值 即set的迭代器是一种const iterator multiset 和 set
  • 从摄影测量到计算机视觉----以SFM算法为例,用python+opencv 实现

    因为这篇公式和图比较多 所以笔者以贴图像的形式来 附上最终的结果图 如果你需要笔者的代码 可以发邮件或者去github 笔者后续会贴上github链接 1 两者之间的关系 摄影测量是研究被摄物体的形状 大小 和相对位置关系的一门学科 计算机
  • 【今日CV 计算机视觉论文速览 第109期】Wed, 1 May 2019

    今日CS CV 计算机视觉论文速览 Wed 1 May 2019 Totally 40 papers 上期速览 更多精彩请移步主页 Segmentations is All You Need 提出了一种无须锚点和非极大值抑制的目标检测方法
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Python打印颜色

    author skate time 2014 09 28 Python打印颜色 格式 033 显示方式 前景色 背景色m 说明 前景色 背景色 颜色 30 40 黑色 31 41 红色 32 42 绿色 33 43 黃色 34 44 蓝色
  • java md5签名首位为0时被忽略

    由于hex加密时0不被解析 即0x0001和0x1在表现上都是1只是占用内存大小不同 而如果数字相同自动0x01和0x1加密出来是一样的 所以0x01无论前面有几个0都会去掉 平常使用MD5加密时 自己封装处理时 常见有2个问题 1 转换为
  • ESP32(MicroPython)摇杆控制舵机

    主程序 橙色 信号线 gt 17 红色 电源正 gt 5V 褐色 电源负 gt GND 导入Pin模块 from machine import Pin import time from servo import Servo from mac
  • Springboot生成二维码

    Springboot生成二维码整合 我们使用两种方式 去生成二维码 但是其实 二维码的生成基础 都是zxing包 这是Google开源的一个包 第一种是使用原始的zxing方式去实现 第二种是使用hutool来实现 hutool其实也是对于
  • 关于source insight提示source insight can't create file的解决方法

    如果运行程序 提示错误 source insight can t create file 原因是安装路径或者project存放的路径中出现了中文 解决的方法挺简单的 在它提示无法创建的文件路径下创建相应的文件夹 然后重新打开程序会出现一大堆
  • java-批量下载文件,并且为每个文件创建文件夹,最后合并成一个压缩包

    前言 通过文件url批量下载文件 并且每一个文件创建一个文件夹 以此分类 最后统一打成一个压缩包 一 代码示例 public void download List
  • node.js使用xlsx实现Excel生成及读取

    xlsx工具npm地址 https www npmjs com package xlsx 生成excel 导出 将数据导出成excel方法 下面介绍两种方式 一种是将数组数据导出成excel 一种是将json数据导出成excel 都非常简单