Подтвердить что ты не робот

Как создать файл Excel с помощью Nodejs?

Я программист nodejs. Теперь у меня есть таблица данных, которую я хочу сохранить в формате Excel. Как мне это сделать?

Я нашел несколько библиотек Node. Но большинство из них - Excel Parsers, а не Excel Writers. Я использую Linux Server. Следовательно, нужно что-то, что может работать в Linux. Пожалуйста, дайте мне знать, есть ли полезные библиотеки, о которых вы знаете.

Или есть способ конвертировать CSV файл в файл xls (программно)?

4b9b3361

Ответ 1

excel4node является поддерживаемым встроенным создателем файла Excel , созданным из официальной спецификации. Он похож на, но более поддерживается, чем mxexcel-builder, упомянутый в другом ответе.

// Require library
var excel = require('excel4node');

// Create a new instance of a Workbook class
var workbook = new excel.Workbook();

// Add Worksheets to the workbook
var worksheet = workbook.addWorksheet('Sheet 1');
var worksheet2 = workbook.addWorksheet('Sheet 2');

// Create a reusable style
var style = workbook.createStyle({
  font: {
    color: '#FF0800',
    size: 12
  },
  numberFormat: '$#,##0.00; ($#,##0.00); -'
});

// Set value of cell A1 to 100 as a number type styled with paramaters of style
worksheet.cell(1,1).number(100).style(style);

// Set value of cell B1 to 300 as a number type styled with paramaters of style
worksheet.cell(1,2).number(200).style(style);

// Set value of cell C1 to a formula styled with paramaters of style
worksheet.cell(1,3).formula('A1 + B1').style(style);

// Set value of cell A2 to 'string' styled with paramaters of style
worksheet.cell(2,1).string('string').style(style);

// Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
worksheet.cell(3,1).bool(true).style(style).style({font: {size: 14}});

workbook.write('Excel.xlsx');

Ответ 2

Я просто вычислил простой выход. Это работает -

Просто создайте файл с вкладками в качестве разделителей (аналогично CSV, но замените запятую Tab). Сохраните его с расширением .XLS. Файл можно открыть в Excel.

Некоторый код для помощи -

var fs = require('fs');
var writeStream = fs.createWriteStream("file.xls");

var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
var row1 = "0"+"\t"+" 21"+"\t"+"Rob"+"\n";
var row2 = "1"+"\t"+" 22"+"\t"+"bob"+"\n";

writeStream.write(header);
writeStream.write(row1);
writeStream.write(row2);

writeStream.close();

Создает файл в формате XLS. Он не работает, если вы попробуете XLSX вместо XLS.

Ответ 3

Используйте msexcel-builder. Установите его с помощью:

npm install msexcel-builder

Тогда:

// Create a new workbook file in current working-path 
var workbook = excelbuilder.createWorkbook('./', 'sample.xlsx')

// Create a new worksheet with 10 columns and 12 rows 
var sheet1 = workbook.createSheet('sheet1', 10, 12);

// Fill some data 
sheet1.set(1, 1, 'I am title');
for (var i = 2; i < 5; i++)
  sheet1.set(i, 1, 'test'+i);

// Save it 
workbook.save(function(ok){
  if (!ok) 
    workbook.cancel();
  else
    console.log('congratulations, your workbook created');
});

Ответ 4

Вы должны проверить ExcelJS

Работает с форматами CSV и XLSX.

Отлично подходит для чтения/записи потоков XLSX. Я использовал его для потоковой передачи загрузки XLSX в объект ответа Express, в основном так:

