Как создать файл Excel с помощью Nodejs?
Я программист nodejs . Теперь у меня есть таблица данных, которые я хочу сохранить в файл формата Excel . Как мне это сделать ?
Я нашел несколько библиотек узлов . Но большинство из них-это синтаксические анализаторы Excel, а не писатели Excel .Я использую сервер Linux . Следовательно, нужно что-то, что может работать на Linux . Пожалуйста, дайте мне знать, если есть какие-то полезные библиотеки, которые вы знаете .
или есть способ конвертировать CSV-файл в xls-файл (программно ) ?
7 ответов:
excel4node является поддерживаемым, родной Excel file creator построенный от официальной спецификации. Это похоже, но более поддерживается, чем 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');
Я только что нашел простой выход . Это работает -
просто создайте файл с вкладками в качестве разделителей (аналогично CSV, но замените запятую на вкладку ). Сохраните его с расширением .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 .
использовать 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'); });
XLSx в новом офисе-это просто сжатая коллекция 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>
вы должны проверить ExcelJS
работает с форматами CSV и XLSX.
отлично подходит для чтения/записи XLSX потоков. Я использовал его для потоковой загрузки XLSX в объект Express response, в основном так:
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 (получил огромное использование памяти и процесс узла" из памяти " сбой после почти 5 минут для файла, содержащего 4 миллиона ячеек в 20 листов), поскольку его потоковые возможности гораздо более ограничены (не позволяет " фиксировать ()" данные для извлечения кусков, как только они могут быть сгенерированы)
см. также это так ответ.
или-построить на @ 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);
используя 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'); });