Skip to content
This repository was archived by the owner on Mar 24, 2024. It is now read-only.

Commit 970154e

Browse files
committed
Add the ability to use Excel files in database
1 parent ccca49e commit 970154e

File tree

2 files changed

+71
-17
lines changed

2 files changed

+71
-17
lines changed

index.js

Lines changed: 68 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ const csv = require("csv-parser");
1313
const crypto = require("crypto-js");
1414
const Fuse = require("fuse.js");
1515
const colors = require("./lib/colors");
16-
const XLSX = require("xlsx");
16+
const ExcelJS = require("exceljs");
17+
const json2xls = require("json2xls");
1718

1819
function formatDateTime(date) {
1920
const year = date.getFullYear();
@@ -335,6 +336,10 @@ class jsonverse {
335336
const csvString = await this.convertToCSV(csvData);
336337
await fs.writeFile(filePath, csvString, "utf8");
337338
this.logSuccess(`Data exported to CSV: ${filePath}`);
339+
} else if (format === "xlsx") {
340+
// Export as XLSX using exceljs
341+
const filePath = this.getFilePath(dataName + ".xlsx");
342+
await this.writeDataToXLSX(filePath, data);
338343
}
339344
}
340345

@@ -351,15 +356,14 @@ class jsonverse {
351356
const csvData = await this.readCSV(filePath);
352357
await this.writeDataByFileName(dataName, csvData);
353358
this.logSuccess(`Data imported from CSV: ${filePath}`);
354-
} else if (fileExtension === ".xlsx" || ".xls") {
355-
// Import XLSX data
356-
const xlsData = await fs.promises.readFile(filePath);
357-
const newData = this.xlsToJSON(xlsData);
358-
await this.writeDataByFileName(dataName, newData);
359+
} else if (format === "xlsx") {
360+
// Import XLSX data using exceljs
361+
const xlsxData = await this.readXLSX(filePath);
362+
await this.writeDataByFileName(dataName, xlsxData);
359363
this.logSuccess(`Data imported from XLSX: ${filePath}`);
360364
} else {
361365
// Handle unsupported file format
362-
this.logError(`Unsupported file format: ${fileExtension}`);
366+
this.logError(`Unsupported file format: ${format}`);
363367
}
364368
}
365369

@@ -390,23 +394,71 @@ class jsonverse {
390394
});
391395
}
392396

393-
// Function to read data from an XLSX file
397+
// Function to read data from an XLSX file using exceljs
394398
async readXLSX(filePath) {
395399
try {
396-
const xlsData = await fs.promises.readFile(filePath);
397-
const parsedData = this.xlsToJSON(xlsData);
398-
return parsedData;
400+
const workbook = new ExcelJS.Workbook();
401+
await workbook.xlsx.readFile(filePath);
402+
const worksheet = workbook.getWorksheet(1); // Assuming there's only one sheet
403+
404+
const data = [];
405+
worksheet.eachRow((row, rowNumber) => {
406+
if (rowNumber !== 1) {
407+
const rowData = row.values.map((cell) => cell);
408+
data.push(rowData);
409+
}
410+
});
411+
412+
return data;
399413
} catch (error) {
400414
this.logError(`Reading XLSX file: ${error}`);
401415
return null;
402416
}
403417
}
404418

405-
async jsonToXLS(data, sheetName = "Sheet1") {
406-
const ws = XLSX.utils.json_to_sheet(data);
407-
const wb = XLSX.utils.book_new();
408-
XLSX.utils.book_append_sheet(wb, ws, sheetName);
409-
return XLSX.write(wb, { bookType: "xlsx", type: "buffer" });
419+
// Helper method to write data to an XLSX file using exceljs
420+
async writeDataToXLSX(filePath, data) {
421+
const workbook = new ExcelJS.Workbook();
422+
const worksheet = workbook.addWorksheet("Sheet1");
423+
424+
// Add headers to the worksheet
425+
if (data.length > 0) {
426+
const headers = Object.keys(data[0]);
427+
worksheet.addRow(headers);
428+
}
429+
430+
// Add data rows to the worksheet
431+
data.forEach((row) => {
432+
worksheet.addRow(Object.values(row));
433+
});
434+
435+
await workbook.xlsx.writeFile(filePath);
436+
this.logSuccess(`Data exported to XLSX: ${filePath}`);
437+
}
438+
439+
// Export Data to XLSX
440+
async exportDataToXLSX(dataName) {
441+
const data = await this.readData(dataName);
442+
443+
// Check if the data is empty
444+
if (data.length === 0) {
445+
this.logError(`No data to export in ${dataName}.`);
446+
return;
447+
}
448+
449+
// Create an XLSX object from the JSON data
450+
const xls = json2xls(data);
451+
452+
// Specify the file path where the XLSX file will be saved
453+
const filePath = this.getFilePath(dataName + ".xlsx");
454+
455+
try {
456+
// Save the XLSX data to the file
457+
fs.writeFileSync(filePath, xls, "binary");
458+
this.logSuccess(`Data exported to XLSX: ${filePath}`);
459+
} catch (error) {
460+
this.logError(`Failed to export data to XLSX: ${error}`);
461+
}
410462
}
411463

412464
// Function to convert XLS data to JSON

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@
6666
"crypto-js": "^4.1.1",
6767
"csv-parser": "^3.0.0",
6868
"dateformat": "^5.0.3",
69+
"exceljs": "^4.3.0",
6970
"fuse.js": "^6.6.2",
70-
"json2csv": "^6.0.0-alpha.2"
71+
"json2csv": "^6.0.0-alpha.2",
72+
"json2xls": "^0.1.2"
7173
},
7274
"devDependencies": {
7375
"chai": "^4.3.8",

0 commit comments

Comments
 (0)