You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中不使用第三方包解析API返回的Excel数据的方法

React Native中不使用第三方包解析API返回的Excel数据的方法

嘿,我留意到你在React Native里折腾API返回的Excel文件解析,而且已经试过用xlsx+react-native-fs的组合了。既然你想尝试不依赖第三方包的方案,我来给你拆解下可行的思路——不过先提前说一句,手动解析Excel真的挺折腾的,只适合简单场景哦~

首先,不管哪种Excel格式,第一步都是从API拿到原始的二进制数据:

  • 用fetch或者axios发起请求时,一定要把responseType设为arraybuffer或者blob,这样才能拿到未处理的二进制内容。举个fetch的例子:
    const fetchExcel = async () => {
      try {
        const res = await fetch('你的API接口地址', {
          method: 'GET',
          headers: {
            // 按需加API要求的请求头,比如授权令牌之类的
          },
          responseType: 'arraybuffer'
        });
        const buffer = await res.arrayBuffer();
        // 接下来就可以针对不同格式处理这个buffer了
      } catch (err) {
        console.error('拉取Excel数据失败:', err);
      }
    };
    

针对旧版.xls格式的手动解析

.xls是基于BIFF二进制规范的,结构相当复杂。如果你的Excel只有纯文本的简单表格(没有公式、样式、合并单元格),可以尝试把arraybuffer转成Uint8Array,然后根据BIFF的规范去定位工作表、行、列的偏移量,提取单元格内容。但说实话,这个工作量极大,稍微复杂点的表格就容易翻车,不太推荐除非你真的必须这么做。

针对.xlsx/.xlsm格式的手动解析

这两种格式本质上是压缩的ZIP包,里面藏着一堆XML文件。你可以按这个思路来:

  1. 解压ZIP包:不过手动写ZIP解压逻辑真的很麻烦,要是你的API返回的ZIP结构特别简单(没有加密、只有基础文件),可以尝试自己处理二进制里的ZIP标识和文件块,但这一步门槛很高。
  2. 读取工作表XML:解压后找到xl/worksheets/sheet1.xml(第一个工作表的内容),然后解析这个XML里的单元格数据。比如用简单的正则匹配来提取行和单元格的值:
    const parseSheetXml = (xmlStr) => {
      const tableData = [];
      // 匹配所有行标签
      const rowList = xmlStr.match(/<row[^>]*>(.*?)<\/row>/g);
      if (rowList) {
        rowList.forEach(rowStr => {
          const rowData = [];
          // 匹配所有单元格标签
          const cellList = rowStr.match(/<c[^>]*>(.*?)<\/c>/g);
          if (cellList) {
            cellList.forEach(cellStr => {
              // 提取单元格的实际值(<v>标签里的内容)
              const valueMatch = cellStr.match(/<v>(.*?)<\/v>/);
              rowData.push(valueMatch ? valueMatch[1] : '');
            });
          }
          tableData.push(rowData);
        });
      }
      return tableData;
    };
    
    注意哦,这个方法只能处理纯文本单元格,遇到日期(XML里是序列化数字)、公式、合并单元格的话,还得额外写逻辑转换,非常繁琐。

最后给你提个实在的建议:如果不是有特殊限制,还是用成熟的第三方包更靠谱。你之前遇到的高严重性漏洞,可以试试升级xlsx的版本——比如运行npm update xlsx,说不定最新版本已经修复了漏洞。手动解析真的太耗精力了,很容易踩各种坑~

备注:内容来源于stack exchange,提问作者WeCan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:33:15