import FileSaver from 'file-saver';
import XLSX from 'xlsx';
function exportExcel(_dataSource) {
var wopts = {
bookType: 'xlsx',
bookSST: true,
type: 'binary'
};
var workBook = {
SheetNames: ['Sheet1'],
Sheets: {},
Props: {}
};
let dataSource = [{ 暂无数据: '暂无数据' }];
const tabelName = _dataSource.tabelName ? _dataSource.tabelName : 'sheet';
let tableTitle = [];
if (_dataSource.tableTitle) {
tableTitle = Object.keys(_dataSource.tableTitle);
}
if (_dataSource.arr.length) {
// {code: value} 变 {汉字: value}
dataSource = _dataSource.arr.map(item => {
const obj = {}
tableTitle.forEach(k => {
obj[_dataSource.tableTitle[k]] = item[k]
})
return obj;
})
}
workBook.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(dataSource);
// workBook.Sheets['Sheet1']['!cols'] = [{ width: 8 }] // 宽度设置 2 ~=一个汉字
FileSaver.saveAs(new Blob([changeData(XLSX.write(workBook, wopts))], { type: 'application/octet-stream' }), tabelName + '.xlsx')
}
function changeData(s) {
// 如果存在ArrayBuffer对象(es6) 最好采用该对象
if (typeof ArrayBuffer !== 'undefined') {
// 1、创建一个字节长度为s.length的内存区域
var buf = new ArrayBuffer(s.length);
// 2、创建一个指向buf的Unit8视图,开始于字节0,直到缓冲区的末尾
var view = new Uint8Array(buf);
// 3、返回指定位置的字符的Unicode编码
for (var 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;
}
}
export default exportExcel
使用
// const column = [{ label: '项目编码', prop: 'projectCode' }, { label: '项目名称', prop: 'projectName' }, { label: '台区名称', prop: 'courtsName' }]
import exportExcel from '@/utils/exportExcel';
handleExport() {
const tableTitle = {}
column.forEach(item => {
tableTitle[item.prop] = item.label
})
exportExcel({
tabelName: `核减物资`,
tableTitle,
arr: this.tableList
})
}