《智能学号抽取系统》V5.9.5 发布:精简代码,修复移动端文件读取核心 Bug


《智能学号抽取系统》V5.9.5 发布:精简代码,修复移动端文件读取核心 Bug

📌 前言

V5.9.3 是一个里程碑版本,它首次实现了从 Web 工具到全平台原生应用的跨越------Windows、macOS、Linux、Android APK,一套代码多端交付。

然而,在实际使用中,我们收到了一个令人困惑的反馈:

"老师,我的安卓手机安装了 APK,能进入文件管理器,也能选 Excel 文件,但选完没反应,名单导不进去......"

这个问题比"选不了文件"更隐蔽------用户能看到文件、能选择文件,但读取失败了。

V5.9.5,就是为了修复这个核心 Bug 而诞生的。


🐛 一、Bug 根源:plus.io.FileReader 与 XLSX 库不兼容

V5.9.3 的文件读取流程

javascript 复制代码
// 步骤1:使用 plus API 选择文件
plus.io.chooseFile({
  onsuccess: function(e) {
    var filePath = e.path;  // ✅ 能获取路径
    readFileWithPlus(filePath, callback);
  }
});

// 步骤2:使用 plus.io.FileReader 读取文件
function readFileWithPlus(filePath, callback) {
  plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
    entry.file(function(file) {
      var reader = new plus.io.FileReader();  // ⚠️ 问题所在
      reader.onloadend = function(e) {
        var arrayBuffer = e.target.result;
        callback(arrayBuffer);  // ❌ 传给 XLSX 库后解析失败
      };
      reader.readAsArrayBuffer(file);
    });
  });
}

问题定位

阶段 表现 状态
打开文件选择器 正常弹出
进入文件管理器 正常浏览
选择 Excel 文件 正常选中
plus.io.FileReader 读取 能读到数据 ⚠️
XLSX 库解析 解析失败

根本原因plus.io.FileReader 返回的 ArrayBuffer 格式与标准 Web API 不一致,导致 XLSX 库无法正确解析 Excel 文件内容。

用户的实际体验

复制代码
用户操作:点击导入 → 选择文件 → 选中心仪的 Excel → 确认
系统响应:没有任何反应,名单为空
用户心理:???我选错了吗?再试一次 → 还是不行
最终结论:这个 APP 有问题

这种"能选但无效"的体验,比直接报错更令人困惑。


🔧 二、V5.9.5 的解决方案:回归标准 Web API

核心修复代码

javascript 复制代码
// V5.9.5 ------ 删除所有 plus.io 相关代码,使用标准 API
function selectExcelFile(callback) {
  var input = document.createElement('input');
  input.type = 'file';
  input.accept = '.xlsx,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel';
  
  input.onchange = function(e) {
    var file = e.target.files[0];
    if (!file) return;
    
    // 使用标准 FileReader API
    var reader = new FileReader();
    reader.onload = function(evt) {
      var arrayBuffer = evt.target.result;
      // 标准格式,XLSX 库完美兼容
      if (callback) callback(arrayBuffer);
    };
    reader.onerror = function() {
      // 明确的错误提示
      if (callback) callback(null);
    };
    reader.readAsArrayBuffer(file);
  };
  
  input.click();
}

为什么这样能工作?

对比项 V5.9.3 (plus.io) V5.9.5 (标准 API)
API 来源 HBuilderX 私有 API W3C 标准 Web API
ArrayBuffer 格式 非标准格式 标准格式 ✅
XLSX 库兼容性 ❌ 不兼容 ✅ 完美兼容
代码复杂度 高(路径解析+回调嵌套) 低(15行搞定)
错误提示 静默失败 可明确捕获

修复后的用户体验

复制代码
用户操作:点击导入 → 选择文件 → 选中心仪的 Excel → 确认
系统响应:✅ "成功导入 40 条新记录"
用户感受:终于能用了!

✨ 三、V5.9.5 的其他改进

3.1 新增拖拽上传功能

css 复制代码
.upload-area.drag-over {
  border-color: var(--primary-color);
  background: rgba(67, 97, 238, 0.05);
  transform: scale(1.02);
}

电脑端使用时,可直接将 Excel 文件拖入上传区域,操作更便捷。

3.2 修复快速抽取模式的历史记录同步

V5.9.3 的问题

  • 快速抽取停止后,最终显示的学号没有被加入"已抽取列表"
  • 导致可以重复抽取同一个学生

V5.9.5 修复

