如何从上传的Excel表格中获取列的数据类型

问题描述 投票:0回答:1

我正在使用 XLSX npm 库将 excel 工作表解析为 json。我将所有数据作为字符串获取。

XLSX 阅读 | Stackblitz 演示

如何使用 XLSX 获取列的数据类型或者是否有任何支持该数据类型的库?

javascript typescript xlsx
1个回答
0
投票
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);
});
© www.soinside.com 2019 - 2024. All rights reserved.