如何将指定路径的预选定Excel文件解析为JavaScript对象
直接读取服务器Excel文件并转换为JavaScript对象的实现方式
要实现无需用户选择,直接读取指定路径的Excel文件并转成JS对象,核心是通过HTTP请求获取服务器上的文件资源,而非依赖处理本地文件的FileReader。以下是具体实现方案:
核心思路
- 放弃
FileReader(仅用于处理用户上传的本地文件),改用fetch(或XMLHttpRequest)请求目标Excel文件 - 将请求到的文件数据转换为XLSX库所需的二进制格式
- 复用原有的解析逻辑,把Excel内容转成JS对象
修改后的完整代码
var ExcelToJSON = function() { // 通用解析逻辑:接收二进制数据,转成JS对象 this.parseExcel = function(binaryData) { var workbook = XLSX.read(binaryData, { type: 'binary' }); workbook.SheetNames.forEach(function(sheetName) { // 直接得到JS对象数组,无需多余的JSON序列化/反序列化 var rowObjects = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); console.log('解析结果:', rowObjects); jQuery('#xlx_json').val(JSON.stringify(rowObjects)); }); }; // 新增方法:从指定路径加载文件并触发解析 this.loadAndParseExcel = function(filePath) { fetch(filePath) .then(response => { if (!response.ok) throw new Error(`请求失败:${response.status}`); return response.arrayBuffer(); }) .then(buffer => { // 将ArrayBuffer转换为XLSX需要的二进制字符串 var binary = ''; var bytes = new Uint8Array(buffer); for (let i = 0; i < bytes.byteLength; i++) { binary += String.fromCharCode(bytes[i]); } this.parseExcel(binary); }) .catch(error => console.error('文件加载出错:', error)); }; }; // 页面加载完成后自动执行读取解析 document.addEventListener('DOMContentLoaded', function() { var xl2json = new ExcelToJSON(); xl2json.loadAndParseExcel('../img/file.xlsx'); });
关键注意事项
- 路径正确性:
../img/file.xlsx是相对当前HTML页面的路径,需确保文件实际存在于对应位置 - 跨域问题:如果文件所在域名和当前页面域名不同,需要服务器配置CORS允许跨域请求
- 兼容性:如果需要兼容旧浏览器,可将
fetch替换为XMLHttpRequest,逻辑类似:// 兼容版的文件加载方法 this.loadAndParseExcel = function(filePath) { var xhr = new XMLHttpRequest(); xhr.open('GET', filePath, true); xhr.responseType = 'arrayBuffer'; xhr.onload = function() { if (xhr.status === 200) { var buffer = xhr.response; var binary = ''; var bytes = new Uint8Array(buffer); for (let i = 0; i < bytes.byteLength; i++) { binary += String.fromCharCode(bytes[i]); } this.parseExcel(binary); } else { console.error('请求失败:', xhr.status); } }.bind(this); xhr.onerror = function() { console.error('网络请求出错'); }; xhr.send(); };
内容的提问来源于stack exchange,提问作者Mayank
相关产品推荐
相关产品推荐

