1、安装XLSX库。
2、直接引入XLSX库。
3、将json数据导出excel
import moment from 'moment';
export const downloadExl = (json, type = 'xlsx', saveAs) => {
//这里的数据是用来定义导出的格式类型
const wopts = {
bookType: type,
bookSST: false,
type: 'binary'
};
const wb = {
SheetNames: ['Sheet1'],
Sheets: {},
Props: {}
};
wb.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(json); //通过json_to_sheet转成单页(Sheet)数据
let tmpDown = new Blob([s2ab(XLSX.write(wb, wopts))], {
type: 'application/octet-stream'
});
let textName = moment(new Date()).format('YYYYMMDDHHmmss')
saveAs(tmpDown, textName + '.' + type);
};
//字符串转字符流
function s2ab(s) {
if (typeof ArrayBuffer !== "undefined") {
//1、创建一个字节长度为s.length的内存区域
let buf = new ArrayBuffer(s.length);
//2、创建一个指向buf的Unit8视图,开始于0字节,直到缓冲区的末尾
let view = new Uint8Array(buf);
//3、返回指定位置的字符的Unicode编码
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
console.log(buf);
debugger;
return buf;
} else {
let buf = new Array(s.length);
for (let i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xff;
return buf;
}
}
export const saveAs = (obj, fileName) => {
//1、创建a标签
let tmpa = document.createElement("a");
tmpa.download = fileName || "下载";
//2、创建url指定文件,绑定a标签
tmpa.href = URL.createObjectURL(obj);
//3、模拟点击实现下载
tmpa.click();
//4、延时释放
setTimeout(() => {
//用URL.revokeObjectURL来释放这个object URL
URL.revokeObjectURL(obj);
}, 100);
}