在最近一个需求中,有几个数据导出的功能,有一个需要前端导出的功能。
xlsx-js-style VS xlsxjs
xlsx-js-style
样式支持:
xlsx-js-style 的最大优势是其提供了对 Excel 单元格样式的支持。用户可以轻松地设置单元格的字体、颜色、背景色、边框等样式。 这使得生成的 Excel 文件不仅包含数据,还可以美观地展示数据。
API 接口设计:
提供了类似于 CSS 的样式设置方式,开发者在设置样式时可以更加直观和便捷。 社区和维护:
由于它是基于 xlsx 库的扩展,拥有良好的兼容性和较为活跃的维护。
xlsxjs (即 xlsx)
功能全面:
xlsxjs 是一个非常成熟和全面的库,支持 Excel 文件的读写、数据解析、公式计算等功能。 对于纯数据处理和文件转换任务,它非常高效且稳定。 社区支持和文档:
作为一个老牌库,拥有广泛的社区支持和详细的文档,用户可以方便地找到解决方案和示例代码。 性能:
xlsxjs 在处理大量数据和大文件时表现出色,性能优化做得很好。
如果你的需求不仅限于数据处理,还需要对生成的 Excel 文件进行美化和样式设置,那么 xlsx-js-style 是一个更好的选择。 如果你更注重于 Excel 文件的数据操作、解析和转换,且不需要复杂的样式支持,那么 xlsxjs 是一个功能更全面、更成熟的库。 选择哪个库主要取决于你的具体需求。如果你需要结合两者的优势,可以使用 xlsxjs 进行数据操作,然后使用 xlsx-js-style 进行样式设置。
使用 xlsx-js-style 封装一个表头加粗显示导出函数:
const XLSX = require('xlsx-js-style');
/**
* TODO: 如有需要可以添加样式配置,option
* @param {*} json 要下载的数据,格式为{[key]: value}[],key为表头,value为每一行数据
* @param {*} sheetName 下载的名字
*/
const jsonToExcel = (json, sheetName = '数据下载') => {
const workbook = XLSX.utils.book_new();
const jsonData = json;
// 提取表头
const headers = Object.keys(jsonData[0]);
// 手动添加表头行
const dataWithHeader = [
headers, // 表头
...jsonData.map((row) => headers.map((header) => row[header])) // 数据行
];
// 将数据转换为工作表
const worksheet = XLSX.utils.aoa_to_sheet(dataWithHeader);
// 确保单元格已定义并设置样式
const setCellStyle = (cell, style) => {
if (!worksheet[cell]) worksheet[cell] = {}; // 如果单元格未定义,则初始化它
worksheet[cell].s = style;
};
// 表头样式
const headerStyle = {
font: { bold: true, sz: 14, color: { rgb: 'FFFFFF' } },
fill: { fgColor: { rgb: '888888' } }
};
// 应用表头样式
headers.forEach((header, index) => {
const cellAddress = XLSX.utils.encode_cell({ c: index, r: 0 });
setCellStyle(cellAddress, headerStyle);
});
// 设置列宽(可选)
worksheet['!cols'] = headers.map(() => ({ wpx: 100 }));
// 添加工作表到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 写入 Excel 文件
XLSX.writeFile(workbook, `${sheetName}.xlsx`);
};
export default jsonToExcel;
效果如下: