Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 0414d58

Browse files
Albert LiAlbert Li
Albert Li
authored and
Albert Li
committed
add lib xlsx update
1 parent cc3ee55 commit 0414d58

File tree

3 files changed

+71
-18
lines changed

3 files changed

+71
-18
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"start:dev": "nodemon src/index.ts",
1111
"format": "prettier --write \"src/**/*.ts\"",
1212
"lint": "eslint '{src,apps,libs,test}/**/*.ts' --fix",
13-
"local": "ts-node src/test/converter.ts"
13+
"local": "ts-node src/test/index.ts"
1414
},
1515
"keywords": [
1616
"leetCode",
@@ -44,4 +44,4 @@
4444
"prettier": "^2.0.5",
4545
"tsconfig-paths": "^3.9.0"
4646
}
47-
}
47+
}

src/test/index.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,32 @@ const check = (IPerson) => {
4040
console.log('query: ', query);
4141
};
4242

43-
check({ personId: '1231', personInfo: { name: 'resr' } });
44-
check([
45-
{ personId: '1231', personInfo: { name: 'resr' } },
46-
{ personId: '4563', personInfo: { name: 'resr' } },
47-
]);
43+
const map: Map<string, number> = new Map(); // Use O(1) time
44+
45+
let i = 0;
46+
47+
let startTimeI = new Date().getUTCMilliseconds();
48+
while (i < 10100) {
49+
map.set(`key${i}`, i);
50+
i++;
51+
}
52+
let out = Array.from(map).reduce((obj, [key, val]) => {
53+
// Map comes with O(n) + Matrix reduce with O(n^2) + Map Write O(1) --> O(n + n^2 + 1)
54+
obj[key] = val;
55+
return obj;
56+
}, {});
57+
let endTimeI = new Date().getUTCMilliseconds();
58+
59+
const map2: object = {}; // Use O(n) time
60+
61+
let j = 0;
62+
63+
let startTimeJ = new Date().getUTCMilliseconds();
64+
while (j < 10100) {
65+
map2[`key${j}`] = j;
66+
j++;
67+
}
68+
let endTimeJ = new Date().getUTCMilliseconds();
4869

49-
console.log('sdf', new Date('Tue May 05 2020 17:06:43 GMT+0800'));
70+
console.log('map0 time', `${endTimeI - startTimeI}ms`);
71+
console.log('map1 time', `${endTimeJ - startTimeJ}ms`);

src/test/newXlsx.ts

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as fs from 'fs-extra';
22
import * as path from 'path';
33
import * as Excel from 'exceljs';
4+
import { coral } from 'color-name';
45

56
export class ExcelFormatter {
67
private _workBook: Excel.Workbook = undefined;
@@ -42,18 +43,42 @@ export class ExcelFormatter {
4243
public async WriteFileToExcel(header: Object[], data: Object[], sheetName: string, fileName: string): Promise<object>;
4344
public async WriteFileToExcel(header: object[], data: object[], sheetName?: string, fileName?: string): Promise<object> {
4445
try {
46+
const time: string = `${new Date().getFullYear()}-${new Date().getMonth()}-${new Date().getDate()}-${new Date().getMinutes()}`;
4547
sheetName = sheetName || 'default-sheet';
46-
fileName = `${fileName}-output` || `excel-output`;
48+
fileName = `${fileName}-output-${time}` || `excel-output-${time}`;
4749
// WorkSheet name must to be created
4850
const workSheet = this._workBook.addWorksheet(sheetName);
4951
// define Header of all columns
5052
workSheet.columns = header;
5153
// declare output Structure
5254
this.SetWorkSheetHeader(header);
5355
// Import data
54-
data.forEach((item) => {
55-
workSheet.addRow(item);
56-
});
56+
57+
for (let i = 0; i < data.length; i++) {
58+
workSheet.addRow(data[i]);
59+
60+
if (data[i]['image']) {
61+
const _image = data[i]['image'];
62+
let image = this._workBook.addImage({
63+
base64: `data:image/jpeg;base64, ${_image}`,
64+
extension: 'jpeg',
65+
});
66+
workSheet.addImage(image, `C${i + 2}:C${i + 2}`);
67+
} else if (data[i]['image1'] && data[i]['image2']) {
68+
const _imageFirst = data[i]['image1'];
69+
const _imageSecond = data[i]['image2'];
70+
let image1 = this._workBook.addImage({
71+
base64: `data:image/jpeg;base64, ${_imageFirst}`,
72+
extension: 'jpeg',
73+
});
74+
let image2 = this._workBook.addImage({
75+
base64: `data:image/jpeg;base64, ${_imageSecond}`,
76+
extension: 'jpeg',
77+
});
78+
workSheet.addImage(image1, `C${i + 2}:C${i + 2}`);
79+
workSheet.addImage(image2, `D${i + 2}:D${i + 2}`);
80+
}
81+
}
5782

5883
await this._workBook.xlsx.writeFile(`${fileName}.xlsx`);
5984

@@ -71,15 +96,21 @@ export class ExcelFormatter {
7196
* @param {string} - workbook name
7297
* @param {string} - worksheet name
7398
*/
74-
public async ReadFileFromExcel(fileName: string, sheetName: string): Promise<object[]> {
99+
public async ReadFileFromExcel(fileName: string, sheetName: string, headers?: Object[]): Promise<object[]> {
75100
try {
76101
// find and load workbook first
77102
const _path: string = path.join(__dirname, `../../${fileName}.xlsx`);
78103
const wb = await this._workBook.xlsx.readFile(_path);
79104
// import sheet
80105
const sheet = wb.getWorksheet(sheetName);
81106
// data processing define
82-
const map = this.GetWorkSheetHeader();
107+
let map = this.GetWorkSheetHeader();
108+
109+
if (Object.keys(map).length <= 0) {
110+
this.SetWorkSheetHeader(headers);
111+
map = this.GetWorkSheetHeader();
112+
}
113+
83114
const mapKeys: string[] = Object.keys(map);
84115
let cols = [];
85116
let results = [];
@@ -92,12 +123,12 @@ export class ExcelFormatter {
92123
});
93124

94125
cols.forEach((col, index, array) => {
95-
// remove default undefined where generated by exceljs
96-
col.slice(1);
126+
let newCols = col.slice(1);
97127
// map data
98128
let temp = {};
99-
col.forEach((val, index, array) => {
100-
temp[mapKeys[index - 1]] = val;
129+
newCols.forEach((val, index, array) => {
130+
// remove default undefined where generated by exceljs
131+
temp[mapKeys[index]] = val;
101132
});
102133
results.push(temp);
103134
});

0 commit comments

Comments
 (0)