用到xlsx
和file-saver
库,xslx
用以转换数据对象到Blob
对象中,file-saver
用以在客户端保存文件。
import { saveAs } from 'file-saver'
import XLSX from 'xlsx'
export const exportXlsx = (data, fields, fileName = 'excel') => {
// book_new创建一个workbook对象,主要用到两个属性:SheetNames和Sheets
// SheetNames包含该excel文件的所有工作表名称
// Sheets包含每个工作表名称和workSheet的映射关系
const workBook = XLSX.utils.book_new()
workBook.SheetNames.push(fileName)
// json_to_sheet将数据数组转化为一个workSheet对象
const workSheet = XLSX.utils.json_to_sheet(
data,
{
header: fields
}
)
workBook.Sheets[fileName] = workSheet
// 输出xlsx文件
const wopts = { bookType: 'xlsx', bookSST: false, type: 'array' }
const wbout = XLSX.write(workBook, wopts)
saveAs(new Blob([ wbout ],{ type: 'application/octet-stream' } ), fileName + '.xlsx')
}
也可以不借助file-saver
库保存.xlsx
文件:
const blob = new Blob([wbout], {
type: 'application/octet-stream'
})
const a = window.document.createElement('a')
a.href = window.URL.createObjectURL(blob, {
type: 'data:attachment/xlsx'
})
a.download = 'yourFileName.xlsx'
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
测试exportXlsx
函数:
const data = [
{
A1: '1',
A2: '2'
}
]
const fields = ['A1', 'A2']
exportXlsx(
data,
fields
)