news 2026/9/30 5:57:35

JQuick-Excel 首次导入:从 Sheet1 表头获得 JQuickRow

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JQuick-Excel 首次导入:从 Sheet1 表头获得 JQuickRow

JQuick-Excel 首次导入:从 Sheet1 表头获得 JQuickRow

tags: #JQuickExcel #JavaExcel #开源 #POI #Excel工具

简介

我是 JQuick-Excel 的作者。本文聚焦第一次导入,严格采用测试资源中的 Sheet1、学号、姓名、性别、年龄、出生日期字段,以及性别和日期转换规则,将上传或资源文件读取为 List。

前言

导入的入口不是 Java 字段,而是用户提交文件中的工作表与表头。最容易发生的错误是把导出映射方向复制到导入规则,或把文件名误写进 SHEET。为了让读者能独立验证,我把输入文件约束、资源路径、字典方向和返回值都明确写出;准备好相同表头之后,再接入自己的保存逻辑。

环境与依赖

我以 Java 8 或更高版本作为运行基线,本文固定使用 Maven 坐标io.github.paohaijiao:jquick-excel:3.6.0。仓库 POM 的项目版本为 3.6.0,并声明 Apache POI 的poi与poi-ooxml依赖,因此可读写 xls 与 xlsx 工作簿。把下面依赖写入业务工程的 pom.xml,再把 XML 服务定义放到src/main/resources/jquick-excel.xml。运行时由JQuickXmlFactory按资源名从 classpath 加载该文件;仅放在工程根目录不会参与应用资源加载。

<dependency><groupId>io.github.paohaijiao</groupId><artifactId>jquick-excel</artifactId><version>3.6.0</version></dependency>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEexcelsPUBLIC"-//PAOHAIJIAO//DTD API EXCEL 1.0//EN""classpath:paohaijiao/dtd/Jquick-excel.dtd"><excelsnamespace="com.github.paohaijiao.xml.service.JQuickExcelExportService"><excelname="importExcel"returnClass="java.util.List"><![CDATA[ IMPORT WITH HEADER=true, SHEET='Sheet1', MAPPING={"学号":"no","姓名":"name","性别":"sex","年龄":"age","出生日期":"birthday"}, TRANSFORM={"sex":trans(${dict},${sex}),"birthday":dateFormat(${birthday},'yyyy-MM-dd')} ]]></excel></excels>

代码示例

服务接口是 XML 规则对 Java 暴露的类型化契约。namespace必须等于接口的全限定名,<excel name>必须等于方法名。测试资源使用带@Param的 field、value 参数,本文保留这个实际契约,不臆造没有在仓库中出现的代理调用形式。

packagecom.github.paohaijiao.xml.service;importcom.github.paohaijiao.statement.JQuickRow;importcom.github.paohaijiao.xml.param.Param;importjava.util.List;publicinterfaceJQuickExcelExportService{voidexportExcel(@Param("field")Stringfield,@Param("value")Stringvalue);List<JQuickRow>importExcel(@Param("field")Stringfield,@Param("value")Stringvalue);}
try(InputStreamin=FirstImport.class.getClassLoader().getResourceAsStream("templates/student.xlsx")){Map<String,Object>sex=newHashMap<>();sex.put("男","1");sex.put("女","2");JContextcontext=newJContext();context.put("dict",sex);JQuickParseHandlerparser=newJQuickExcelImportXmlParseFactory(context,in);JQuickFactoryfactory=newJQuickXmlFactory(parser,"jquick-excel.xml");List<JQuickRow>rows=factory.createApi(JQuickExcelExportService.class).importExcel("field","value");System.out.println(rows.size());}

原理说明

导入解析器接收 JContext 和 InputStream,代理调用 importExcel 后按 IMPORT WITH 选择 Sheet1。HEADER=true 告诉框架首行是表头,MAPPING 用中文表头定位列并写入 no、name、sex、age、birthday 字段,TRANSFORM 随后利用上下文进行值转换。最终返回 List,业务层可在此基础上做领域校验、批量保存和错误聚合。

