powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Excel в JSON с помощью JavaScript
8 сообщений из 8, страница 1 из 1
Excel в JSON с помощью JavaScript
    #40071924
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Появилась необходимость конвертировать Excel в JSON.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
div>
    

    Данные о файле: <input type="text" id="infoFile" />


    <input type="file" id="uploadFile" name="uploadFile" accept=".xls, .xlsx" />


<a> href="#" uname="@fileObj.FileUniqueName" class="uploadData">Загрузить</a>
</div>


На просторах интернета нашел следующею подходящею функцию:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
function filePicked(oEvent) {
    // Get The File From The Input
    var oFile = oEvent.target.files[0];
    var sFilename = oFile.name;
    // Create A File Reader HTML5
    var reader = new FileReader();

    // Ready The Event For When A File Gets Selected
    reader.onload = function(e) {
        var data = e.target.result;
        var cfb = XLS.CFB.read(data, {type: 'binary'});
        var wb = XLS.parse_xlscfb(cfb);
        // Loop Over Each Sheet
        wb.SheetNames.forEach(function(sheetName) {
            // Obtain The Current Row As CSV
            var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);   
            var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);   

            $("#my_file_output").html(sCSV);
            console.log(oJS)
        });
    };
}



Не пойму как мне её вызывать при нажатии на ссылку (что в неё нужно передать), ибо вот эта часть при вызове не срабатывает
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
reader.onload = function (e) {
                var data = e.target.result;
                var cfb = XLS.CFB.read(data, { type: 'binary' });
                var wb = XLS.parse_xlscfb(cfb);
                // Loop Over Each Sheet
                wb.SheetNames.forEach(function (sheetName) {
                    // Obtain The Current Row As CSV
                    var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                    var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                    $("#my_file_output").html(sCSV);
                    console.log(oJS);

                    return oJS;
                });
            };



Я её немного модифицировал под себя:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
var ExcelToJSON = function () {

            // Get The File From The Input
            var oFile = document.getElementById('uploadFile').files[0];
            //var oFile = oFileIn.target.files[0];
            var sFilename = oFile.name;
            // Create A File Reader HTML5
            var reader = new FileReader();

            // Ready The Event For When A File Gets Selected
            reader.onload = function (e) {
                var data = e.target.result;
                var cfb = XLS.CFB.read(data, { type: 'binary' });
                var wb = XLS.parse_xlscfb(cfb);
                // Loop Over Each Sheet
                wb.SheetNames.forEach(function (sheetName) {
                    // Obtain The Current Row As CSV
                    var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                    var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                    $("#my_file_output").html(sCSV);
                    console.log(oJS);

                    return oJS;
                });
            };
            // Tell JS To Start Reading The File.. You could delay this if desired
            reader.readAsBinaryString(oFile);
        }



и вызываю данную функцию внутри обработчика события нажатия на ссылку:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
$(".uploadData").click(function () {
                //var unqiuename = $(this).attr('uname');
                //var url = "http://10.1.48.68:80/uploadinmeta/api/FileApi/uploadData?uniqueName=" + unqiuename
                // var url = "http://localhost:6141/api/FileApi/uploadData?uniqueName=" + unqiuename
                //window.open(url);
                //-----------------------------------------------------------------------------------------------
                var data = ExcelToJSON();
                //data.append("uname", $(this).attr('uname'));  //Other data
                $.ajax({
                    type: "POST",
                    //url: "http://10.1.48.68:80/uploadinmeta/api/FileApi/uploadData",
                    url: "http://localhost:6141/api/FileApi/uploadData",
                    contentType: "application/json;charset=utf-8",
                    processData: false,
                    data: JSON.stringify(data),
                    success: function (response) {
                        alert(response);
                        console.log(response);
                    },
                    error: function (result, status, er) {
                        alert("error: " + result + " status: " + status + " er:" + er);
                    }
                });
            });
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40071951
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad__i__mir,

На строке:
Код: javascript
1.
var cfb = XLS.CFB.read(data, { type: 'binary' });


Выдает ошибку:
авторUncaught TypeError: Cannot read property 'read' of undefined
at FileReader.ExcelToJSON.reader.onload
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40071964
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
А так?
var cfb = XLS.read(data, {type: 'binary'});
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40072170
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
peter64
Vlad__i__mir,
А так?
var cfb = XLS.read(data, {type: 'binary'});


Проблема с прочтением. Вот такую лабудень он выдает на этой строчке, и когда доходит дело до перебора листов (следующий фор), он в него просто не заходит, листы он уже не может прочитать

авторcfb = {opts: {…}, Directory: Array(3), SheetNames: Array(3), Sheets: {…}, Preamble: {…}, …}, data = "ÐÏࡱá\woo...
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40072179
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
peter64, понял почему так происходило - я указывал сразу несколько версий библиотек:
Код: html
1.
2.
3.
4.
<script src="https://cdnjs.cloudflare.com/ajax/libs/xls/0.7.6/xls.min.js"></script>
    @*<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.8/xlsx.full.min.js"></script>*@



