//获取列表数据之后前端导出为Excel
import * as XLSX from 'xlsx'
export function MixinExportJosnToExcel (
json,
name = 'data',
type = 'application/octet-stream'
) {
const wb = { SheetNames: [], Sheets: {}, Props: {} }
if (!Array.isArray(json)) json = [json]
json.forEach(item => {
wb.SheetNames.push(item.sheet_name)
wb.Sheets[item.sheet_name] = XLSX.utils.json_to_sheet(
item.sheet_values,
item.sheet_options
)
})
const wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' }
const blob = new Blob([s2ab(XLSX.write(wb, wopts))], { type })
const link = document.createElement('a')
document.body.appendChild(link)
link.style.display = 'none'
link.href = window.URL.createObjectURL(blob)
link.download = `${name}.xlsx`
link.click()
// 释放资源
setTimeout(() => {
URL.revokeObjectURL(link.href)
}, 100)
function s2ab (s) {
if (typeof ArrayBuffer !== 'undefined') {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
return buf
} else {
const buf = new Array(s.length)
for (let i = 0; i !== s.length; ++i) buf[i] = s.charCodeAt(i) & 0xff
return buf
}
}
}
//使用
const json = {
sheet_name: '表格导出名字',
sheet_values: response.map(item => ({
'keyName': item.xxx,
'keyName': item.xxx,
'keyName': item.xxx,
'keyName': item.xxx,
}))
}
MixinExportJosnToExcel(json, '表格导出名字')
//请求后端Bolb
//请求体需要加
{
headers: {
'Content-Type': 'application/x-download'
},
responseType: 'blob'//这个是重点
}
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = `${this.treeNode.name}.xlsx`
link.click()
URL.revokeObjectURL(url)
document.removeChild(link)
//type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
//这个是xlsx格式的Blob类型
文章链接:http://iwebg.cn/index.php/2023/07/20/%e5%89%8d%e7%ab%afexcel%e5%af%bc%e5%87%ba/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。