SheetJS xlsx js库入门使用

SheetJS xlsx js库入门使用文章目录 1 流式读取文件 2 读取单元格 3 修改单元格 4 保存文件结语附 1 搭配 ANTD 的 Upload 实现流式上传读取附 2 如何在多个文件全部读取完之后再进行下一步操作最近在用 SheetJS 这个库 简单记录一下使用成果 项目地址 https github com SheetJS sheetjs1 流式读取文件我写的是网页而不是 node 脚本 所以配合了 Antd 的 Upload 组件来做文件上传和文件的流式读取 如果你想看整个的结合方式可以在目录里面跳转到附 1 部分 reader r

最近在用SheetJS这个库,简单记录一下使用成果。
项目地址:

https://github.com/SheetJS/sheetjs

1.流式读取文件

我写的是网页而不是node脚本,所以配合了Antd的Upload组件来做文件上传和文件的流式读取,如果你想看整个的结合方式可以在目录里面跳转到附1部分。

 reader.readAsArrayBuffer(dataFileList[key].file); reader.onload = (e)=>{ 
      let data = e.target.result; let wb = Xlsx.read(data); console.log(wb); }; reader.onerror = (e) => { 
      isReadFileError = true }; 

在这里插入图片描述
看一下文件读取的输出结果,Sheets里面包含的是他的全部工作表(Sheet)的数据。里面A1,B1这些对应的都是每个格子的数据,唯独有一个key比较特殊,就是这个 !ref 。这个代表的是这个工作表的数据范围,然后使用数据的时候就可以这样用:

let range = Xlsx.utils.decode_range(wb.Sheets['数据表设定']["!ref"]) 
s(start_cell):{ 
     c(col):0 , r(row):0} e(end_cell):{ 
     c(col):6 , r(row):42} 

2.读取单元格

现在你回想一下上面我们输出的工作表格式,你就会知道我们在读取单元格的时,需要输入他在Excel里面对应的编码,比如读取1行1列的格子,我们就需要输入’A1’这个key来读取。那一个字符串显然是难以进行遍历操作的,XLSX库里面就给我们提供了一个转换的工具类。

 for(let C = range.s.c; C <= range.e.c; ++C) { 
      // c col r row let cell_address = { 
     c:C, r:1}; // 将坐标转换成EXCEL的坐标比如{1, 1}转为A1 let cell_ref = Xlsx.utils.encode_cell(cell_address); let value = wb.Sheets['数据表设定'][cell_ref].v } 

3.修改单元格

文档链接:

https://github.com/SheetJS/sheetjs#modifying-cell-values

这个我主要是用到XLSX.utils.sheet_add_aoa这个函数。
当你修改单个单元格:

XLSX.utils.sheet_add_aoa(worksheet, [[new_value]], { origin: address });

修改多个单元格:

XLSX.utils.sheet_add_aoa(worksheet, aoa, opts);

说实话他这个文档写的我是真看不懂,我们直接来研究他给的代码实例:

XLSX.utils.sheet_add_aoa(worksheet, [ [1], // <-- 把1写入到B3里面 , // <-- 第4行啥也不做 [/*B5*/, /*C5*/, /*D5*/, "abc"] // <-- 把abc写到E5里面 ], { 
      origin: "B3" }); 

聪明的你一看这个代码就能看懂了吧,也明白了为什么单个单元格用的是 [[new_value]]

4.保存文件

文档链接:

https://github.com/SheetJS/sheetjs#parsing-workbooks

保存文件目前我只测试了最简单的这个writeFile就是直接将wb写成xlsx的,保存文件后会自动弹出下载窗口。

Xlsx.writeFile(configWb, 'test.xlsx') 

后续在使用过程中遇到解决一些问题可能会持续更新。

结语

附1:搭配ANTD的Upload实现流式上传读取

简单来说思路就是调用Upload的beforeUpload方法,在文件上传前获取到文件,获取到文件后就可以将数据读取到Buffer然后调用Xlsx.read解析xlsx文件。

const uploadConfigProps = { 
      name: 'file', maxCount: 1, beforeUpload: file => { 
      console.log(file) const reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = (e) => { 
      console.log('read_file') let data = e.target.result; console.log(data) let wb = Xlsx.read(data) console.log(wb) // !ref获取的是表格的规模大小 let range = Xlsx.utils.decode_range(wb.Sheets['数据表设定']["!ref"]) console.log(range) ... } } return false; } } 

这个是配合Dragger使用

<Dragger style={ 
         { 
         width: '100%'}} {...uploadConfigProps} > <p className="ant-upload-drag-icon"> <InboxOutlined />  
       p> <p className="ant-upload-text">点击或拖动文件至该区域上传 
        p>  
         Dragger> 

Upload的代码也是基本类似的,这里我加上了return Upload.LIST_IGNORE;这个返回值可以使得上传的文件不会出现在Upload的上传队列里面同时showUploadList={false}这个代码也是同样的效果,请注意甄别。

 
    
      { console.log(file) return Upload.LIST_IGNORE; }} > 
     <a>重新上传 
      
        a>  
         Upload>  
    

附2:如何在多个文件全部读取完之后再进行下一步操作




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216791.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:03
下一篇 2026年3月18日 上午11:03


相关推荐

  • opencv使用教程_opencv使用教程

    opencv使用教程_opencv使用教程OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。OpenCV使用C/C++开发,同时也提供了Python、Java、MATLAB等其他语言的接口。OpenCV是跨平台的,可以在Windows、Linux、MacOS、Android、iOS等操作系统上运行。OpenCV的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、..

    2022年10月3日
    6
  • matlab输出矩阵格式_matlab中uint8函数用法

    matlab输出矩阵格式_matlab中uint8函数用法1、uint8与doubledouble函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因此I2=im2dou…

    2025年12月14日
    4
  • Cpu流水线_cpu多级流水线

    Cpu流水线_cpu多级流水线原文地址:AJourneyThroughtheCPUPipeline转载翻译地址:CPU流水线的探秘之旅作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?应用程序通常会将CPU看

    2022年8月20日
    12
  • CAD图纸转换成白色背景SVG格式如何设置其页面大小?

    CAD图纸转换成白色背景SVG格式如何设置其页面大小?

    2021年7月6日
    114
  • 基于OpenCV3实现人脸识别(实践篇)[通俗易懂]

    基于OpenCV3实现人脸识别(实践篇)[通俗易懂]实践总结:首先了解做人脸识别的步骤 各个算法后面的原理 原理背后的相关知识的了解 人脸识别项目总遇到的问题由于篇幅原因,后面一篇写各个算法背后的原理,原理背后的相关知识的了解,人脸识别项目总遇到的问题首先感谢:https://blog.csdn.net/qq_37406130/article/details/78697244基于Opencv的人脸识别ht…

    2022年6月7日
    68
  • 在Centos中yum安装和卸载软件的使用方法

    在Centos中yum安装和卸载软件的使用方法yum-yinstall包名(支持*):自动选择y,全自动yuminstall包名(支持*):手动选择yornyumremove包名(不支持*)rpm-ivh包名(支持*):安装rpm包rpm-e包名(不支持*):卸载rpm包安装一个软件时yum-yinstallhttpd安装多个相类似的软件时yum-y

    2022年5月27日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号