sheetJS

3,952 阅读1分钟

前端导表

  1. npm i -D xlsx
  2. import XLSX from 'xlsx'

明确三个概念:

  1. cell---单元格
  2. workbook---方法中简称book
  3. worhsheet---方法中简称sheet

一个完整的导表流程

1.创建一个新的workbook

var workbook=XLSX.utils.book_new()

2.获取table的DOM元素

const table=document.getElementById("table")

3.把table数据转化成worksheet

const worksheet=XLSX.utils.table_to_sheet(table)

4.workbook中插入worksheet

XLSX.utils.book_append_sheet(workbook,worksheet,'sheet名称')

5.调起下载

XLSX.writeFile(workbook,'表格名称.xlsx')

使用table_to_sheet的一个完整的导表流程。
对第2步的质疑:官网示例是table标签。
引发的问题与思考:
1.可以table外面套其他的标签吗?可以
2.table同级有其他标签,影响导表吗?不影响
3.如果不是table标签,换成ul或其他标签,可以实现导表吗?不可以,获取不到!ref
4.如果一个div中同时包含多个table标签,可以吗?可以,多个table标签会按照顺序,合成一个表格,导出来。

对第3步的质疑:业务场景是多变的,只能通过table_to_sheet不现实,从而引出其他数据转变成worksheet的方法。
1.aoa_to_worksheet---aoa means array of array 意味着把数组嵌套数组(一行的内容包裹成一个数组)的数据转变成worksheet。例如:

let data = [
["标题1", "标题2", "标题3"],
["内容1", "内容2", "内容3", "多了一列"]
]

2.json_to_sheet---array of json 意味着数组嵌套json转变成worksheet 例如:

let data = [
{ "标题1": "内容1", "标题2": "内容2", "标题3": "内容3" },
{ "标题1": "内容4", "标题2": "内容4", "标题3": "内容5" }
]

对第4步的质疑:workbook中插入worksheet的方法只有这一种吗?

1.XLSX.utils.table_to_book(table的DOM元素)
2.XLSX.read(table.outerHTML,{type:'string'})
==这两种方法的缺点是workbook中只会有一个worksheet==