HOW TO UPLOAD AND READ XLSX FILE

May 13, 2022

ุงู„ุณู„ุงู… ุนู„ูŠูƒู… ๐Ÿ‘‹

 

ุงู„ู†ู‡ุงุฑุฏู‡ ู‡ู†ุดูˆู ุฅุฒุงูŠ ู†ุฑูุน ูˆ ู†ู‚ุฑุฃ ูุงูŠู„ XLSX ุจุฅุณุชุฎุฏุงู… ุงู„ุฌุงูุง ุฅุณูƒุฑุจุช ๐Ÿ“„

 

ุขุฎุฑ ุจุฑูˆุฌูƒุช ุฅุดุชุบู„ุช ุนู„ูŠู‡ ูƒุงู† ู…ุทู„ูˆุจ ู…ู†ูŠ ุฃุฑูุน ูˆ ุฃู‚ุฑุฃ ูุงูŠู„ XLSX ูˆ ุฃุนุฑุถู‡ ููŠ ุฌุฏูˆู„ ุนุดุงู† ูŠุธู‡ุฑ ู„ู„ูŠูˆุฒุฑ, ุงู„ูุงูŠู„ ุฏุง ุจูŠูƒูˆู† ููŠู‡ ุจูŠุงู†ุงุช ุงู„ุทู„ุงุจ ูˆ ุนู…ู„ุช ุณูŠุฑุด ูˆ ู„ู‚ูŠุช sheetJS, ูˆ ุงู„ู…ูˆุถูˆุน ูƒุงู† ู…ูุชุบูŠุฑ ุจุดูƒู„ ูƒุจูŠุฑ ู„ุฃู† ู„ูƒู„ ุตู ุฏุฑุงุณูŠ ู…ูˆุงุฏ ุฎุงุตุฉ ุจูŠู‡  ูˆ ู„ูƒู„ ู…ุงุฏุฉ ุงู„ุฏุฑุฌุฉ ุงู„ุฎุงุตุฉ ุจูŠู‡ุง ูุง ูƒุงู† ู„ุงุฒู… ุฃุนู…ู„ ุญุงุฌุฉ ู…ูุฎุชุฑู…ุฉ ุชู…ุดูŠ ู…ุน ุงู„ู…ูˆุถูˆุน ุฏุง, ุจุฑุถูˆ ูƒุงู† ู„ูƒู„ ุฏุฑุฌุฉ ุญุฏ ุฃู‚ุตูŠ ูุง ูƒุงู† ู„ุงุฒู… ุฃุดูŠูƒ ุนู„ูŠ ูƒู„ ุงู„ุฏุฑุฌุงุช ุงู„ู„ูŠ ุจู‚ุฑุฃู‡ุง ู…ู† ุงู„ูุงูŠู„ ุจุญูŠุซ ุฅู†ู‡ุง ุชูƒูˆู† ุฃู‚ู„ ู…ู† ุฃูˆ ุชุณุงูˆูŠ ุงู„ุญุฏ ุงู„ุฃู‚ุตูŠ ูุง ุชุนุงู„ูˆุง ูƒุฏุง ู†ุดูˆู ุงู„ูƒูˆุฏ ุดูƒู„ู‡ ู‡ูŠุจู‚ูŠ ุนุงู…ู„ ุฅุฒุงูŠ ๐Ÿค”

 

var yourColumnsNames = ["name", "arabic", "english", "art", "music"];
var maxDegrees = [20, 30, 30, 15];

 

ุฃูˆู„ุงู‹ ูƒุฏุง ุฏูˆู„ ุงู„ู…ูุชุบูŠุฑุงุช ุงู„ู„ูŠ ู‡ุณุชุฎุฏู…ู‡ู… ููŠ ูƒู„ ุดุบู„ูŠ, ุฃูˆู„ ู…ูุชุบูŠุฑ ุฏุง ููŠู‡ ุฃุณู…ุงุก ุงู„ุฃุนู…ุฏู‡ ุงู„ู„ูŠ ู…ุชูˆู‚ุน ุฅู†ู‡ุง ุชูƒูˆู† ู…ูˆุฌูˆุฏุฉ ููŠ ุงู„ูุงูŠู„, ูˆ ุชุงู†ูŠ ู…ูุชุบูŠุฑ ุฏุง ููŠู‡ ุงู„ุญุฏ ุงู„ุฃู‚ุตูŠ ู„ูƒู„ ุฏุฑุฌุฉ ู…ูˆุฌูˆุฏุฉ ููŠ ุงู„ูุงูŠู„, ุทุจุนุงู‹ ุงู„ุจูŠุงู†ุงุช ุฏูŠ ุจุชูƒูˆู† ู…ุชุฎุฒู†ุฉ ุนู„ูŠ ุงู„ุณูŠุณุชู… ู…ู† ุฎู„ุงู„ ุงู„ุฃุฏู…ู† ๐Ÿคด

 

function setStudentMarksDataRow(rowNumber, currentRow = null) {
    var body = null, column = 0;

    const prefix = `<tr id="student_row_data_${rowNumber}"><td><label>${rowNumber}
    </label><td><td><input type="text" class="form-control" name="students_names[]" style="width:400px;"
    value="${currentRow ? currentRow[yourColumnsNames[column]] : ''}"></td>`;

    column += 1;
    // `-1` to exclude the `name` column
    for (; column < yourColumnsNames.length - 1; column++) {
        body += `<td><input type="number" class="form-control input_mark_${rowNumber}" name="marks[]"
        value="${currentRow ? currentRow[yourColumnsNames[column]] : ''}" min="0" onchange="checkInputMaxDegree(${rowNumber});"></td>`;
    }

    return `${prefix}${body}<td><input type="number" class="form-control"
     id="marks_sum_${rowNumber}" name="marks[]" value="${currentRow ? currentRow[yourColumnsNames[column]] : ''}"
     min="0" readonly></td></tr>`;
}

 

