const XLSX = require('xlsx');
var base_object = {};
var data;
// taken dt_enum for checking the datatypes of excel
const dt_enum = [{ "hierarchy": 1, "dataType": "boolean" },
{ "hierarchy": 2, "dataType": "number" },
{ "hierarchy": 3, "dataType": "bigint" },
{ "hierarchy": 4, "dataType": "string" }];
var workbook = XLSX.readFile('Book1.xlsx');
var sheet_name_list = workbook.SheetNames;
//sheet names in array
//handle promise
var promise_sheet = [];
sheet_name_list.forEach(async (sheets) => {
promise_sheet.push(
new Promise(async (res, rej) => {
var data_header = XLSX.utils.sheet_to_json(workbook.Sheets[sheets], { header: 1 })[0];
//data_header= only headers in excel
if (Array.isArray(data_header)) {
data_header.forEach(att => {
//iterate over the data headers
base_object[att] = null;
})
//base_object=stored all the headers value null;
xl_data = XLSX.utils.sheet_to_json(workbook.Sheets[sheets]);
//xl_data= headers and values in array of object pair only values assaign
data = xl_data.map(xl_data => {
return { ...base_object, ...xl_data };
//combain base_object and xl_data its no value =null
})
//data= headers and values in array of object with null value
var excel_data = [];
try {
data_header.forEach(columnName => {
var excelData = {};
var dataValue = data.map(x => x[columnName]).filter(x => x !== null);
//dataValue=taking all values from perticular column
var dtHer = 1;
dtHer = dataValue.length > 0 ? dtHer : 4;
//column values=0 defaltly datatype is string
dataValue.forEach((value, index) => {
//value=column value,index = column index
if (index < 10) {//checking for first 10 rows
var rowDataType = typeof value;
//find the datatype with single value
var foundDt = dt_enum.find(her => her.dataType === rowDataType);
//compare with dt_enum hierarchy data with rowDataType and find the hierarchy data
dtHer = dtHer < foundDt.hierarchy ? foundDt.hierarchy : dtHer;
//defalt store string
}
})
var ColumnDataTypeObject = dt_enum.find(dt => dt.hierarchy === dtHer);
//finding datatype all column values
var dataType = typeof ColumnDataTypeObject === 'undefined' ? 'string' : ColumnDataTypeObject.dataType;
//finally datatype
//store dataType,columnName in one variable excelData
excelData['dataType'] = dataType;
excelData['columnName'] = columnName;
excel_data.push(excelData);
})
}
catch (e) {
console.log("Failed to Read Excel-[checkConnectionMicrosoftExcel]", e);
reject({ "status": 400 });
};
console.log(excel_data)// here excel data with dataty_type
}
res();
})
);
await Promise.all(promise_sheet);
});