javascript 复制代码
// 停止快速抽取时,同步最终结果到已抽取列表
if (currentNumber.value !== '---' && noRepeat.value) {
  const finalItem = { 
    student_id: currentNumber.value, 
    name: currentStudent.value.name 
  };
  if (!usedList.value.some(u => u.student_id === finalItem.student_id)) {
    usedList.value.push(finalItem);
  }
}

3.3 代码精简,体积更小

对比项 V5.9.3 V5.9.5 变化
总代码行数 ~1250 行 ~1150 行 -100 行
文件选择模块 ~60 行 ~15 行 -45 行
plus API 兼容代码 ✅ 存在 ❌ 移除 彻底删除

📊 四、版本对比总结

功能/特性 V5.9.3 V5.9.5
学号范围模式
名单导入模式
多模态抽取
拖拽上传
手动粘贴导入
暗色模式
URL 分享
移动端选择 Excel 文件 ✅ 可以选 ✅ 可以选
移动端读取解析 Excel 解析失败 解析成功
快速抽取历史同步 有 Bug 已修复
代码体积 ~1250 行 ~1150 行(更小)

💡 五、经验与启示

5.1 私有 API 不可靠

plus.io 是 HBuilderX 提供的私有 API,虽然功能丰富,但:

  • 返回的数据格式可能与标准 API 不一致
  • 第三方库(如 XLSX)不一定兼容
  • 不同版本的行为可能有差异

教训:优先使用标准 Web API,除非私有 API 提供了不可替代的功能。

5.2 "能选"不等于"能用"

V5.9.3 的文件选择器在表象上是成功的:

  • ✅ 用户能看到文件管理器
  • ✅ 用户能浏览和选择文件

但在深层次上是失败的:

  • ❌ 读取的数据无法被解析
  • ❌ 没有任何错误提示

教训:错误处理要完善,静默失败是最差的用户体验。

5.3 用户反馈是无价之宝

正是因为用户的真实反馈------"能选文件但导不进去"------我们才定位到这个隐蔽的 Bug。

感谢每一位反馈问题的用户! 🙏


📦 六、下载与使用

方式一:Web 在线版

直接访问部署地址,无需安装,适合临时使用。

方式二:桌面原生应用

  • Windows : .exe 安装包
  • macOS : .dmg 安装包(🙏 待社区贡献)
  • Linux : .AppImage / .deb

方式三:Android APK

下载 智能学号抽取系统.apk,直接安装到手机或平板。

V5.9.5 修复了 APK 内 Excel 文件读取解析失败的问题,现在可以正常导入名单了。


🔮 七、未来计划

计划 状态
iOS / iPadOS 版本 🙏 诚邀社区开发者贡献
鸿蒙原生版本 🚧 开发中
语音播报 📋 规划中
云端数据同步 📋 规划中
抽取统计看板 📋 规划中

💬 八、结语

V5.9.5 不是一个"大版本",但它解决了一个"大问题"。

它告诉我们:好的软件不是功能越多越好,而是每个功能都能正常工作。

从 V5.9.3 的"全平台覆盖"到 V5.9.5 的"修复核心痛点",智能学号抽取系统又向前迈进了一小步。

让每一次点名,都成为课堂的高光时刻。


📢 下载地址GitHub Releases

📖 技术博客CSDN专栏

如果这个工具对你有帮助,欢迎 Star、分享!


© 2025 Herryfyh | 智能学号抽取系统 V5.9.5

相关推荐
IOT.FIVE.NO.11 天前
Codex Skill 内部结构解析:从 SKILL.md 到 scripts、references、assets
前端·javascript·人工智能·笔记·html
我命由我123451 天前
前端开发概念 - 无障碍树
javascript·css·笔记·学习·html·html5·js
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_29:(动态构建与更新 DOM 树)
前端·javascript·ui·html·html5·媒体
编程技术手记1 天前
html table布局平衡
前端·html
布局呆星1 天前
Spring Boot+MyBatis-Plus+Vue3前后端协作Note
spring boot·typescript·vue·mybatis
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_27:(深入理解 HTML 属性反射机制)
前端·javascript·ui·html·音视频·媒体
桃花键神1 天前
【2026精品项目】基于SpringBoot3+Vue3的校园小卖铺系统(包含源码+项目文档+SQL脚本+部署教程)
数据库·sql·vue·毕业设计·springboot
z19408920661 天前
在线生成背景:字号层级怎么做才像「正式物料」
前端·javascript·html
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_26:(DOM 的树形结构与节点导航)
前端·ui·html·音视频·视频编解码
华科大胡子1 天前
HTML头部元信息避坑指南
html