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 увидит то же имя атрибута/ключа на входе, он автоматически перейдет к следующей строке.

Можно ли отключить эту автоматическую настройку строки?

Или можно ли обнаружить пустые ячейки в каждом столбце, начиная со второй строки и заканчивая первой непустой ячейкой в ​​этом столбце? Потом удалить, чтобы не было пробелов?

Если нет, мне, вероятно, пришлось бы использовать много массивов и некоторые функции циклического перебора.

У кого-нибудь есть лучшее решение этой проблемы?

0 ответов

Другие вопросы по тегам