Как преобразовать вложенный объект json в таблицу excel с помощью библиотеки xlsx npm?

У меня есть вложенный объект json. Ради простоты:

data = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}

Реальный объект больше, но дело в том, что он вложенный. Значения могут быть строками, числами или другими объектами. Теперь мне нужно получить таблицу excel, которая (для этого конкретного json будет выглядеть так):

|----------------------------------------
| key1 | key2 |           key3          |
|      |      |--------------------------
|      |      | nestedKey1 | nestedKey2 |
|----------------------------------------
|  1   |  2   |     3      |      4     |
|----------------------------------------

Для этого я попытался использовать библиотеку xlsx. Я импортирую библиотеку следующим образом:

import { WorkSheet, WorkBook, utils, writeFile } from 'xlsx';

Внутри моего метода я определяю объект:

let myObj = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}

затем я создаю рабочий лист и книгу:

const workSheet: WorkSheet = utils.json_to_sheet([myObj]);
const workBook: WorkBook = utils.book_new();
utils.book_append_sheet(workBook, workSheet, 'object_to_save');

и, наконец, записать его в файл:

writeFile(workBook, 'Tests.xlsx');

Но вполне ожидаемо он не обрабатывает вложенный объект так, как хотелось бы. Я не могу понять, что я должен сделать, чтобы получить желаемый результат.


person GoBear    schedule 14.06.2019    source источник
comment
Привет, Игорь, извини, но я не так много пользовался библиотекой. Есть ли в Excel функция вложенных столбцов или вы хотите, чтобы они были сгруппированы? Я бы, вероятно, просто предварительно обработал объект, чтобы сгладить его, например: let myObj = {'key1': 1, 'key2': 2, 'key3.nestedKey1': 3, 'key3.nestedKey2': 4} Перед выполнением json_to_sheet, если это подходит для вашего варианта использования.   -  person torno    schedule 15.06.2019
comment
Привет, спасибо за ответ. Ну, я подумал о том, чтобы сгладить объект, но я надеялся, что библиотека сможет делать более сложные вещи. Мне не очень нравится Excel по целому ряду причин, и поэтому я мало им пользовался, поэтому я не уверен, как называется приведенная выше структура. Столбцы вложенные, насколько я понимаю. Мне дали образец таблицы в формате xlsx и я пока не выяснил, как с помощью этой либы получить нужный результат.   -  person GoBear    schedule 15.06.2019
comment
Прочтите этот github.com/SheetJS/js-xlsx/issues/1059. #issuecomment-377824371 Библиотека не поддерживает сложную структуру Json   -  person dota2pro    schedule 20.06.2019
comment
Обязательно ли использовать SheetJS? Можно ли использовать другую библиотеку, например ExcelJS (github.com/exceljs/exceljs)?   -  person Gosha_Fighten    schedule 20.06.2019
comment
аналогичный вопрос задан здесь в json с помощью sheetjs">stackoverflow.com/questions/55732859/, вы можете получить представление о том, как это делается.   -  person Harshana    schedule 23.06.2019
comment
@GoBear У вас есть решение этой проблемы?   -  person Ashok    schedule 02.03.2020


Ответы (1)


Это всегда будет давать вам только плоский результат. Вы можете попробовать некоторые онлайн-конвертеры, которые делают только сглаживание. https://json-csv.com/

Но если вы используете kendo-grid, он экспортирует данные в соответствии с вашими ожиданиями.

https://demos.telerik.com/kendo-ui/grid/excel-export

person Nishant Thakkar    schedule 21.06.2019