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

Появилась необходимость конвертировать 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
21.05.2021, 14:57
    #40071951
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
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
21.05.2021, 15:50
    #40071964
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
Vlad__i__mir,
А так?
var cfb = XLS.read(data, {type: 'binary'});
...
Рейтинг: 0 / 0
22.05.2021, 14:12
    #40072170
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
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
22.05.2021, 15:15
    #40072179
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
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
24.05.2021, 09:17
    #40072369
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
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
24.05.2021, 12:09
    #40072418
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
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
24.05.2021, 14:04
    #40072452
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel в JSON с помощью JavaScript
Vlad__i__mir,
гляньте еще тут,
может натолкнет на решение https://qawithexperts.com/article/javascript/read-excel-file-using-javascript-xlsx-or-xls/239]
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Excel в JSON с помощью JavaScript / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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