gee*_*ter 66 excel file-io export-to-excel node.js npm
我是nodejs程序员.现在我有一个数据表,我想以Excel文件格式保存.我该怎么做呢?
我找到了一些Node库.但其中大多数是Excel Parsers而不是Excel Writers.我使用的是Linux Server.因此需要可以在Linux上运行的东西.如果您有任何有用的图书馆,请告知我们.
或者有没有办法将CSV文件转换为xls文件(以编程方式)?
mik*_*ana 73
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');
Run Code Online (Sandbox Code Playgroud)
gee*_*ter 42
我只想出一个简单的出路.这工作 -
只需使用Tabs作为分隔符创建一个文件(类似于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();
Run Code Online (Sandbox Code Playgroud)
这将以XLS文件格式创建文件.如果您尝试XLSX而不是XLS,它不起作用.
Hes*_*sin 20
使用msexcel-builder.安装它:
npm install msexcel-builder
Run Code Online (Sandbox Code Playgroud)
然后:
// 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');
});
Run Code Online (Sandbox Code Playgroud)
def*_*led 15
虽然这个问题有几个答案,但它们现在可能有点过时了。
新读者可能更喜欢考虑 xlsx 或“sheetsJS”包,它现在似乎是目前此用例中最受欢迎的节点包。
当前的最佳答案推荐 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');
Run Code Online (Sandbox Code Playgroud)
你应该检查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()
}
Run Code Online (Sandbox Code Playgroud)
适用于大型文件,性能远远优于excel4node(由于其流媒体功能更加有限,因此大量内存使用和节点进程"内存不足"在近20分钟内包含4百万个单元的文件后大约5分钟内崩溃)一旦可以生成,就不允许"commit()"数据来检索块
另见这个SO答案.
新Office中的XLSx只是XML和其他文件的压缩集合.所以你可以生成它并相应地压缩它.
奖励:您可以使用样式等创建一个非常好的模板:
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>
Run Code Online (Sandbox Code Playgroud)
使用fs包,我们可以从 JSON 数据创建 excel/CSV 文件。
第 1 步:将JSON 数据存储在一个变量中(这里是在jsn变量中)。
第 2 步:创建空字符串变量(这里是data)。
步骤3:将jsn的每个属性附加到字符串变量数据中,同时'\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');
});
Run Code Online (Sandbox Code Playgroud)
安装exceljs
npm i exceljs --save
Run Code Online (Sandbox Code Playgroud)
导入Exceljs
var Excel = require('exceljs');
var workbook = new Excel.Workbook();
Run Code Online (Sandbox Code Playgroud)
创建工作簿
var options = {
filename: __dirname+'/Reports/'+reportName,
useStyles: true,
useSharedStrings: true
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
Run Code Online (Sandbox Code Playgroud)
创建工作表后
var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});
Run Code Online (Sandbox Code Playgroud)
在 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},
];
Run Code Online (Sandbox Code Playgroud)
使用 forEach 循环后在 exel 文件中逐行追加
array.forEach(function(row){ worksheet.addRow(row); })
Run Code Online (Sandbox Code Playgroud)
您还可以在每个 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);
});
Run Code Online (Sandbox Code Playgroud)
或者 - 使用Express建立@Jamaica Geek的答案 - 避免保存和读取文件:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112554 次 |
| 最近记录: |