注意事项

资源读取结果可能为 null,因此真实业务应在创建解析器前确保上传文件或 classpath 资源存在。测试代码的导入字典方向是男到1、女到2,不能沿用导出方向。Sheet 名、表头全角半角空格、隐藏换行都可能导致映射失败;与其在代码中猜列序,不如明确模板并让用户下载标准模板。大文件不要在后续业务层无节制保留所有转换结果。

总结

导入的边界应停在结构化的JQuickRow:模板解析负责把表头和值带进系统,必填、权限、重复数据和持久化规则仍由业务层决定。这个分层能避免把不可靠的用户输入直接扩散到后续流程。

上线前我会刻意准备表头错字、Sheet 名不符、空行、未知字典值和日期异常的样本。能清楚定位这些常见问题,导入入口才算具备交付条件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 5:56:26

摄像头时好时坏怎么办?从系统排查到OpenCV与腾讯会议专项修复

摄像头这玩意儿&#xff0c;平时用不上时你觉得它就是个摆设&#xff0c;一旦开会、面试、上网课或者给家里老人视频时它掉链子&#xff0c;整个人能急出一身汗。尤其是那种“一会好使一会不好使”的毛病&#xff0c;看起来像玄学&#xff0c;其实背后几乎都有明确的技术原因。…

作者头像 李华
网站建设 2026/9/30 5:55:48

卷积神经网络改进实战:损失函数与小波散射在图像检索中的应用

简介&#xff1a;这份PDF面向深度学习入门与进阶研究者&#xff0c;聚焦卷积神经网络的理论改进与图像检索应用。内容系统梳理了CNN的结构、训练流程及LeNet-5等经典模型&#xff0c;并针对传统损失函数的局限&#xff0c;引入Triplet Network正则约束&#xff0c;提出改进算法…

作者头像 李华
网站建设 2026/9/30 5:55:14

医疗影像AI实战:DeepSeek本地化部署与DICOM微调全流程

简介&#xff1a;这份PDF教程面向医疗影像处理方向的开发者、算法工程师与医学信息学研究者&#xff0c;聚焦DeepSeek本地化部署与DICOM文件分析模型微调两大核心环节&#xff0c;帮助读者在保障数据安全的前提下搭建可定制的医学影像分析流程。资源包共1个PDF文件&#xff0c;…

作者头像 李华
网站建设 2026/9/30 5:55:12

Python如何成为AI落地的神经末梢

1. 这不是“学Python”或“学AI”的问题&#xff0c;而是理解两者如何真正咬合在一起很多人点开“Python与人工智能的理解”这个标题时&#xff0c;心里想的是&#xff1a;是不是又要看一遍“Python是AI的首选语言”这种车轱辘话&#xff1f;是不是又要背诵“TensorFlow、PyTor…

作者头像 李华
网站建设 2026/9/30 5:54:34

DeepSeek+GPU集群:基层CT影像辅助诊断模型训练实战

简介&#xff1a;这份PDF文档面向基层医院影像科医生、医疗AI方向的研究者与工程技术人员&#xff0c;围绕DeepSeek模型与GPU集群部署&#xff0c;讲解如何构建CT影像辅助诊断模型的完整训练流程。内容从医疗影像分析现状与基层医院痛点切入&#xff0c;依次覆盖DeepSeek技术原…

作者头像 李华
网站建设 2026/9/30 5:54:02

基于豆包API搭建个人知识库:语义检索与向量数据库实战

1. 这套知识库到底解决了什么问题先说说我做这套东西的背景。我日常的工作流里&#xff0c;信息源特别杂&#xff1a;飞书群里同事丢过来的文档、GitHub 上收藏的开源项目 README、自己随手记的碎片笔记、还有各种网页剪藏。以前我的做法是"收藏夹吃灰法"——看到有用…

作者头像 李华