JS xlsx json_to_sheet создает нежелательные пустые ячейки
я использую этоxlsx-js
библиотека для создания файла Excel из списка объектов json в приложении Vue3.
Мне нужно иметь значения в нескольких ячейках, но кажется, что он пропускает строки, которые уже были «тронуты».
Код:
import * as XLSX from 'xlsx';
var wb = XLSX.utils.book_new();
var myws = XLSX.utils.json_to_sheet([
{"name": "Peter"},
{"name": "Adam"},
{"age": "13"},
{"age": "25"}
]);
XLSX.utils.book_append_sheet(wb, myws, 'my_sheet1' );
Вывод таблицы Excel:
|name |age |
|Peter | |
|Adam | |
| | 13 |
| | 25 |
Желаемый результат:
|name |age |
|Peter | 13 |
|Adam | 25 |
Можете ли вы помочь, пожалуйста?
РЕДАКТИРОВАТЬ:
Решение путем изменения порядка записей json будет не таким простым.
На входе у меня есть массив таких объектов, как:
{
"Name":"Peter",
"Age": 24,
"Hobbies": "golf;fishing;tennis;volleybal;hiking;",
"Friends": "Adam;Steve;Stan;Lucy;Amie;Leo;Bruce;Eva;Patrick;"
}
Представьте, что у Питера слишком много увлечений/друзей, разделенных точкой с запятой.
В Excel существует ограничение до 32 767 символов в одной ячейке.
Так, чтобы не превысить это число. Создан подробный лист о Питере.
var filename='exported_excel_file'+ '.xlsx';
var wb = XLSX.utils.book_new();
for (const person_obj of alldata){ // for each person in the main input array
var person_obj_str = JSON.stringify(person_obj)
var parsed_person_obj = JSON.parse(person_obj_str)
var sheet_data = []
// for each attribute of person object e.g. name, hobbies, etc.
Object.keys(parsed_person_obj).forEach(mykey => {
// separate semi-colon attribute values into an array
var value_array = parsed_person_obj[mykey].split(';')
// e.g. for each friend in person's friends
for (var line of value_array) {
if (line != '') {
// separate values into different entries with same key.
// e.g. friends into {"friends": "Adam"}, {"friends": "Steve"}, etc.
var entry = {[mykey]: line}
sheet_data.push(entry)
}
}
})
var myws = XLSX.utils.json_to_sheet(sheet_data);
var ran_num = Math.random(500)
XLSX.utils.book_append_sheet(wb, myws, person_obj.name +'_sheet_' + ran_num );
}
XLSX.writeFile(wb,filename);
},
Таким образом, этот код в конечном итоге имеет проблему, упомянутую выше.
Если бы я хотел изменить вывод на
{"name": "Peter"},
{"age": "13"},
{"Hobbies": "golf"},
{"Hobbies": "fishing"},
...
{"name": "Adam"},
{"age": "25"},
{"friends": "Peter"},
{"friends": "Steve"},
...
В любом случае у него будет эта проблема. Похоже, что когда xlsx увидит то же имя атрибута/ключа на входе, он автоматически перейдет к следующей строке.
Можно ли отключить эту автоматическую настройку строки?
Или можно ли обнаружить пустые ячейки в каждом столбце, начиная со второй строки и заканчивая первой непустой ячейкой в этом столбце? Потом удалить, чтобы не было пробелов?
Если нет, мне, вероятно, пришлось бы использовать много массивов и некоторые функции циклического перебора.
У кого-нибудь есть лучшее решение этой проблемы?