nodejs:
【1】npm i node-xlsx,引入,转为格式为[[],[],[]]的形式
const NXlSX = require('node-xlsx')
// const Mock = require('mockjs')
module.exports = (headers, content, data, name) => {
// console.log(data, 'kk')
let datalist = []
for (let i = 0; i < data.length; i++) {
let arr = []
for (let key in content) {
console.log(content[key])
arr.push(data[i][content[key]])
}
datalist.push(arr)
}
datalist.unshift(headers)
// 数据格式为[["hello","223"],["22","23"]];
// console.log(datalist)
let buffer = NXlSX.build([{ name: name, data: datalist }])
return buffer
}
【2】在路由文件使用
var downloadflie = require('../public/js/download.js')
router.get('/admin/downloadorgalist', async(ctx, res) => {
let headers = ['类型', '学院社团', '组织名']
let data = await admin.getsetorgalist()
let name = '组织信息'
let content = ['type', 'college', 'organame']
let dataliststyle = await downloadflie(headers, content, data, name)
console.log(dataliststyle)
ctx.body = dataliststyle
})
Vue前端:
async downloadorga() {
let data = await this.$http({ method: 'get', url: '/admin/downloadorgalist', responseType: 'blob' })
const blob = new Blob([data.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
console.log(data)
const url = URL.createObjectURL(blob)
const aLink = document.createElement('a')
aLink.download = 'orga'
aLink.href = url
const ev = new MouseEvent('click')//模拟鼠标点击事件
aLink.dispatchEvent(ev)
URL.revokeObjectURL(blob) //静态方法用来释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象
},
即可实现导出