资讯动态

JQuick-Excel 首次导出:用真实 XML 契约生成学生表

发布时间:2026/10/18 5:01:19 来源:尧图企业网站定制
JQuick-Excel 首次导出用真实 XML 契约生成学生表tags: #JQuickExcel #JavaExcel #开源 #POI #Excel工具更多示例: JQuick-Excel 官网示例 https://www.jquick.org/jquick-excel/#demo-formulas0005简介我是 JQuick-Excel 的作者。本文完成第一次导出使用测试资源中已有的学生字段、学生表工作表、字典转换、年龄计算、日期格式、公式和样式声明输出第一份可打开的 xlsx 文件。前言首次导出应先验证最小链路数据能转换为 JQuickRow输出流可写XML 在 classpath接口可创建代理。只有这四项同时成立后续的主题、公式、图表和合并才有意义。本文把业务对象简化为 Map避免示例依赖仓库外模型同时保留测试 XML 已使用的字段名称和 DSL 语法。环境与依赖我以 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 加载该文件仅放在工程根目录不会参与应用资源加载。dependencygroupIdio.github.paohaijiao/groupIdartifactIdjquick-excel/artifactIdversion3.6.0/version/dependency?xml version1.0 encodingUTF-8?!DOCTYPEexcelsPUBLIC-//PAOHAIJIAO//DTD API EXCEL 1.0//ENclasspath:paohaijiao/dtd/Jquick-excel.dtdexcelsnamespacecom.github.paohaijiao.xml.service.JQuickExcelExportServiceexcelnameexportExcelreturnClassvoid![CDATA[ EXPORT WITH SHEET学生表, HEADERtrue, MAPPING{id:主键,name:姓名,gender:性别,age:年龄,enrollmentDate:入学时间,className:班级,ignoreField:是否忽略}, FORMULAS{D5:ABS(D2)}, STYLE{ROW 1:{fontName:Arial,fontHeightInPoints:12,italic:true,color:yellow,bold:true}}, TRANSFORM{gender:trans(${dict},${gender}),age:add(${age},1),enrollmentDate:dateFormat(${enrollmentDate},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);ListJQuickRowimportExcel(Param(field)Stringfield,Param(value)Stringvalue);}ListMapString,ObjectdatanewArrayList();MapString,ObjectstudentnewLinkedHashMap();student.put(id,1001);student.put(name,张三);student.put(gender,1);student.put(age,20);student.put(enrollmentDate,newDate());data.add(student);MapString,ObjectdictnewHashMap();dict.put(1,女);JContextcontextnewJContext();context.put(dict,dict);ListJQuickRowrowsJQuickRow.toRows(JObjectConverter.convert(data));try(OutputStreamoutnewFileOutputStream(students.xlsx)){JQuickParseHandlerparsernewJQuickExcelExportXmlParseFactory(context,rows,out);JQuickFactoryfactorynewJQuickXmlFactory(parser,jquick-excel.xml);factory.createApi(JQuickExcelExportService.class).exportExcel(field,value);}原理说明导出时JObjectConverter 将集合元素转换为框架可处理的对象表示JQuickRow.toRows 再构造行集合。JQuickExcelExportXmlParseFactory 接收上下文、行与输出流代理执行 exportExcel 后EXPORT WITH 的 MAPPING 决定列和表头TRANSFORM 在写入前计算展示值FORMULAS 和 STYLE 则作用于目标单元格范围。输出成功不代表业务数据正确仍要打开工作簿检查。注意事项测试资源的年龄公式 D5:ABS(D2) 仅用于展示公式 DSL并不表示所有数据都应写到第五行。实际表格若行数不同应调整公式目标。性别字典在导出时必须是编码到中文的方向日期字段必须提供能被 dateFormat 处理的值。输出目录应存在且应用有写权限生产环境通常将 OutputStream 写入 HTTP 响应而不是固定磁盘路径。总结第一次导出不需要追求复杂报表先把数据准备、字段映射、输出流和人工检查完整走通更有价值。文件能够生成只是起点表头、列顺序、字典文字和日期显示才是使用者真正看到的结果。后续增加样式、公式或大数据配置时我仍会保留这条最小链路作为对照。基础样例越简单排查新增规则时越容易定位差异。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