使用 Node.js 和 xlsx 插件读取与生成 Excel文件

作者:IT技术圈子 浏览量:270   更新于 2024-10-16 21:51 标签:

1. 什么是 xlsx 插件?

xlsx 是一个流行的 JavaScript 库,能够轻松地解析和生成 Excel 文件,包括 .xlsx 和 .xls 格式。它支持从 Excel 中读取数据并将 JSON 数据生成为 Excel 文件,非常适合数据操作和报告生成的场景。

2. 环境准备

首先,我们需要确保在 Node.js 环境中安装了 xlsx 插件。打开你的命令行,执行以下命令:

npm install xlsx

3. 读取 Excel 文件

使用 xlsx 插件读取 Excel 文件非常简单。以下是一个示例代码,演示如何读取一个 Excel 文件并将其内容转换为 JSON 格式:

const xlsx = require('xlsx');
const path = require('path');
// 指定要读取的 Excel 文件路径
const filePath = path.join(__dirname, 'example.xlsx');
// 读取 Excel 文件
const workbook = xlsx.readFile(filePath);
// 获取第一个工作表的名称
const sheetName = workbook.SheetNames[0];
// 获取第一个工作表
const worksheet = workbook.Sheets[sheetName];
// 将工作表的数据转换为 JSON 格式
const data = xlsx.utils.sheet_to_json(worksheet);
// 输出读取的数据
console.log(data);

4. 生成 Excel 文件

除了读取 Excel 文件,xlsx 插件还可以生成新的 Excel 文件。下面的代码示范了如何将 JSON 数据生成 Excel 文件:

const xlsx = require('xlsx');
const path = require('path');
// 示例数据
const data = [
    { Name: "Alice", Age: 25, City: "New York" },
    { Name: "Bob", Age: 30, City: "Los Angeles" },
    { Name: "Charlie", Age: 35, City: "Chicago" }
];
// 将数据转换为工作表
const worksheet = xlsx.utils.json_to_sheet(data);
// 创建新的工作簿
const workbook = xlsx.utils.book_new();
// 将工作表添加到工作簿
xlsx.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 指定保存的 Excel 文件路径
const filePath = path.join(__dirname, 'output.xlsx');
// 生成 Excel 文件
xlsx.writeFile(workbook, filePath);
console.log('Excel file generated successfully!');

5. 综合示例

我们可以将读取和生成 Excel 文件的功能整合到一个完整的示例中。下面是一个完整的代码块,用于读取指定的 Excel 文件并生成一个新的 Excel 文件:

const xlsx = require('xlsx');
const path = require('path');
// 读取 Excel 文件
function readExcel(filePath) {
    const workbook = xlsx.readFile(filePath);
    const sheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[sheetName];
    const data = xlsx.utils.sheet_to_json(worksheet);
    return data;
}
// 生成 Excel 文件
function generateExcel(outputPath, data) {
    const worksheet = xlsx.utils.json_to_sheet(data);
    const workbook = xlsx.utils.book_new();
    xlsx.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
    xlsx.writeFile(workbook, outputPath);
}
// 使用示例
const inputFilePath = path.join(__dirname, 'example.xlsx');
const outputFilePath = path.join(__dirname, 'output.xlsx');
// 读取数据
const dataFromExcel = readExcel(inputFilePath);
console.log('Data read from Excel:', dataFromExcel);
// 生成新的 Excel 文件
generateExcel(outputFilePath, dataFromExcel);
console.log('Excel file generated successfully!');

6.注意

  • 处理大文件:对于大文件,建议使用流(stream)来处理,以免内存消耗过大。
  • 错误处理:在实际项目中,一定要对文件读取和写入进行错误处理,防止程序崩溃。
  • 格式化和样式:xlsx 支持基本的单元格样式,但复杂的样式可能并不完全支持,具体情况可以查阅官方文档。