fastlion-amis
Version:
一种MIS页面生成工具
93 lines (72 loc) • 2.42 kB
text/typescript
import *as XLSX from 'xlsx';
const sheet2blob = (sheet: any, sheetName: any) => {
sheetName = sheetName || 'sheet1';
var workbook: any = {
SheetNames: [sheetName],
Sheets: {}
};
workbook.Sheets[sheetName] = sheet;
// 生成excel的配置项
var wopts: XLSX.WritingOptions = {
bookType: 'xlsx', // 要生成的文件类型
bookSST: false,
// 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: 'binary'
};
var wbout = XLSX.write(workbook, wopts);
var blob = new Blob([s2ab(wbout)], {
type: "application/octet-stream"
});
// 字符串转ArrayBuffer
function s2ab(s: any) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
return blob;
}
const openDownloadDialog = (url: any, saveName: string) => {
// 此方法创建了a标签 利用a标签的download属性进行下载文件
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || '';
// HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if (window.MouseEvent) event = new MouseEvent('click');
else {
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}
const exportRowData = (mode: any[], data: any,id:any) => {
let _title = '当前数据';
let _suffix = '.xlsx';
let json: any[] = [];
const _items: any = {};
const _modeDist: any = {};
mode.forEach((_mode: any) => {
if (_mode?.group && _mode?.group?.length >= 1) {
_mode?.group?.forEach((_item: any) => {
_modeDist[_item.name] = _item.label;
})
} else {
_modeDist[_mode.name] = _mode.label;
}
})
Object.keys(data).forEach((_ele: any) => {
if (_modeDist.hasOwnProperty(_ele)) {
_items[_modeDist[_ele]] = data[_ele]
}
})
json.push(_items)
const sheet = XLSX.utils.json_to_sheet(json);
openDownloadDialog(sheet2blob(sheet, undefined), '数据行' + _suffix);
}
export {
exportRowData
}