ุซุงู†ูŠุงู‹ ุงู„ุฏุงู„ุฉ ุฏูŠ ู…ู† ุฎู„ุงู„ู‡ุง ุจู‚ุฑุฃ ูƒู„ ุตู ููŠ ุงู„ูุงูŠู„ ูˆ ุจุนุฑุถู‡ ููŠ ุฌุฏูˆู„ ุนุดุงู† ูŠุธู‡ุฑ ู„ู„ูŠูˆุฒุฑ ๐Ÿ‘‡

 

function getMarksSum(rowNumber) {
    var marksInputs = document.getElementsByClassName(`input_mark_${rowNumber}`);
    var marksSum = 0;

    for (var i = 0; i < marksInputs.length; i++) {
        var currentValue = isNaN(parseInt(marksInputs[i].value)) ? 0 : parseInt(marksInputs[i].value);
        marksSum += currentValue;
    }

    document.getElementById(`marks_sum_${rowNumber}`).value = marksSum;
}

 

ุซุงู„ุซุงู‹ ุนู…ู„ุช ุฏุงู„ุฉ ู…ู† ุฎู„ุงู„ู‡ุง ุจุฌู…ุน ูƒู„ ุงู„ุฏุฑุฌุงุช ุงู„ู„ูŠ ุชู… ู‚ุฑุงุกุชู‡ุง ูˆ ุจุนุฏูŠู† ุจุนุฑุถู‡ุง ููŠ ู…ูุฑุจุน ู†ุตูŠ ๐Ÿ‘€

 

function checkInputMaxDegree(rowNumber) {
    var validMaxDegreesCount = 0;

    for (var i = 0; i < $("input[name='marks[]']").length; i++) {
        if (parseInt($("input[name='marks[]']")[i].value) > parseInt(maxDegrees[i % maxDegrees.length])) {
            $('#button_error').text(`the current value must be less than or equal ${maxDegrees[i % maxDegrees.length]}.`);
            validMaxDegreesCount += 1;
        } else {
            validMaxDegreesCount -= 1;
        }
    }

    if (validMaxDegreesCount * -1 >= $("input[name='marks[]']").length) {
        getMarksSum(rowNumber);
    }
}

 

ุฑุงุจุนุงู‹ ุนู…ู„ุช ุฏุงู„ุฉ ู…ู† ุฎู„ุงู„ู‡ุง ุจุดูŠูƒ ุนู„ูŠ ุงู„ุญุฏ ุงู„ุฃู‚ุตูŠ ู„ูƒู„ ุฏุฑุฌุฉ โฌ†

 

$('input[type=file]').change(function () {
    const uploadedFile = $(this)[0].files[0];

    if (uploadedFile.name.split('.').pop() == 'xlsx') {
        var reader = new FileReader();

        if (reader.readAsBinaryString) {
            reader.onload = function (e) {
                var workbook = XLSX.read(e.target.result, { type: 'binary' }), columnNotExists = false;

                // Read the first sheet ONLY
                var sheetRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[workbook.SheetNames[0]]);

                // You can check the columns count in the sheet
                if (Object.keys(sheetRows[0]).length != yourColumnsNames.length) {
                    console.log('please make sure that the columns count are equivalent.');
                    return false;
                }

                // You can check the columns name also
                Object.keys(sheetRows[0]).forEach(function (key, index) {
                    if (yourColumnsNames[index] != key) {
                        console.log(`column ${yourColumnsNames[index]} not exists.`);
                        columnNotExists = true;
                    }
                });

                if (columnNotExists) {
                    return false;
                }

                $("tbody").html(null);

                // Loop over each row and get the sum of each mark
                sheetRows.map(function (row, index) {
                    $("tbody").append(setStudentMarksDataRow(index + 1, row));
                    getMarksSum(index + 1);
                    checkInputMaxDegree(index + 1);
                });
            };

            reader.readAsBinaryString(uploadedFile);
        }
    } else {
        console.log("file extension is invalid.");
    }
});

 

ูˆ ุฏูŠ ูƒุงู†ุช ุขุฎุฑ ุญุงุฌุฉ ู…ุนุงู†ุง ูˆ ู‡ูŠ ุฅู†ูŠ ุจู‚ุฑุฃ ุงู„ูุงูŠู„ ุงู„ู…ุฑููˆุน ูˆ ุจุณุชุฎุฏู… ูƒู„ ุงู„ุฏูˆุงู„ ุงู„ู„ูŠ ููˆู‚ ุฏูŠ ุฃุซู†ุงุก ุนู…ู„ูŠุฉ ุงู„ู‚ุฑุงุกุฉ ๐Ÿ˜Ž

 

ูˆ ุฃุฎูŠุฑุงู‹ ู„ูŠู†ูƒ ุงู„ุจุฑูˆุฌูƒุช ๐Ÿš€

 

ูˆ ุจูƒุฏุง ุฃูƒูˆู† ุฎู„ุตุช ูˆ ุฃุชู…ู†ูŠ ุชูƒูˆู† ุฅุณุชูุฏุช โœ”


AI Assistant

Choose AI provider

Text Tools

Make content clear and easy to read

Have a Question?

Get clear answers based on this content

0/500
Mahmoud Ramadan

Mahmoud Ramadan

Mahmoud is the creator of Digging Code and a contributor to Laravel since 2020.