Как я могу создать массивы из ячеек Excel с SheetJS? - PullRequest
0 голосов
/ 25 октября 2018

Справочная информация:

Я пытаюсь создать файл JSON из огромного и сложного файла xlsx.Тем не менее, я опубликую небольшой пример здесь, чтобы мы могли сделать его простым.Я придумал следующий код SheetJS :

Код:

<!doctype html>
<html>
<head>
<title>Excel to JSON Demo</title>
<script src="xlsx.full.min.js"></script>
</head>
<body>

<script>
/* set up XMLHttpRequest */
var url = "array test.xlsx";
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

oReq.onload = function(e) {
  var arraybuffer = oReq.response;

  /* convert data to binary string */
  var data = new Uint8Array(arraybuffer);
  var arr = new Array();
  for(var i = 0; i != data.length; ++i)
    arr[i] = String.fromCharCode(data[i]);
  var bstr = arr.join("");

  /* Call XLSX */
  var workbook = XLSX.read(bstr, {type:"binary"});

  /* DO SOMETHING WITH workbook HERE */
  var first_sheet_name = workbook.SheetNames[0];
  /* Get worksheet */
  var worksheet = workbook.Sheets[first_sheet_name];
  console.log(XLSX.utils.sheet_to_json(worksheet,{raw:true}));
}

oReq.send();
</script>
</body>
</html>

Проблема:

Я использовал этот код для преобразования следующего простого xlsx файла .Теперь проблема в том, что я не получаю ожидаемый файл JSON.

Что я получаю:

(6) […]
0: {…}
Blocklist: "id"
__EMPTY: "name"
__EMPTY_1: "type"
__EMPTY_2: "blocks"
__rowNum__: 1
version: 1
<prototype>: Object { … }
​
1: {…}
Blocklist: "dsts"
__EMPTY: "grupo"
__EMPTY_1: 2
__EMPTY_2: "sort ID"
__EMPTY_3: "exercises"
__rowNum__: 2
<prototype>: Object { … }
​
2: {…}
__EMPTY_2: 1
__EMPTY_3: "dsts1"
__EMPTY_4: "dsts2"
__EMPTY_5: "dsts3"
__rowNum__: 3
<prototype>: Object { … }

3: {…}
__EMPTY_2: 2
__EMPTY_3: "dsts4"
__EMPTY_4: "dsts5"
__EMPTY_5: "dsts6"
__rowNum__: 4
<prototype>: Object { … }
​
4: {…}
Blocklist: "afus"
__EMPTY: "Fußtechnik"
__EMPTY_1: 1
__EMPTY_2: 1
__EMPTY_3: "afus1"
__EMPTY_4: "afus2"
__EMPTY_5: "afus3"
__rowNum__: 5
<prototype>: Object { … }
​
5: {…}
__EMPTY_2: 2
__EMPTY_3: "afus4"
__EMPTY_4: "afus5"
__EMPTY_5: "afus6"
__rowNum__: 6
<prototype>: Object { … }
length: 6
<prototype>: Array []

Что мне нужно:

{
      "version": "1.0",
      "blocklist": [
        {
          "id" : "dsts",
          "name": "grupo",
          "type" : 2,
          "blocks": [
            {
              "sortId": 1,
              "exercises": [
                "dsts1",
                "dsts2",
                "dsts3"
              ]
            },
            {
              "sortId": 2,
              "exercises": [
                "dsts4",
                "dsts5",
                "dsts6"
              ]
            }
          ]
        },
        {
          "id" : "afus",
          "name": "Fußtechnik",
          "type" : 1,
          "blocks": [
            {
              "sortId": 1,
              "exercises": [
                "afus1",
                "afus2",
                "afus3"
              ]
            },
            {
              "sortId": 2,
              "exercises": [
                "afus4",
                "afus5",
                "afus6"
              ]
            }
          ]
        }
       ]
      }

Вопрос:

Совершенно очевидно, что у меня есть 2 варианта: либо я адаптирую файл Excel в соответствии с моим кодом JS, либо я адаптирую код длясопоставьте файл Excel.Я готов сделать что-то из этого, но я думаю, что адаптация кода была бы более разумной, поскольку файл Excel должен постоянно обновляться и расширяться в будущем.Так что я должен изменить / добавить к коду, чтобы он выводил нужный формат JSON?


Другая информация:

  • ОС:macOS 10.14 Mojave
  • SheetJS Версия: 0.14.0
...