преобразование в json вложенных ячеек Sheet.js
Есть задача переобразовать xlsx файл в JSON, в файле имеются объединенные ячейки, в примере, это главная задача. При преобразовании, я просто разбиваю эту ячейку на каждую вложенную подзадачу.
пример файла:
для обработки я использую этот код:
template
input(type="file" id="file" @change="onChange" @click="$event.target.value=null")
onChange (event) {
this.file = event.target.files ? event.target.files[0] : null
if (this.file) {
this.file.arrayBuffer().then((res) => {
const data = new Uint8Array(res)
const workbook = XLSX.read(data, { type: 'array' })
const sheetNames = workbook.SheetNames
for (let worksheet of sheetNames) {
if (workbook.Sheets[worksheet]['!merges']) {
workbook.Sheets[worksheet]['!merges'].map((merge) => {
const value = XLSX.utils.encode_range(merge).split(':')[0]
for (let col = merge.s.c; col <= merge.e.c; col++) {
for (let row = merge.s.r; row <= merge.e.r; row++) {
workbook.Sheets[worksheet][String.fromCharCode(65 + col) + (row + 1)] = workbook.Sheets[worksheet][value]
}
}
})
}
}
this.csvJson = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNames], {
defval: null,
cellDates: true,
raw: false,
header: ['main_task', 'name', 'description', 'positions', 'plan_date', 'time_to_complete', 'deadline'],
range: 1
})
})
}
}
и получаю необходимый результат, где объединенная ячейка просто разделяется на вложенные. Тут все работает как должно:
Сейчас задача усложняется, мне необходимо в задачи добавить инструменты и должности с кол-вом, для этого мне нужно объединить их в одну задачу.
результат, который мне нужно получить:
[
{
"main_task": null,
"name": "qwweqглавная пат",
"description": "Описание главной задачи",
"positions": [
{
"role": "слесарь",
"num": 2
}
],
"instruments": [
{
"instrument": "молоток",
"num": 1
}
],
"plan_date": null,
"time_to_complete": "10",
"deadline": "2023-02-04 18:30:00"
},
{
"main_task": "qwweqглавная пат",
"name": "тест1q",
"description": "Демонтировать приспособление для удаления дистиллята из обмотки статора согласно 04912577.301.20100.00006 КЭ",
"positions": [
{
"role": "Контролер",
"num": 1
}
],
"instruments": null,
"plan_date": "2023-02-18 00:00:00",
"time_to_complete": "0.15",
"deadline": "2023-02-18 15:00:00"
},
{
"main_task": "qwweqглавная пат",
"name": "тест2q",
"description": "Установить заглушки на фланцы водоподвода согласно 04912577.301.20100.00003 КЭ, зарегистрировать в журнале РОПО. Контроль мастера.",
"positions": [
{
"role": "мастер",
"num": 1
},
{
"role": "слесарь",
"num": 2
}
],
"instruments": [
{
"instrument": "отвертка",
"num": 3
},
{
"instrument": "молоток",
"num": 2
},
{
"instrument": "отвертка крестовая",
"num": 1
}
],
"plan_date": "2023-03-20 00:00:00",
"time_to_complete": "2.40",
"deadline": "2023-03-03 14:45:00"
},
{
"main_task": "qwweqглавная пат",
"name": "тест3q",
"description": "На этапе сборки статора турбогенератора фланцевые соединения сдавать по Т31-ЦЦР481.ФР \"Формуляр сборкифланцевого соединения\".",
"positions": [
{
"role": "мастер",
"num": 1
}
],
"instruments": null,
"plan_date": null,
"time_to_complete": "2",
"deadline": "2023-01-01 08:20:00"
}
]
Ячеек с инструментами и должностями может быть разное кол-во. Пожалуйста, подскажите, как мне сформировать вложенный массив с объектами?


