Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /