excel.js
3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import xlsx from 'xlsx'
import FileSaver from 'file-saver'
// 读取文件
export const ReadFile=(file)=>{
return new Promise(resolve => {
let reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = ev => { resolve(ev.target.result); }
})
}
// 导入excel
export function UploadImport(file) {
return new Promise((resolve,reject)=>{
// ReadFile(file.raw).then((result)=>{
ReadFile(file).then((result)=>{
let dataBinary= result;// 读取文件
let workBook = xlsx.read(dataBinary,{type:"binary",cellDates:true});
let workSheet = workBook.Sheets[workBook.SheetNames[0]];
let data = xlsx.utils.sheet_to_json(workSheet)||[];
if(data.length>0){
resolve(data);
}
else{
reject();
}
})
});
}
export function importExcel(_this) {
let fullscreenLoading = _this.$loading({
lock: true,
text: '导入中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
let obj = _this.imFile
if (!obj.files) {
fullscreenLoading.close();
return
}
var f = obj.files[0]
var reader = new FileReader()
reader.onload = function (e) {
var data = e.target.result
// console.log('data',data);
if (_this.rABS) {
_this.wb = xlsx.read(btoa(this.fixdata(data)), {// 手动转化
type: 'base64'
})
} else {
_this.wb = xlsx.read(data, {
type: 'binary'
})
}
// console.log('wb',_this.wb.Sheets[_this.wb.SheetNames[0]]);
let json = xlsx.utils.sheet_to_json(_this.wb.Sheets[_this.wb.SheetNames[0]])
// console.log('json',typeof json)
_this.dealFile(analyzeData(json)) // analyzeData: 解析导入数据
fullscreenLoading.close();
}
if (_this.rABS) {
reader.readAsArrayBuffer(f)
}
else {
reader.readAsBinaryString(f)
}
function analyzeData (data) { // 此处可以解析导入数据
return data||[]
}
}
// 导出excel
export function exportExcel(params) {
params=params||{
xlsxData:[["任务名称","任务地址"]],
sheetName:'sheet1',
fileName:'template'
}
const s2ab = s => {
if (typeof ArrayBuffer !== 'undefined') {
let buf = new ArrayBuffer(s.length)
let view = new Uint8Array(buf)
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
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;
}
}
let worksheet=xlsx.utils.aoa_to_sheet(params.xlsxData);
let workBook =xlsx.utils.book_new();
xlsx.utils.book_append_sheet(workBook,worksheet,params.sheetName);// 第三个参数可选,是工作表名称
let wopts = { bookType: 'xlsx', bookSST: false, type: 'binary'} //写入的样式
let wbout = xlsx.write(workBook, wopts)
try{
let blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' })
FileSaver.saveAs(blob, params.fileName+'.xlsx')
}
catch(e){
if(typeof console!=='undefined'){
console.log(e,wbout)
}
}
}