преобразование в 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"
}

]

Ячеек с инструментами и должностями может быть разное кол-во. Пожалуйста, подскажите, как мне сформировать вложенный массив с объектами?


Ответы (0 шт):