csv导出
// 列标题,逗号隔开,每一个逗号就是隔开一个单元格
let str = `Excel行号,*姓名,*邮箱,手机号,岗位,管理组,角色,失败原因\n`
// let str = `姓名,电话,邮箱\n`
const jsonData = this.importResultData.errors.map(item => {
return {
excelRowNumber: item.excelRowNumber,
userName: item.userName,
email: item.email,
cellPhone: item.cellPhone,
position: item.position,
department: item.department,
role: item.role,
error: item.error
}
})
// 增加\t为了不让表格显示科学计数法或者其他格式
for (let i = 0; i < jsonData.length; i++) {
for (const item in jsonData[i]) {
str += `${jsonData[i][item] + '\t'},`
}
str += '\n'
}
// encodeURIComponent解决中文乱码
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str)
// 通过创建a标签实现
var link = document.createElement('a')
link.href = uri
// 对下载的文件命名
link.download = '1.CSV'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
xls导出且导出文件为二进制文件
// 生成一个新的workbook,然后往workbook追加worksheet
const cleanWorkbook = XLSX.utils.book_new()
const jsonData = JSON.parse(JSON.stringify(this.importResultData.errors))
const jsonFormateData = jsonData.map(item => {
const obj = {
}
const itemKeys = Object.keys(item)
const jsonFieldsKeys = Object.keys(this.json_fields)
itemKeys.forEach(itemKey => {
jsonFieldsKeys.forEach(jsonFieldsKey => {
if (this.json_fields[jsonFieldsKey] === itemKey) {
obj[jsonFieldsKey] = item[itemKey]
}
})
})
return obj
})
const worksheet = XLSX.utils.json_to_sheet(jsonFormateData)
XLSX.utils.book_append_sheet(cleanWorkbook, worksheet, 'sheet2')
// 只需要一个worksheet的时候可以直接read method生成workbook,此时worksheet名称默认为"Sheet1"
// const directWorkbook = XLSX.read(table.outerHTML, {
// type: 'string'
// })
const stringToArrayBuffer = function(string) {
const buffer = new ArrayBuffer(string.length)
const view = new Uint8Array(buffer)
for (let i = 0; i !== string.length; ++i) {
view[i] = string.charCodeAt(i) & 0xFF
}
return buffer
}
const ab = stringToArrayBuffer(XLSX.write(cleanWorkbook, {
bookType: 'xls',
type: 'binary'
}))
// 利用URL.createObjectURL()方法为a元素生成blob URL
const url = window.URL.createObjectURL(new Blob([ab]))
const a = document.createElement('a')
a.href = url
a.download = this.failedFileName
a.click()