如何使用JavaScript从Excel工作表表格读取数据转为JSON格式
解决XLSX库读取工作表内指定表格数据的问题
情况1:读取Excel内置的结构化表格(List Object)
如果你的数据是Excel中通过「插入-表格」创建的正式结构化表格,可以直接利用工作表的tables属性自动获取表格范围,无需手动指定:
var reader = new FileReader(); reader.readAsBinaryString(file); reader.onload = function(e) { var data = e.target.result; try { var workbook = XLSX.read(data, { type : 'binary' }); var sheet = workbook.Sheets["SheetName"]; var jsonData = []; // 检查工作表是否包含结构化表格 if (sheet.tables && sheet.tables.length > 0) { // 获取第一个表格的范围(多表格场景可按索引/名称选择) var tableRange = sheet.tables[0].ref; jsonData = XLSX.utils.sheet_to_json(sheet, { defval: '', header: 'A', range: tableRange // 直接使用表格自带的范围 }); } // 后续处理jsonData... } catch (err) { console.error(err); } };
情况2:读取普通单元格区域(无需手动写死范围)
如果数据是普通单元格组成的区域,可通过解析工作表的有效数据范围,自定义调整读取的起始/结束位置:
var reader = new FileReader(); reader.readAsBinaryString(file); reader.onload = function(e) { var data = e.target.result; try { var workbook = XLSX.read(data, { type : 'binary' }); var sheet = workbook.Sheets["SheetName"]; var jsonData = []; // 获取工作表所有有效数据的完整范围 var fullRange = XLSX.utils.decode_range(sheet['!ref']); // 自定义调整范围:示例为从第3行(Excel行号)到第E列的最后一行 fullRange.s.r = 2; // 起始行:0-based索引,2对应Excel第3行 fullRange.e.c = 4; // 结束列:0-based索引,4对应Excel第E列 // 将调整后的范围转换为A1格式字符串(如"A3:E16") var customRange = XLSX.utils.encode_range(fullRange); jsonData = XLSX.utils.sheet_to_json(sheet, { defval: '', header: 'A', range: customRange }); // 后续处理jsonData... } catch (err) { console.error(err); } };
关键说明
sheet['!ref']:XLSX库自动识别的工作表有效数据边界,存储为A1格式的范围字符串(如"A1:E20")。XLSX.utils.decode_range:将A1格式范围解析为包含起始/结束行、列的对象(采用0-based索引)。XLSX.utils.encode_range:将解析后的范围对象重新转换为A1格式字符串,供sheet_to_json的range参数使用。
内容的提问来源于stack exchange,提问作者Ritika Pande
相关产品推荐
相关产品推荐

