Как изменить структуру JSON при использовании пакета XLSX для преобразования XLSX в JSON? | Angular

#angular #typescript

#angular #typescript

Вопрос:

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

Например:

Прямо сейчас мой ввод в Excel выглядит следующим образом:

вопрос данные
OptionA данные
OptionB данные
optionC данные
optionD данные
optionE данные
объяснение данные

Это для листа 1, и тот же формат для листа 2.

И после преобразования я получаю следующее:

 "Sheet 1": Array(6) [ {…}, {…}, {…}, … ]
​​
0: Object { question: "optionA", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 4
​​​
question: "optionA"
​​​
<prototype>: Object { … }
​​
1: Object { question: "optionB", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 5
​​​
question: "optionB"
​​​
<prototype>: Object { … }
​​
2: Object { question: "optionC", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 6
​​​
question: "optionC"
​​​
<prototype>: Object { … }
​​
3: Object { question: "optionD", "Data 1": "Data 1", … }
​​
4: Object { question: "optionE", "Data 1": "Data 1", … }
​​
5: Object { question: "explanation", "Data 1": "Data 1", … }

"Sheet 2": Array(6) [ {…}, {…}, {…}, … ]
​​
0: Object { question: "optionA", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 4
​​​
question: "optionA"
​​​
<prototype>: Object { … }
​​
1: Object { question: "optionB", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 5
​​​
question: "optionB"
​​​
<prototype>: Object { … }
​​
2: Object { question: "optionC", "Data 1": "Data 1", … }
​​​
"Data 1": "Data 1"
​​​
__rowNum__: 6
​​​
question: "optionC"
​​​
<prototype>: Object { … }
​​
3: Object { question: "optionD", "Data 1": "Data 1", … }
​​
4: Object { question: "optionE", "Data 1": "Data 1", … }
​​
5: Object { question: "explanation", "Data 1": "Data 1", … }
 

И я хочу, чтобы это было так:

 "Sheet 1": Array [ {…} ]
​​
0: Object { question: "data", optionA: "data", optionB: "data", … }
​​​
__rowNum__: 1
​​​
explanation: "data"
​​​
optionA: "data"
​​​
optionB: "data"
​​​
optionC: "data"
​​​
optionD: "data"
​​​
optionE: "data"
​​​
question: "data"
​​​
<prototype>: Object { … }
​​
length: 1
​​
<prototype>: Array []
​
"Sheet 2": Array [ {…} ]
​​
0: Object { question: "data", optionA: "data", optionB: "data", … }
​​​
__rowNum__: 1
​​​
explanation: "data"
​​​
optionA: "data"
​​​
optionB: "data"
​​​
optionC: "data"
​​​
optionD: "data"
​​​
optionE: "data"
​​​
question: "data"
​​​
<prototype>: Object { … }
 

Моя функция, которую я использую для преобразования:

 incomingExcel(event: any) {
let workBook = null;
    let jsonData = null;
    const reader = new FileReader();
    const file = event.target.files[0];
    reader.onload = (event) => {
      const data = reader.result;
      workBook = XLSX.read(data, { type: 'binary' });
      jsonData = workBook.SheetNames.reduce((initial, name) => {
        const sheet = workBook.Sheets[name];
        initial[name] = XLSX.utils.sheet_to_json(sheet, { raw: true });
        return initial;
      }, {});
      console.log('Json Output', jsonData);
    };
    reader.readAsBinaryString(file);
}
 

Ссылка на пакет: https://github.com/SheetJS/sheetjs#parsing-options