依赖安装
npm i xlsx -S
函数封装
import * as XLSX from 'xlsx'
export const excelToJson = (rawFile: Blob) => {
return new Promise((resolve) => {
let reader = new FileReader()
reader.readAsBinaryString(rawFile)
reader.onload = (ev) => {
let workBook = XLSX.read(ev.target!.result, { type: 'binary', cellDates: true })
let workSheet = workBook.Sheets[workBook.SheetNames[0]]
const data = XLSX.utils.sheet_to_json(workSheet)
resolve(data)
}
})
}
export const dataToExcel = (
data: { [propName: string]: any }[],
title: string
) => {
let str = `${title}\n`
for (let i = 0; i < data.length; i++) {
for (const key in data[i]) {
str += `${data[i][key] + '\t'},`
}
str += '\n'
}
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str)
const link = document.createElement('a')
link.href = uri
link.download = '数据.csv'
link.click()
}
export const dataToJson = (data: any, filename = 'data') => {
if (!data) {
alert('保存的数据为空')
return
}
if (typeof data === 'object') {
data = JSON.stringify(data, undefined, 4)
}
let blob = new Blob([data], { type: 'text/json' }),
e = document.createEvent('MouseEvents'),
a = document.createElement('a')
a.download = `${filename}.json`
a.href = window.URL.createObjectURL(blob)
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':')
e.initMouseEvent(
'click',
true,
false,
window,
0,
0,
0,
0,
0,
false,
false,
false,
false,
0,
null
)
a.dispatchEvent(e)
}