Nodejs哪种方法导出excel好?找了好多帖 (结帖)

Nodejs哪种方法导出excel好?找了好多帖 (结帖)

因为我现在要导出xls,不要xlsx。导出做报表用的 (后来我放弃xls)

找了很多,现在比较好的方法是生成xls文件,再导入csv格式的内容。这样的做法,我担心2个问题。1是中文会不会乱码,2是会不会自动撑开格子。失败的例子像这样: name data meney
xiaoming 2014-02-23 14:59 1000 能不能data的时间不会撑到1000那里,想要的: <table> <tr> <td>name</td><td>data</td><td>meney</td> </tr> <tr> <td>xiaoming</td><td>2014-02-23 14:59</td><td>1000</td> </tr> </table> #最后用了http://cnodejs.org/topic/52479ddef29c7bbd3c950965 来解决,这真是一个好插件。


13 回复

在Node.js中导出Excel文件时,可以使用一些优秀的库来实现这一功能。考虑到你提到的需求(生成.xls文件而不是.xlsx文件),我们可以使用exceljsxlsx-populate等库。但因为.xls文件格式相对老旧,支持度较低,所以更推荐使用.xlsx格式。如果你确实需要生成.xls文件,可以考虑使用excel-export库。

以下是一个使用exceljs库导出.xlsx文件的简单示例:

安装依赖

首先,你需要安装exceljs库:

npm install exceljs

示例代码

const ExcelJS = require('exceljs');

// 创建一个新的工作簿对象
const workbook = new ExcelJS.Workbook();
workbook.creator = 'Your Name';
workbook.created = new Date();

// 添加一个工作表
const worksheet = workbook.addWorksheet('Sheet 1');

// 添加表头
worksheet.columns = [
    { header: 'Name', key: 'name', width: 15 },
    { header: 'Date', key: 'date', width: 20 },
    { header: 'Money', key: 'money', width: 10 }
];

// 添加数据行
worksheet.addRow({ name: 'Xiaoming', date: '2014-02-23 14:59', money: 1000 });

// 将工作簿写入文件
workbook.xlsx.writeFile('output.xlsx')
    .then(() => {
        console.log('File saved!');
    })
    .catch(err => {
        console.error(err);
    });

解释

  1. 创建工作簿:使用ExcelJS.Workbook()创建一个新的工作簿。
  2. 添加工作表:通过addWorksheet方法添加一个新的工作表。
  3. 设置列宽和标题:通过columns属性设置列宽和表头。
  4. 添加数据行:使用addRow方法向工作表中添加数据行。
  5. 保存文件:使用writeFile方法将工作簿保存为.xlsx文件。

这种方法能够确保数据正确对齐,并且支持中文字符。如果你确实需要生成.xls文件,可以尝试使用其他库如excel-export,但请注意其兼容性和维护状态。


csv 文件没有格式问题,“能不能data的时间不会撑到1000那里”是把csv又用excel打开了?

本来就是要用excel打开,我的目的也是要生成xls。

最简单的是 每一行的每一列用 “\t” 分隔 文件保存.xls 然后excel 可以打开。

这个stackoverflow上看过

https://github.com/vxtindia/excel-parser ?

这个…不过这个是用node 上面包了一层python 接口…不过excel 支持方面倒是妥妥的

能写就行,python也不怕。反正是linux,应该都有的吧。如果能搞,就不用php。

你确定这个能生成xls,我怎么看它是读xls的

用我的吧,如果是要导出复杂格式的Excel,我的最好了 http://cnodejs.org/topic/52479ddef29c7bbd3c950965

一直Forbidden是什恶魔情况啊。 导出的话很无语的用blob可以的吧。

看了一下,不错啊。

你的这个不错啊。我看了一下,好像是替换文字。晚点再加你QQ问一下。

根据你的需求,使用 Node.js 导出 Excel 文件(尤其是 .xls 文件),可以考虑使用一些流行的库,比如 exceljsxlsx。虽然你提到更倾向于使用 .xls 格式,但需要注意的是 .xlsx 是更现代和广泛支持的格式。这里我将提供一个使用 exceljs 库导出 .xlsx 文件的示例代码,并且会说明如何避免出现中文乱码和列宽自动撑开的问题。

使用 exceljs 导出 Excel

安装 exceljs

首先需要安装 exceljs 库,可以通过 npm 进行安装:

npm install exceljs

示例代码

以下是一个简单的例子,展示如何创建一个 Excel 表格并写入数据:

const ExcelJS = require('exceljs');

// 创建一个新的工作簿
const workbook = new ExcelJS.Workbook();

// 添加新的工作表
const worksheet = workbook.addWorksheet('Sheet 1');

// 设置列宽以避免中文或日期等字段导致的列宽自动撑开
worksheet.columns = [
    { header: '姓名', key: 'name', width: 15 },
    { header: '时间', key: 'date', width: 20 },
    { header: '金额', key: 'money', width: 10 }
];

// 添加一行数据
worksheet.addRow({ name: '小明', date: '2014-02-23 14:59', money: 1000 });

// 写入 Excel 文件
workbook.xlsx.writeFile('output.xlsx')
    .then(() => {
        console.log('Excel 文件已成功导出!');
    })
    .catch(err => {
        console.error('导出 Excel 文件时发生错误:', err);
    });

避免中文乱码

确保你的文本编码正确,通常情况下使用 UTF-8 编码不会出现问题。如果你的数据源是从其他地方获取的,记得检查其编码设置是否一致。

结论

通过上述示例,你可以创建一个包含中文、日期以及数值的 Excel 表格,同时避免了列宽自动撑开的问题。如果你确实需要 .xls 格式的文件,可以考虑使用 exceljs 的其他功能或尝试其他的库。

回到顶部