app.get('/some/route', function(req, res) {
  res.writeHead(200, {
    'Content-Disposition': 'attachment; filename="file.xlsx"',
    'Transfer-Encoding': 'chunked',
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  })
  var workbook = new Excel.stream.xlsx.WorkbookWriter({ stream: res })
  var worksheet = workbook.addWorksheet('some-worksheet')
  worksheet.addRow(['foo', 'bar']).commit()
  worksheet.commit()
  workbook.commit()
}

Прекрасно работает с большими файлами, работает намного лучше, чем excel4node (после огромного использования памяти и сбоя процесса " нехватка памяти" для узла, содержащего 4 миллиона ячеек на 20 листах, почти через 5 минут), поскольку его потоковые возможности намного более ограничены ( не позволяет "commit()" данным извлекать чанки, как только они могут быть сгенерированы)

Смотрите также этот так ответ.

Ответ 5

XLSx в новом Office - это всего лишь заархивированная коллекция XML и других файлов. Таким образом, вы можете сгенерировать это и закрепить его соответствующим образом.

Бонус: вы можете создать очень красивый шаблон со стилями и так далее:

  • Создайте шаблон в своей любимой программе электронных таблиц
  • Сохраните его как ODS или XLSx
  • Распакуйте содержимое
  • Используйте его как базу и заполните content.xml (или xl/worksheets/sheet1.xml) своими данными.
  • Заменить все перед службой

Однако я нашел ODS (openoffice) гораздо более доступным (excel может его открыть), вот что я нашел в content.xml

<table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here be a1</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here is b1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="16382"/>
</table:table-row>

Ответ 6

Или - используйте ответ @Jamaica Geek, используя Express, - чтобы избежать сохранения и чтения файла:

  res.attachment('file.xls');

  var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
  var row1 = [0,21,'BOB'].join('\t')
  var row2 = [0,22,'bob'].join('\t');

  var c = header + row1 + row2;
  return res.send(c);

Ответ 7

Используя пакет fs, мы можем создать файл excel/CSV из данных JSON.

Шаг 1: Храните данные JSON в переменной (здесь она находится в переменной jsn).

Шаг 2: Создайте пустую строковую переменную (здесь это данные).

Шаг 3: Добавьте каждое свойство jsn в строковые переменные, а добавьте put '\t' между 2 ячейками и '\n' после завершения строки.

Код:

var fs = require('fs');

var jsn = [{
    "name": "Nilesh",
    "school": "RDTC",
    "marks": "77"
   },{
    "name": "Sagar",
    "school": "RC",
    "marks": "99.99"
   },{
    "name": "Prashant",
    "school": "Solapur",
    "marks": "100"
 }];

var data='';
for (var i = 0; i < jsn.length; i++) {
    data=data+jsn[i].name+'\t'+jsn[i].school+'\t'+jsn[i].marks+'\n';
 }
fs.appendFile('Filename.xls', data, (err) => {
    if (err) throw err;
    console.log('File created');
 });

Вывод

Ответ 8

установить exceljs

npm i exceljs --save

импортировать exceljs

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

создать рабочую книгу

var options = {
                filename: __dirname+'/Reports/'+reportName,
                useStyles: true,
                useSharedStrings: true
            };

            var workbook = new Excel.stream.xlsx.WorkbookWriter(options);

после создания листа

var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});

в массиве worksheet.column вы передаете имя столбца в заголовке, а ключ массива - в ключе

worksheet.columns = [
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 20},

            ];

после использования цикла forEach добавьте строку один за другим в файл exel

array.forEach(function(row){ worksheet.addRow(row); })

Вы также можете выполнить цикл на каждом ряду exel и ячейке

worksheet.eachRow(function(row, rowNumber) {
    console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});
row.eachCell(function(cell, colNumber) {
    console.log('Cell ' + colNumber + ' = ' + cell.value);
});

Ответ 9

Хотя на этот вопрос есть несколько ответов, теперь они могут быть немного устаревшими.

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

Текущий топ-ответ рекомендует excel4node, который выглядит довольно хорошо, но последний пакет выглядит менее поддерживаемым (и гораздо менее популярным), чем первый.

Отвечая на вопрос напрямую, используя xlsx:

const XLSX = require('xlsx');

/* create a new blank workbook */
const wb = XLSX.utils.book_new();

// Do stuff, write data
//
//

// write the workbook object to a file
XLSX.writeFile(workbook, 'out.xlsx');