2
2
const fs = require ( 'fs' ) ;
3
3
const xlsx = require ( 'node-xlsx' ) . default
4
4
5
+ const getCwd = ( ) => process . cwd ( ) ;
6
+
5
7
/**
6
8
*
7
9
* @param {Array } jsonData
8
10
* @returns
9
11
*/
10
12
function flatObject ( jsonData ) {
11
- let stack = [ ]
12
- const retObj = { }
13
- function flat ( obj , index ) {
14
- if ( typeof obj === 'string' ) {
15
- const flatKey = stack . join ( '.' )
16
- const value = retObj [ flatKey ]
17
- if ( ! value ) {
18
- retObj [ flatKey ] = [ ]
19
- }
20
- retObj [ flatKey ] . push ( { index : index , value : obj } )
21
- return obj ;
22
- }
23
- const keys = Object . keys ( obj ) ;
24
- keys . forEach ( key => {
25
- stack . push ( key ) ;
26
- flat ( obj [ key ] , index )
27
- stack . pop ( ) ;
28
- } )
13
+ let stack = [ ]
14
+ const retObj = { }
15
+ function flat ( obj , index ) {
16
+ if ( typeof obj === 'string' ) {
17
+ const flatKey = stack . join ( '.' )
18
+ const value = retObj [ flatKey ]
19
+ if ( ! value ) {
20
+ retObj [ flatKey ] = [ ]
21
+ }
22
+ retObj [ flatKey ] . push ( { index : index , value : obj } )
23
+ return obj ;
29
24
}
25
+ const keys = Object . keys ( obj ) ;
26
+ keys . forEach ( key => {
27
+ stack . push ( key ) ;
28
+ flat ( obj [ key ] , index )
29
+ stack . pop ( ) ;
30
+ } )
31
+ }
30
32
31
- jsonData . forEach ( ( item , index ) => {
32
- flat ( item , index + 1 )
33
- } ) ;
33
+ jsonData . forEach ( ( item , index ) => {
34
+ flat ( item , index + 1 )
35
+ } ) ;
34
36
35
- return retObj ;
37
+ return retObj ;
36
38
}
37
39
38
40
/**
@@ -42,44 +44,57 @@ function flatObject(jsonData) {
42
44
* @returns
43
45
*/
44
46
function handleData ( data , length ) {
45
- const retAry = [ ]
46
- for ( [ key , value ] of Object . entries ( data ) ) {
47
- const tempAry = [ key ]
48
- for ( let i = 1 ; i <= length ; i ++ ) {
49
- if ( value . length && value [ 0 ] . index === i ) {
50
- tempAry [ i ] = value . shift ( ) . value ;
51
- } else {
52
- tempAry [ i ] = null
53
- }
54
- }
55
- retAry . push ( tempAry )
47
+ const retAry = [ ]
48
+ for ( [ key , value ] of Object . entries ( data ) ) {
49
+ const tempAry = [ key ]
50
+ for ( let i = 1 ; i <= length ; i ++ ) {
51
+ if ( value . length && value [ 0 ] . index === i ) {
52
+ tempAry [ i ] = value . shift ( ) . value ;
53
+ } else {
54
+ tempAry [ i ] = null
55
+ }
56
56
}
57
- return retAry ;
57
+ retAry . push ( tempAry )
58
+ }
59
+ return retAry ;
58
60
}
59
61
60
62
function readFile ( ) {
61
- const ary = [ ] ;
62
- ary . push ( require ( './zh.json' ) )
63
- ary . push ( require ( './en.json' ) )
64
- ary . push ( require ( './th.json' ) )
65
- return ary ;
63
+ const ary = [ ] ;
64
+ console . log ( getCwd ( ) )
65
+ const files = fs . readdirSync ( './' )
66
+
67
+ files . forEach ( ( file ) => {
68
+ if ( file . endsWith ( '.json' ) ) {
69
+ ary . push ( require ( `${ getCwd ( ) } /${ file } ` ) )
70
+ }
71
+ } )
72
+
73
+ return ary ;
66
74
}
67
75
68
76
function write ( fileName , sheetName ) {
69
- const files = readFile ( ) ;
70
- const data = flatObject ( files , files . length ) ;
71
- const handledData = handleData ( data , 3 )
72
- fs . writeFileSync ( './test.json' , JSON . stringify ( handledData ) )
73
- const buffer = xlsx . build (
74
- [
75
- {
76
- name : sheetName ,
77
- data : handledData
78
- }
79
- ]
80
- )
77
+ const files = readFile ( ) ;
78
+ const data = flatObject ( files , files . length ) ;
79
+ const handledData = handleData ( data , 3 )
80
+ const buffer = xlsx . build (
81
+ [
82
+ {
83
+ name : sheetName ,
84
+ data : handledData
85
+ }
86
+ ]
87
+ )
81
88
82
- fs . writeFileSync ( `./${ fileName } .xlsx` , buffer )
89
+ fs . writeFileSync ( `./${ fileName } .xlsx` , buffer )
90
+ console . log ( '生成成功' )
83
91
}
84
92
85
- write ( 'translate' , 'sheetName' )
93
+ /**
94
+ *
95
+ * @param {* } fileName 文件名
96
+ * @param {* } sheetName 表名
97
+ */
98
+ exports . jsonToExcel = ( fileName , sheetName ) => {
99
+ write ( fileName , sheetName )
100
+ }
0 commit comments