mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 11:56:00 +00:00
excel sheet reader
This commit is contained in:
28
packages/api/src/shell/excelSheetReader.js
Normal file
28
packages/api/src/shell/excelSheetReader.js
Normal file
@@ -0,0 +1,28 @@
|
||||
const exceljs = require('exceljs');
|
||||
const stream = require('stream');
|
||||
const _ = require('lodash');
|
||||
|
||||
async function excelSheetReader({ fileName, sheetName }) {
|
||||
console.log(`Loading excel ${fileName}`);
|
||||
const workbook = new exceljs.Workbook();
|
||||
await workbook.xlsx.readFile(fileName);
|
||||
const sheet = workbook.getWorksheet(sheetName);
|
||||
|
||||
const pass = new stream.PassThrough({
|
||||
objectMode: true,
|
||||
});
|
||||
const header = sheet.getRow(1);
|
||||
const structure = {
|
||||
columns: _.range(header.cellCount).map((index) => ({ columnName: header.getCell(index + 1).value })),
|
||||
};
|
||||
pass.write(structure);
|
||||
for (let rowIndex = 2; rowIndex <= sheet.rowCount; rowIndex++) {
|
||||
const row = sheet.getRow(rowIndex);
|
||||
pass.write(_.fromPairs(structure.columns.map((col, index) => [col.columnName, row.getCell(index + 1).value])));
|
||||
}
|
||||
pass.end();
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
module.exports = excelSheetReader;
|
||||
@@ -6,6 +6,7 @@ const tableWriter = require('./tableWriter');
|
||||
const copyStream = require('./copyStream');
|
||||
const fakeObjectReader = require('./fakeObjectReader');
|
||||
const consoleObjectWriter = require('./consoleObjectWriter');
|
||||
const excelSheetReader = require('./excelSheetReader');
|
||||
|
||||
module.exports = {
|
||||
queryReader,
|
||||
@@ -14,6 +15,7 @@ module.exports = {
|
||||
runScript,
|
||||
tableWriter,
|
||||
copyStream,
|
||||
excelSheetReader,
|
||||
fakeObjectReader,
|
||||
consoleObjectWriter,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user