-
Notifications
You must be signed in to change notification settings - Fork 7
/
main.js
111 lines (101 loc) · 3.48 KB
/
main.js
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
105
106
107
108
109
110
111
'use strict';
const Fs = require('fire-fs');
const Path = require('fire-path');
module.exports = {
load() {
},
unload() {
},
messages: {
'open'() {
Editor.Panel.open('excel2js');
},
'update-excel'(event) {
let excelDir = Path.join(Editor.projectPath, 'excel');
let excelArr = [];
if (Fs.existsSync(excelDir)) {
excelArr = Fs.readdirSync(excelDir);
}
if (event.reply) {
event.reply(null, excelArr);
}
},
'convert-js'(event, excelFileInfo) {
let jsDir = 'db://assets/data';
if (!Editor.assetdb.exists(jsDir)) {
Editor.assetdb.create(jsDir);
}
if (Array.isArray(excelFileInfo)) {
for (let i = 0; i < excelFileInfo.length; i++) {
this.convertJs(excelFileInfo[i].name);
}
} else {
this.convertJs(excelFileInfo.name);
}
},
},
convertJs(excelFileName) {
//解析excel
let xlsx = Editor.require('packages://excel2js/node_modules/xlsx');
let excelName = Path.join(Editor.projectPath, 'excel', excelFileName);
const workbook = xlsx.readFile(excelName);
const sheetNames = workbook.SheetNames;
const worksheet = workbook.Sheets[sheetNames[0]];
const headers = {};
const data = [];
const keys = Object.keys(worksheet);
keys.filter(k => k[0] !== '!')// 过滤以 ! 开头的 key
.forEach(k => {// 遍历所有单元格
let col = k.substring(0, 1);
let row = parseInt(k.substring(1));
let value = worksheet[k].v;
if (row === 1) {
headers[col] = value;
return;
}
if (!data[row]) {
data[row] = {};
}
data[row][headers[col]] = value;
});
data.splice(0, 2);
//转Array为text
let jsText = 'module.exports = [\n';
for (let i = 0; i < data.length; i++) {
jsText += '\t{';
for (let key in data[i]) {
jsText += `${key}:${data[i][key]}, `;
}
jsText = jsText.substr(0, jsText.length - 2);
jsText += '},\n';
}
jsText += '];';
//校验js文件
try {
eval(jsText);
} catch (error) {
Editor.Ipc.sendToPanel('excel2js', 'convert-failed', excelFileName);
return;
}
//写入js文件
let excelFile = excelFileName.substr(0, excelFileName.lastIndexOf('.xlsx'));
let url = `db://assets/data/${excelFile}.js`;
if (Editor.assetdb.exists(url)) {
Editor.assetdb.saveExists(url, jsText, (err) => {
if (err) {
Editor.Ipc.sendToPanel('excel2js', 'convert-failed', excelFileName);
} else {
Editor.Ipc.sendToPanel('excel2js', 'convert-success', excelFileName);
}
});
} else {
Editor.assetdb.create(url, jsText, (err) => {
if (err) {
Editor.Ipc.sendToPanel('excel2js', 'convert-failed', excelFileName);
} else {
Editor.Ipc.sendToPanel('excel2js', 'convert-success', excelFileName);
}
});
}
}
};