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

相关推荐
wearegogog1232 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
Drawing stars2 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
品克缤2 小时前
Element UI MessageBox 增加第三个按钮(DOM Hack 方案)
前端·javascript·vue.js
小二·3 小时前
Python Web 开发进阶实战:性能压测与调优 —— Locust + Prometheus + Grafana 构建高并发可观测系统
前端·python·prometheus
小沐°3 小时前
vue-设置不同环境的打包和运行
前端·javascript·vue.js
qq_419854053 小时前
CSS动效
前端·javascript·css
烛阴3 小时前
3D字体TextGeometry
前端·webgl·three.js
桜吹雪4 小时前
markstream-vue实战踩坑笔记
前端
C_心欲无痕4 小时前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
花哥码天下4 小时前
恢复网站console.log的脚本
前端·javascript·vue.js