Как пропустить некоторые пары ключ-значение при преобразовании JSON в таблицу Excel с использованием XLSX в JS

#javascript #json #excel #xlsx #worksheet

Вопрос:

У меня есть массив объектов (JSON) в JS, и я хочу преобразовать его в таблицу Excel. В данных JSON есть некоторые пары ключ-значение, которые я не хочу конвертировать в Excel, например, Excel не должен содержать информацию о годе, как показано ниже (ПОЖАЛУЙСТА, ЗАПУСТИТЕ HTML-КОД, ЧТОБЫ УВИДЕТЬ ТРЕБУЕМЫЙ ВЫВОД EXCEL):

Данные JSON:

 [
  {
    car: "Range Rover",
    color: "silver",
    year: "2021"
  },
  
  {
    car: "Benz",
    color: "black",
    year: "2019"
  },
  
  {
    car: "Toyota",
    color: "silver",
    year: "2020"
  }
] 

Просмотр Excel (запустите фрагмент):

 <html>
  <body>
    <table>
      <tr>
        <th>car</th>
        <th>color</th>
      </tr>

      <tr>
        <td>Range Rover</td>
        <td>silver</td>
      </tr>

      <tr>
        <td>Benz</td>
        <td>black</td>
      </tr>

      <tr>
        <td>Toyota</td>
        <td>silver</td>
      </tr>
    </table>
  </body>
</html> 

Как я могу добиться этого, используя XLSX в JS?

Ответ №1:

Здесь вы можете сделать несколько вещей.

  1. После анализа ваших данных JSON вы можете сохранить их на листе xlsx, изменить свойство worksheet !ref на нужный диапазон, а затем добавить этот лист в книгу xlsx.
 let file = fs.readFileSync('test.json', 'utf-8');
let data = JSON.parse(file);

var wb = xlsx.utils.book_new();
var ws = xlsx.utils.json_to_sheet(data);

ws['!ref'] = 'A1:B4';
xlsx.utils.book_append_sheet(wb, ws, 'Sheet 1');
xlsx.writeFile(wb, 'test1.xlsx');
 
  1. Отфильтруйте нужные вам свойства из ваших данных JSON в отдельный массив, а затем добавьте их в файл.
 let file = fs.readFileSync('test.json', 'utf-8');
let data = JSON.parse(file);

var wb = xlsx.utils.book_new();

let dataArray = [];
data.forEach(d => {
  dataArray.push({"car": d.car, "color": d.color});
});

var ws = xlsx.utils.json_to_sheet(dataArray);
console.log(ws);
xlsx.utils.book_append_sheet(wb, ws, 'Sheet 1');
xlsx.writeFile(wb, 'test2.xlsx');
 

Проверка документации по служебным функциям также может быть полезной.

https://www.npmjs.com/package/xlsx#utility-functions