最近处理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转sheetsheet_add_aoa
sheet添加二维数组sheet_add_json
sheet添加jsonsheet_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转成sheettable_to_book
html的table转成workbooksheet_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转成csvsheet_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