前端导表
- npm i -D xlsx
- import XLSX from 'xlsx'
明确三个概念:
- cell---单元格
- workbook---方法中简称book
- 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==