使用xlsx库读取Excel数据生成速度时间图表 解决属性名异常与列提取问题
出现__Empty_*格式的属性是xlsx库的默认逻辑:当解析Excel时检测到表头行存在空单元格,就会自动生成这类占位属性名。两个问题的解决方案如下:
1. 替换异常属性名
你可以在调用sheet_to_json方法时直接通过配置参数自定义列名,从源头避免生成占位属性:
- 新增
header参数,按照Excel从左到右的列顺序传入自定义属性名即可,比如你要生成时间速度图表,可设置为['time', 'speed'],如果列数更多按顺序补充名称即可 - 如果Excel第一行是原有表头,需要跳过表头行的话新增
range: 1参数即可
如果不想提前指定列名,也可以在拿到解析结果后遍历对象,批量替换包含__Empty_的属性名,或者直接过滤掉无效属性。
2. 读取指定列为数组
当解析后的对象属性名规范化后,直接用数组map方法提取对应属性即可得到目标列的数组,可直接用于速度时间图表的渲染。
修改后的完整代码示例:
// 引入依赖 const reader = require('xlsx') // 读取Excel文件 const file = reader.readFile('./report.xlsx') let data = [] const sheets = file.SheetNames for(let i = 0; i < sheets.length; i++) { const temp = reader.utils.sheet_to_json( file.Sheets[file.SheetNames[i]], // 新增配置项:自定义列名,跳过原有表头行(不需要跳过可删除range参数) { header: ['time', 'speed'], range: 1 } ) temp.forEach((res) => { data.push(res) }) } // 提取指定列为数组 const timeArray = data.map(item => item.time) const speedArray = data.map(item => item.speed) // 打印验证 console.log('时间列数组:', timeArray) console.log('速度列数组:', speedArray)
内容的提问来源于stack exchange,提问作者Yashasvi
相关产品推荐
相关产品推荐

