开发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

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

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

原文链接:https://juejin.cn/post/7339827208087289892 作者:郭邯

(0)
上一篇 2024年2月27日 下午4:17
下一篇 2024年2月27日 下午4:28

相关推荐

发表回复

登录后才能评论