My website becomes unresponsive when dealing 1000 rows excel file

Viewed 22

I am uploading data from an excel file into my website using input html button. and then convert the data into json and then I map it with local external metadata. Finally view it using the id. My website becomes unresponsive & sometimes takes a lot of time processing. Please help

    function ExportToTable() {
        var regex = /^([a-zA-Z0-9\s_\\.\-:()])+(.xlsx|.xls)$/;
        /*Checks whether the file is a valid excel file*/
        if (regex.test($("#excelfile").val().toLowerCase())) {
            var xlsxflag = false; /*Flag for checking whether excel is .xls format or .xlsx format*/
            if ($("#excelfile").val().toLowerCase().indexOf(".xlsx") > 0) {
                xlsxflag = true;
            }
            /*Checks whether the browser supports HTML5*/
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();
                reader.onload = function (e) {
                    var data = e.target.result;
                    /*Converts the excel data in to object*/
                    if (xlsxflag) {
                        var workbook = XLSX.read(data, { type: 'binary' });
                    }
                    else {
                        var workbook = XLS.read(data, { type: 'binary' });
                    }
                    /*Gets all the sheetnames of excel in to a variable*/
                    var sheet_name_list = workbook.SheetNames;
                    console.log(sheet_name_list);
                    var cnt = 0; /*This is used for restricting the script to consider only first 
    
        sheet of excel*/
                        sheet_name_list.forEach(function (y) { /*Iterate through all sheets*/
                            /*Convert the cell value to Json*/
                            if (xlsxflag) {
                                var exceljson = XLSX.utils.sheet_to_json(workbook.Sheets[y]);
                            }
                            else {
                                var exceljson = XLS.utils.sheet_to_row_object_array(workbook.Sheets[y]);
                            }
                             //Download & View Subscriptions
    
    
      if (exceljson.length > 0 && cnt == 1) {
                                metadata = [];
                                fetch("metadata.json")
                                    .then(response => response.json())
                                    .then(json => {
                                        metadata = json;
                                        console.log(metadata);
                                        user_metadata1 = [], obj_m_processed = [];
                                        for (var i in exceljson) {
                                            var obj = { email: exceljson[i].email, name: exceljson[i].team_alias, id: exceljson[i].autodesk_id };
                                            for (var j in metadata) {
                                                if (exceljson[i].email == metadata[j].email) {
                                                    obj.GEO = metadata[j].GEO;
                                                    obj.COUNTRY = metadata[j].COUNTRY;
                                                    obj.CITY = metadata[j].CITY;
                                                    obj.PROJECT = metadata[j].PROJECT;
                                                    obj.DEPARTMENT = metadata[j].DEPARTMENT;
                                                    obj.CC=metadata[j].CC;
                                                  obj_m_processed[metadata[j].email] = true;
                                                }
                                            }
                                            obj.GEO = obj.GEO || '-';
                                            obj.COUNTRY = obj.COUNTRY || '-';
                                            obj.CITY = obj.CITY || '-';
                                            obj.PROJECT = obj.PROJECT || '-';
                                            obj.DEPARTMENT = obj.DEPARTMENT || '-';
                                            obj.CC = obj.CC || '-';
                                                 
                                            user_metadata1.push(obj);
                                        }
                                        for (var j in metadata) {
                                            if (typeof obj_m_processed[metadata[j].email] == 'undefined') {
                                                user_metadata1.push({ email: metadata[j].email, name: metadata[j].name, id: metadata[j].autodesk_id,
                                                     GEO: metadata[j].GEO,
                                                     COUNTRY : metadata[j].COUNTRY,
                                                    CITY : metadata[j].CITY,
                                                    PROJECT : metadata[j].PROJECT,
                                                    DEPARTMENT : metadata[j].DEPARTMENT,
                                                    CC:metadata[j].CC
                                                 
                                                    
                                                
                                                
                                                
                                                
                                                });
                                            }
                                        }
                                        document.getElementById("headings4").innerHTML = "MetaData Mapping";
                                       BindTable(user_metadata1, '#user_metadata1
        
                    cnt++;
                });
                $('#exceltable').show();
            }
            if (xlsxflag) {/*If excel file is .xlsx extension than creates a Array Buffer from excel*/
                reader.readAsArrayBuffer($("#excelfile")[0].files[0]);
            }
            else {
                reader.readAsBinaryString($("#excelfile")[0].files[0]);
            }
        }
        else {
            alert("Sorry! Your browser does not support HTML5!");
        }
    }
    else {
        alert("Please upload a valid Excel file!");
    }
}
       

Here is how the json is bind after mapping metadata

 function BindTable(jsondata, tableid) {/*Function used to convert the JSON array to Html Table*/
            var columns = BindTableHeader(jsondata, tableid); /*Gets all the column headings of Excel*/
            for (var i = 0; i < jsondata.length; i++) {
                var row$ = $('<tr/>');
                for (var colIndex = 0; colIndex < columns.length; colIndex++) {
                    var cellValue = jsondata[i][columns[colIndex]];
                    if (cellValue == null)
                        cellValue = "";
                    row$.append($('<td/>').html(cellValue));
                }
                $(tableid).append(row$);
            }
        }
        function BindTableHeader(jsondata, tableid) {/*Function used to get all column names from JSON and bind the html table header*/
            var columnSet = [];
            var headerTr$ = $('<tr/>');
            for (var i = 0; i < jsondata.length; i++) {
                var rowHash = jsondata[i];
                for (var key in rowHash) {
                    if (rowHash.hasOwnProperty(key)) {
                        if ($.inArray(key, columnSet) == -1) {/*Adding each unique column names to a variable array*/
                            columnSet.push(key);
                            headerTr$.append($('<th/>').html(key));
                        }
                    }
                }
            }
            $(tableid).append(headerTr$);
            return columnSet;
        }
0 Answers
Related