用于前端操作Excel以及类似的二维表,js-xlsx是它的社区版本
文档地址:https://docs.sheetjs.com/、https://github.com/rockboom/SheetJS-docs-zh-CN
安装
npm install xlsx --save
读取文件
read
XLSX.read(data, options)
- 解析数据 data,options 为可选参数
readFile
XLSX.readFile(filename, options)
- 读取指定的本地文件,仅适用于特定环境。它在浏览器中不起作用,options 为可选参数
写入文件
write
XLSX.write(wb, options)
- 在基于浏览器的环境中,将尝试强制客户端下载
- wb:工作簿对象
- options:
- type:输出数据编码
- bookType: 导出文件的文件格式,若不传,则从文件扩展名推导出输出文件格式
- sheet:单表格式的工作表名称
- ......
writeFile
XLSX.writeFile(wb, filename, options)
- 在基于浏览器的环境中,将尝试强制客户端下载
writeFileAsync
XLSX.writeFileAsync(filename, wb, options, cb)
- 仅适用于 nodejs
writeFileSync
XLSX.writeFileSync(wb, filename, options)
- 仅适用于 nodejs
utils Functions
Arrays of Data
aoa_to_sheet
- 接受一个二维数组,并返回工作表,opts 为可选参数
const ws = XLSX.utils.aoa_to_sheet(aoe, opts)
sheet_add_aoa
- 将数组中的数据添加到现有工作表
XLSX.utils.sheet_add_aoa(ws, aoa, opts)
/* Start from an empty worksheet */
const ws = XLSX.utils.aoa_to_sheet([[]]);
/* First row */
XLSX.utils.sheet_add_aoa(ws, [ "SheetJS".split("") ], {origin: "A1"});
/* Write data starting at A2 */
XLSX.utils.sheet_add_aoa(ws, [[1,2], [2,3], [3,4]], {origin: "A2"});
/* Write data starting at E2 */
// r: row; c: column
XLSX.utils.sheet_add_aoa(ws, [[5,6,7], [6,7,8], [7,8,9]], {origin:{r:1, c:4}});
/* Append row */
// 从第一列开始附加到工作表底部
XLSX.utils.sheet_add_aoa(ws, [[4,5,6,7,8,9,0]], {origin: -1});
json_to_sheet
- 接受一个对象数组,并返回工作表,opts 为可选参数
const ws = XLSX.utils.json_to_sheet(aoo, opts)
- opts
- header:使用字段的顺序(默认 Object.keys)
- skipHeader:默认 false,若为 true,则输出不含标题行
- ......
const aoo = [
{ Name: "Bill Clinton", Index: 42 },
{ Name: "GeorgeW Bush", Index: 43 },
{ Name: "Barack Obama", Index: 44 },
{ Name: "Donald Trump", Index: 45 },
{ Name: "Joseph Biden", Index: 46 }
]
const ws = XLSX.utils.json_to_sheet(aoo)
sheet_add_json
- 将数组中的数据添加到现有工作表
XLSX.utils.sheet_add_json(ws, aoo, opts)
sheet_to_json
- 输出对象数组
const arr = XLSX.utils.sheet_to_json(ws, opts)
HTML
sheet_to_html
- 传入工作表,输出 HTML 表格
const html = XLSX.utils.sheet_to_html(ws, opts)
table_to_book、table_to_sheet
- 从 TABLE 元素创建工作表或工作簿
const wb = XLSX.utils.table_to_book(document.getElementById('table'))
const ws = XLSX.utils.table_to_sheet(document.getElementById('table'))
sheet_add_dom
- 将数据从 TABLE 元素添加到现有工作表
XLSX.utils.sheet_add_dom(ws, elt, opts)
CSV and Text
sheet_to_csv
- 生成CSV文件
const csv = XLSX.utils.sheet_to_csv(ws, opts)
sheet_to_txt
- 生成UTF16的格式化文本
const txt = XLSX.utils.sheet_to_txt(ws, opts)
Array of Formulae
sheet_to_formulae
- 从工作表中提取所有公式
const fmla_arr = XLSX.utils.sheet_to_formulae(ws);
Workbook Helpers
book_new
- 创建工作簿
const workbook = XLSX.utils.book_new()
book_append_sheet
- 将工作表附加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, sheet_name);
单元格操作
转换单元格地址
- 单元格地址对象的存储格式为{c:C, r:R},其中C和R分别代表的是索引列和行号,均从 0 开始
const cell1 = XLSX.utils.encode_cell({c:0, r:0}) // 返回 A1
const cell2 = XLSX.utils.decode_cell('A1') // 返回 {c:0, r:0}
// 获取单元格对象
const cell = worksheet['A1'] // 含 数据类型、值、格式、公式、样式等等
转换行地址
-
encode_row / decode_row
在0索引行和1索引行之间转换
转换列地址
-
encode_col / decode_col
在0索引列和列名之间转换
const col1 = XLSX.utils.encode_col(3) // 返回 D
const col2 = XLSX.utils.decode_col('D') // 返回 索引 3
生成文本类型的单元格值
-
format_cell
生成文本类型的单元格值(使用数字格式)。
转换单元格的范围 encode_range / decode_range
合并单元格
// s = start, r = row, c=col, e= end
worksheet.merge = [{ s: { r: 0, c: 0 }, e: { r: 0, c: c } }]
配置超链接
- 超链接存储在单元格对象的l关键字内
worksheet['A3'].l = { Target:"http://sheetjs.com", Tooltip:"Find us @ SheetJS.com!" }
worksheet['A2'].l = { Target:"#E2" }; /* link to cell E2 */
单元格注释
- 单元格注释存储在单元格对象的c数组内
if(!worksheet.A1.c) worksheet.A1.c = [];
worksheet.A1.c.push({a:"SheetJS", t:"This comment is visible"});
if(!worksheet.A2.c) worksheet.A2.c = [];
worksheet.A2.c.hidden = true;
worksheet.A2.c.push({a:"SheetJS", t:"This comment will be hidden"});
数据表对象
worksheet['!ref']
- 表示数据表的范围。例如 "A1:D5"
worksheet['!margins']
- 表示页面的边距
worksheet['!merges']
- 设置的合并单元格配置,若未设置,则为 undefined
工作簿对象
workbook.SheetNames
- 所有 sheet 的 name 的集合
workbook.Sheets[sheetname]
- 返回一个表示工作表的对象
网友评论