Таблицы Excel популярны в деловом мире как стандарт де-факто, нравится ли нам, как разработчикам, это. Иногда клиенты просят нас загрузить таблицу Excel, и все данные должны храниться в базе данных. XLSX - это пакет Node, который решает эту проблему. В этом посте мы собираемся использовать busboy для обработки данных формы.

Этот пост состоит из двух частей:

  1. Как разобрать лист Excel в формат JSON.
  2. Как создать таблицу Excel с использованием данных JSON.

Шаг 1. Установите пакет XLSX с помощью npm или bower.

npm i --save xlsx 
//or
bower install js-xlsx

Шаг 2. Импортируйте Multer или busboy

npm install --save multer

Multer - это промежуточное программное обеспечение node.js для обработки multipart / form-data, которое в основном используется для загрузки файлов. Он написан поверх busboy для максимальной эффективности.

Busboy - это модуль Node.js для анализа входящих данных HTML-форм.

Шаг 2: импортируйте XLSX в index.js

const XLSX = require('xlsx')

Анализ данных Excel

req.busboy.on('file', (fieldname, file, fname) => {
 if (fieldname === 'file') {
  const buffers = []
  file.on('data', (data) => {
   buffers.push(data)
  })
  file.on('end', () => {
   buffer = Buffer.concat(buffers)
   workbook = XLSX.read(buffer, {
    type: 'buffer',
   })
  })
 }
})
req.busboy.on('finish', () => {
 try {
  const excelProducts =      XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], {
   raw: false,
   header: 1,
   dateNF: 'yyyy-mm-dd',
   blankrows: false,
  })
 } catch (err) {
  console.log(err)
 }
})
req.pipe(req.busboy)
  1. Прочтите файл Excel с помощью буфера. Мы используем busboy, потому что этот файл загружен пользователем. Если файл уже загружен, вы можете использовать XLSX.readFile (filename: string, opts ?: ParsingOptions), указав имя файла.
  2. XLSX.utils.sheet_to_json () используется для чтения данных рабочего листа в массив объекта. Другие параметры передаются для указания различных параметров, таких как использовать необработанные значения (истина) или форматированные строки (ложь), включать пустые строки в вывод, формат даты по умолчанию, если указан заголовок, первая строка считается строкой данных, иначе первая row - это строка заголовка и не считается данными.

Некоторые вспомогательные функции в XLSX.utils, генерирующие разные виды листов:

  • XLSX.utils.sheet_to_csv создает CSV
  • XLSX.utils.sheet_to_txt генерирует текст в формате UTF16
  • XLSX.utils.sheet_to_html генерирует HTML
  • XLSX.utils.sheet_to_json генерирует массив объектов
  • XLSX.utils.sheet_to_formulae создает список формул

Создание листа Excel

data = [{
 firstName: 'John',
 lastName: 'Doe'
}, {
 firstName: 'Smith',
 lastName: 'Peters'
}, {
 firstName: 'Alice',
 lastName: 'Lee'
}]
const ws = XLSX.utils.json_to_sheet(data)
const wb = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(wb, ws, 'Responses')
XLSX.writeFile(wb, 'sampleData.export.xlsx')
  1. json_to_sheet преобразует массив объектов JavaScript в рабочий лист. Существуют и другие методы преобразования данных в рабочие листы, такие как aoa_to_sheet, table_to_sheet. sheet_add_json используется для добавления массива объектов JavaScript в существующий рабочий лист.
  2. book_new () создает новую книгу на листе.
  3. book_append_sheet добавляет лист к книге с названием «Ответы».
  4. XLSX.writeFile (wb, «sampleData.export.xlsx») пытается записать wb в «sampleData.export.xlsx».

Вы также можете указать ширину каждого столбца и объединить ячейки.

Некоторые вспомогательные функции XLSX.utils для импорта различных данных в листы:

  • XLSX.utils.aoa_to_sheet преобразует массив массивов данных JavaScript в рабочий лист.
  • XLSX.utils.json_to_sheet преобразует массив объектов JavaScript в рабочий лист.
  • XLSX.utils.table_to_sheet преобразует элемент DOM TABLE в рабочий лист.
  • XLSX.utils.sheet_add_aoa добавляет на рабочий лист массив массивов данных JavaScript.
  • XLSX.utils.sheet_add_json добавляет на рабочий лист массив объектов JavaScript.

Заключение:

Используя пакет XLSX, вы можете читать любой файл Excel, а также создавать файл Excel.

Спасибо за внимание.

Больше контента на plainenglish.io