如何使用XLSX库正确转换Excel工作表为JSON并解决无名列截断问题
XLSX.utils.sheet_to_json 可用配置参数说明
以下是该方法支持的核心可调参数:
header:控制生成JSON的键名规则,也是你遇到截断问题的核心影响参数:- 缺省状态下默认读取工作表第一行作为键名,如果第一行存在空值,默认会将对应列识别为表头的终止边界,空列之后的所有内容都会被忽略
- 传入
1/"A":生成数组格式的行数据,不会把第一行作为表头,空列不会触发截断逻辑 - 传入自定义数组:可以手动按列顺序指定所有列的键名,覆盖自动识别的表头规则
range:指定转换的单元格范围,可传入数字(设置从第几行开始读取数据)、范围字符串(比如"A1:C10"),缺省默认自动识别工作表的使用范围blankrows:布尔值,设为true时保留空行,缺省为false会自动跳过空行raw:布尔值,设为true时直接返回单元格原始值不做格式转换,缺省为false会自动转成对应格式的数值/字符串defval:空单元格的默认填充值,比如设为null/"",所有空单元格都会被替换为该值,不会自动缺失对应字段
空列截断问题修复方案
你可以通过手动指定表头的方式避免截断,参考代码如下:
// 取第一个工作表为例,可替换为你需要转换的目标工作表 const worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 解析工作表的全量列范围 const range = XLSX.utils.decode_range(worksheet['!ref']); const customHeader = []; // 遍历所有列生成自定义表头 for(let colIndex = 0; colIndex <= range.e.c; colIndex++) { const headerCellAddr = XLSX.utils.encode_cell({r: 0, c: colIndex}); // 第一行有值就用原值作为键名,空列自动生成唯一键名避免被截断 customHeader.push(worksheet[headerCellAddr]?.v || `empty_col_${colIndex}`); } // 传入配置调用转换方法 const result = XLSX.utils.sheet_to_json(worksheet, { header: customHeader, defval: "" // 空单元格默认填充空字符串,避免字段缺失 });
如果你不需要保留第一行作为表头,可以直接传入header: 1参数,方法会返回二维数组格式的行数据,不会触发截断逻辑。
完整文档获取方式
该方法的完整参数说明、边界场景处理、用法示例可以在对应开源包的官方文档站点、NPM包详情页,以及对应代码仓库的README文档中查阅。
内容的提问来源于stack exchange,提问作者humanic_dolphin
相关产品推荐
相关产品推荐