После того как я оставил одну ошибка с read ушла. Осталась проблема в том, что вот так работает:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
var oFileIn;

        $(function () {
            oFileIn = document.getElementById('uploadFile');
            if (oFileIn.addEventListener) {
                oFileIn.addEventListener('change', ExcelToJSON, false);
            }
        });

        function ExcelToJSON(oEvent) {

            // Get The File From The Input
            var oFile = oEvent.target.files[0];
            var sFilename = oFile.name;
            // Create A File Reader HTML5
            var reader = new FileReader();

            // Ready The Event For When A File Gets Selected
            reader.onload = function (e) {
                var data = e.target.result;
                var cfb = XLS.CFB.read(data, { type: 'binary' });
                var wb = XLS.parse_xlscfb(cfb);
                // Loop Over Each Sheet
                wb.SheetNames.forEach(function (sheetName) {
                    // Obtain The Current Row As CSV
                    var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                    var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                    $("#my_file_output").html(sCSV);
                    console.log(oJS)
                });
            };

            // Tell JS To Start Reading The File.. You could delay this if desired
            reader.readAsBinaryString(oFile);
        



а вот так не работает:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
$(".uploadData").click(function () {
                var data = ExcelToJSON();
                //data.append("uname", $(this).attr('uname'));  //Other data
                $.ajax({
                    type: "POST",
                    //url: "http://10.1.48.68:80/uploadinmeta/api/FileApi/uploadData",
                    url: "http://localhost:6141/api/FileApi/uploadData",
                    contentType: "application/json;charset=utf-8",
                    processData: false,
                    data: JSON.stringify(data),
                    success: function (response) {
                        alert(response);
                        console.log(response);
                    },
                    error: function (result, status, er) {
                        alert("error: " + result + " status: " + status + " er:" + er);
                    }
                });
            });

        var ExcelToJSON = function () {

            // Get The File From The Input
            var oFile = document.getElementById('uploadFile').files[0];
            //var oFile = oFileIn.target.files[0];
            var sFilename = oFile.name;
            // Create A File Reader HTML5
            var reader = new FileReader();

        var json_objects = []
        // Ready The Event For When A File Gets Selected
        reader.onload = function (e) {
            var data = e.target.result;
            var cfb = XLS.CFB.read(data, { type: 'binary' });
            var wb = XLS.parse_xlscfb(cfb);
            // Loop Over Each Sheet
            wb.SheetNames.forEach(function (sheetName) {
                // Obtain The Current Row As CSV
                var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                var json_object = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                json_objects.push(json_object);
                $("#my_file_output").html(sCSV);
                console.log(json_object)
                
                });
            };
            return json_objects;
        // Tell JS To Start Reading The File.. You could delay this if desired
        reader.readAsBinaryString(oFile);
        }



вот эта часть кода в последнем варианте не исполняется:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 reader.onload = function (e) {
            var data = e.target.result;
            var cfb = XLS.CFB.read(data, { type: 'binary' });
            var wb = XLS.parse_xlscfb(cfb);
            // Loop Over Each Sheet
            wb.SheetNames.forEach(function (sheetName) {
                // Obtain The Current Row As CSV
                var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                var json_object = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                json_objects.push(json_object);
                $("#my_file_output").html(sCSV);
                console.log(json_object)
                
                });
            };
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40072369
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
пример на StackOverflow
// Ready The Event For When A File Gets Selected
reader.onload = function(e) {
var data = e.target.result;
var cfb = XLSX.read(data, {type: 'binary'});
// Loop Over Each Sheet
cfb.SheetNames.forEach(function(sheetName) {
var sCSV = XLS.utils.make_csv(cfb.Sheets[sheetName]);
var oJS = XLS.utils.sheet_to_json(cfb.Sheets[sheetName]);
alert(oJS);
alert(sCSV);
});
};
// Tell JS To Start Reading The File.. You could delay this if desired
reader.readAsBinaryString(oFile);
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40072418
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
peter64, не, не срабатывает. Проблема в том, что если смотреть через отладчик, то он даже не заходит вот в эту часть функции:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
reader.onload = function (e) {
            var data = e.target.result;
            var cfb = XLS.CFB.read(data, { type: 'binary' });
            var wb = XLS.parse_xlscfb(cfb);
            // Loop Over Each Sheet
            wb.SheetNames.forEach(function (sheetName) {
                // Obtain The Current Row As CSV
                var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
                var json_object = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

                json_objects.push(json_object);
                $("#my_file_output").html(sCSV);
                console.log(json_object)
                
                });
            };


дойдя да этой части он встает вот на эту строку:
Код: javascript
1.
reader.onload = function (e) {


а потом сразу перепрыгивает на строку за этой функцией:
Код: javascript
1.
  return json_objects;
...
Рейтинг: 0 / 0
Excel в JSON с помощью JavaScript
    #40072452
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
гляньте еще тут,
может натолкнет на решение https://qawithexperts.com/article/javascript/read-excel-file-using-javascript-xlsx-or-xls/239]
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Excel в JSON с помощью JavaScript
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]