开发excel必备,xlsx的使用方法和案例

最近处理excel比较多,特别是excel格式转换,还有合并excel、拆分excel。现在工作告一段落,在代码提炼了一下,做成了在线工具,欢迎来踩。

网站地址: excel.dizhi666.com/

网站是纯静态的,使用的是xlsx库,这个库非常好用,这里介绍下它的使用方法。

必知背景

在介绍这个库之前,你必须知道以下知识

  • 1.一个excel就是一个workbook(又叫工作簿),workbook是由sheet组成的,一个workbooke可以包含多个sheet。
  • 2.xlsx只能处理excle中的数据,无法插入图片,无法定制样式。要想插入图片和样式就得使用它的高级版,这个是收费的。

1.安装xlsx

这个库在npm上的地址是xlsx - npm (npmjs.com),不过该npm包在v0.18.5之后就不再更新了。要想使用最新的版本就得去官网找。

官方文档地址:SheetJS Community Edition | SheetJS Community Edition

安装使用的是npm

powersheel 复制代码
npm i --save https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz

2.Api文档地址

xlsx的文档写的非常乱,如果你对他的文档不熟悉,想查个api,你都不知道从哪里找。我在这里帮大家梳理下。

api文档地址是这个:API Reference | SheetJS Community Edition

关系xlsx的常用的api都罗列在这里了,主要分为以下几块,每一个api官网都提供了使用案例,这个还是比较贴心的。

2.1 Parsing functions

作用:读取excel

读取excel有两个方法

  • XLSX.read(data, read_opts) 浏览器中用这个方法
  • XLSX.readFile(filename, read_opts) 这个是node用的

api地址:API Reference | SheetJS Community Edition

api调用案例:Reading Files | SheetJS Community Edition

2.2 Writing functions

作用:创建excel

创建excle有以下几个方法

  • XLSX.write(wb, write_opts) 使用workbook创建一个文件,支持多种格式比如xlsx、xlsm、csv、txt。返回结果字节码或者字符串或者arraybuffer,需要自己再封装Blob或者File格式
  • XLSX.writeFile(wb, filename, write_opts) 使用workbook创建一个文件,并立即下载,支持多种格式。常用于浏览器中。
  • XLSX.writeXLSX(wb, write_opts) 使用workbook创建一个excel文件,返回字节码或者字符串,需要自己再封装成Blob或者File格式
  • XLSX.writeFileXLSX(wb, filename, write_opts) 使用workbook创建一个excel文件,返回一个文件,可以立即下载
  • XLSX.writeFileAsync(filename, wb, o, cb) 同步方法创建一个文件

api地址:API Reference | SheetJS Community Edition

api调用案例:Writing Files | SheetJS Community Edition

2.3 A1 Utilities

作用:获取行列的名称和索引、获取单元格名称和索引、获取范围的名称和索引。

excle中同一个位置可以有不同的表述,比如A1单元格,可以A1表示这个位置,也可使用第一行第一列({c:0,r:0})表示这个位置。

A1 Utilities 这个函数的作用就是为了同一个位置的不同表述

有以下几个方法

  • encode_row / decode_row
  • encode_col / decode_col
  • encode_cell / decode_cell
  • encode_range / decode_range

api地址:A1 Utilities

api调用案例:Addresses and Ranges | SheetJS Community Edition

2.4 "Arrays of Data" section of "Utility Functions"

作用:实现json数组和sheet之间的相互转换

包含以下方法:

  • aoa_to_sheet 二维数组转sheet,aoa 是array of arrays的缩写
  • json_to_sheet json转sheet
  • sheet_add_aoa sheet添加二维数组
  • sheet_add_json sheet添加json
  • sheet_to_json sheet转json

api地址:"Arrays of Data" section of "Utility Functions"

api调用案例:Arrays of Data | SheetJS Community Edition

2.5 "HTML" section of "Utility Functions"

作用:使用html和sheet之间的相互转换

包含以下方法

  • table_to_sheet html的table转成sheet
  • table_to_book html的table转成workbook
  • sheet_add_dom 将html的table添加到已有的sheet中
  • sheet_to_html 将sheet转成html

api地址:"HTML" section of "Utility Functions"

api调用案例:HTML | SheetJS Community Edition

2.6 "CSV and Text" section of "Utility Functions"

作用:实现sheet、csv、text之间的相互转换

包含以下方法:

  • sheet_to_csv sheet转成csv
  • sheet_to_txt sheet转成text

官网没有直接提供csv转sheet、txt转sheet的方法。这个实现起来比较简单,可以先csv或者text转成json对象或者二维数组,然后调用aoa_to_sheet或者json_to_sheet转成sheet

比较麻烦的地方是读取txt或者csv的时候有编码问题,如果txt或者csv是gb2312编码,读的时候按utf-8读取的话,就会乱码。

我封装了一个函数,可以用来读取txt或者csv

js 复制代码
export async function readTxtFile(file){
  return new Promise((resolve,reject)=>{
    const reader = new FileReader()
    reader.readAsText(file,'utf-8')
    reader.onload = e => {
      const txtString = e.target.result
      // utf-8 的 中文编码 正则表达式
      const patrn=/[\u4E00-\u9FA5]/gi;
      // 检测当前文本是否含有中文(如果没有,则当乱码处理)
      // 两个格式的英文编码一样,所以纯英文文件也当成乱码再处理一次
      if (!patrn.exec(txtString)) {
          let reader_gb2312 = new FileReader()
          // 再拿一次纯文本,这一次拿到的文本一定不会乱码
          reader_gb2312.readAsText(file,'gb2312')
          reader_gb2312.onload = e2 => {
            resolve(e2.target.result)
          }
      } else {
          resolve(txtString)
      }
    }
  })
}

api地址:"CSV and Text" section of "Utility Functions"

api调用案例:CSV and Text | SheetJS Community Edition

2.7 "Array of Formulae" section of "Utility Functions"

作用:用于处理excel中的公式

包含以下方法:

  • sheet_to_formulae 将sheet转成公式格式:A1=,A2=,A3=*....

api地址:"Array of Formulae" section of "Utility Functions"

api调用案例:Array of Formulae | SheetJS Community Edition

2.8 "Workbook Helpers" section of "Utility Functions"

作用:worbbook相关的帮助函数

包含以下2个函数

  • book_new 创建一个book
  • book_append_sheet 往book中添加sheet

api地址:"Workbook Helpers" section of "Utility Functions"

api调用案例:Workbook Helpers | SheetJS Community Edition

2.9 Utility Functions

作用:其他一些方法

包含以下2个函数

  • format_cell 将单元格number格式转成文本格式
  • sheet_set_array_formula 往sheet中添加一组公式

api地址:Utility Functions

api调用案例:Utility Functions | SheetJS Community Edition

总结

xlsx的api大概就这么多,包含了读取数据、处理数据、写入数据3部分。xlsx功能也远不止这些,但是其他都是收费的,对一般的需求来说,基础功能就够用了。xlsx的文档还是挺友好的,有什么不懂的,可以多看看文档。

官方文档地址:SheetJS Community Edition | SheetJS Community Edition

相关推荐
落霞的思绪28 分钟前
CSS复习
前端·css
咖啡の猫2 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲5 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5815 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路6 小时前
GeoTools 读取影像元数据
前端
ssshooter6 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry7 小时前
Jetpack Compose 中的状态
前端
dae bal7 小时前
关于RSA和AES加密
前端·vue.js
柳杉8 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化
lynn8570_blog8 小时前
低端设备加载webp ANR
前端·算法