Node.js读取excel表格文件并输出

1、需求

        读取excel表格中的数据,转成JSON格式,并输出到txt文件中。

2、代码实现
const XLSX = require('xlsx');
const fs = require('fs');

// 读取文件
const workboox = XLSX.readFile('./data.xls');

// 读取工作表
const worksheet = workboox.Sheets['Sheet1'];

// 将工作表转换为json
const jsonData = XLSX.utils.sheet_to_json(worksheet);

// 打印
// console.log(jsonData);

// 写入文件
fs.writeFile('./data.txt', JSON.stringify(jsonData), 'utf-8', (err) => {
  if (err) {
    console.log(err);
  } else {
    console.log('写入成功');
  }
});

<think>嗯,用户想了解如何在Node.js中使用xlsx库来读取Excel表格的结构化数据。首先,我需要回忆一下xlsx库的基本用法。记得这个库很强大,可以处理各种Excel文件格式,比如.xls和.xlsx。可能需要先安装它,用npm install xlsx命令。 然后,用户可能需要知道如何读取文件。应该分步骤来:安装库、加载文件、解析数据。可能需要提到不同的解析方式,比如读取整个工作簿,或者特定工作表。还有数据结构的问题,比如SheetNames和Sheets对象。 接下来,用户可能关心如何将Excel的数据转换为JSON格式。这部分需要详细说明,比如使用sheet_to_json方法,处理表头行,可能还需要处理日期等特殊格式。另外,可能需要提到如何处理大型文件,比如使用流式读取来优化内存。 还要注意常见问题,比如路径错误、工作表不存在的情况,以及数据类型转换的问题。比如Excel中的数字和字符串可能会被错误解析,这时候可能需要设置cellDates或raw选项。 另外,用户可能需要实际代码示例,这样他们可以快速上手。比如从读取文件开始,获取工作表名,选择第一个工作表,然后转换为JSON。还有处理不同的数据格式,比如跳过空行,或者自定义处理单元格内容。 可能还需要提到一些高级技巧,比如设置读取选项,如sheetRows限制行数,或者range指定读取范围。还有写入Excel文件的基础知识,方便用户后续操作。 需要确保回答结构清晰,分步骤讲解,每个部分都有示例代码,解释代码的作用。同时,提醒用户注意常见的错误和解决方法,比如文件路径是否正确,工作表是否存在,以及如何处理特殊数据格式。 最后,总结一下关键点,强调xlsx库的灵活性和功能强大,同时指出可能需要进一步学习的资源,比如官方文档或社区支持。这样用户可以根据自己的需求深入学习和应用。</think>好的,我将分步骤为你讲解如何在 Node.js 中使用 `xlsx` 库高效读取 Excel 结构化数据: --- ### 一、基础环境准备 1. 安装依赖: ```bash npm install xlsx ``` 2. 引入模块: ```javascript const XLSX = require('xlsx'); ``` --- ### 二、核心读取技巧 #### 1. 读取文件基础操作 ```javascript // 读取文件 const workbook = XLSX.readFile('data.xlsx'); // 获取所有工作表名称 const sheetNames = workbook.SheetNames; console.log('工作表列表:', sheetNames); // 选择第一个工作表 const worksheet = workbook.Sheets[sheetNames[0]]; ``` #### 2. 解析数据结构 **工作表对象结构示例**: ```javascript { 'A1': { v: '姓名', t: 's' }, // 字符串类型 'B1': { v: '年龄', t: 'n' }, // 数字类型 'A2': { v: '张三', t: 's' }, 'B2': { v: 25, t: 'n' } } ``` #### 3. 转换为 JSON 格式(推荐方式) ```javascript // 带表头转换 const data = XLSX.utils.sheet_to_json(worksheet, { header: 1, // 使用第一行作为 key raw: false, // 自动解析值(如日期转为字符串) defval: '' // 空单元格默认值 }); // 输出结果示例: // [ // { 姓名: '张三', 年龄: 25 }, // { 姓名: '李四', 年龄: 30 } // ] ``` --- ### 三、高级处理技巧 #### 1. 处理大型文件(流式读取) ```javascript const stream = XLSX.stream.to_json(worksheet, { header: 1, raw: true }); stream.on('data', (chunk) => { console.log('处理数据块:', chunk); }); ``` #### 2. 自定义单元格处理 ```javascript XLSX.utils.sheet_to_json(worksheet, { cellText: false, cellDates: true, // 自动解析日期 header: ['name', 'age'], // 自定义表头 range: 'A2:B100' // 限定读取范围 }); ``` #### 3. 特殊格式处理 ```javascript // 获取单元格原始值 const cellAddress = 'B2'; const cell = worksheet[cellAddress]; const rawValue = cell ? cell.v : undefined; // 处理公式结果 if (cell && cell.f) { console.log('公式:', cell.f); } ``` --- ### 四、常见问题解决 1. **中文乱码问题**: - 安装 `iconv-lite` 库 ```javascript const XLSX = require('xlsx'); require('iconv-lite').encodingExists('gbk'); ``` 2. **日期格式处理**: ```javascript const excelDate = 44197; // Excel 日期数值 const jsDate = XLSX.SSF.format('yyyy-mm-dd', excelDate); ``` 3. **内存优化**: ```javascript XLSX.readFile('large.xlsx', { sheetRows: 1000, // 限制读取行数 dense: true // 使用紧凑模式 }); ``` --- ### 五、完整示例代码 ```javascript const XLSX = require('xlsx'); function readExcel(filePath) { try { const workbook = XLSX.readFile(filePath); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; return XLSX.utils.sheet_to_json(worksheet, { header: 1, raw: false, defval: null, dateNF: 'yyyy-mm-dd' // 日期格式 }); } catch (err) { console.error('读取失败:', err); return []; } } const result = readExcel('data.xlsx'); console.log(JSON.stringify(result, null, 2)); ``` --- ### 六、关键文档参考 1. [SheetJS 官方文档](https://docs.sheetjs.com/) 2. 核心方法: - `XLSX.readFile()`:文件读取 - `XLSX.utils.sheet_to_json()`:表格JSON - `XLSX.stream`:流式处理接口 --- 通过上述技巧,你可以高效处理 Excel 数据的读取、格式转换和特殊场景处理。实际开发中建议结合业务需求添加数据校验和异常处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值