ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Apache Fesod 快速上手:使用 FesodSheet 完成电子表格的简单读取与写入

Apache Fesod 快速上手:使用 FesodSheet 完成电子表格的简单读取与写入 后端【免费下载链接】fesodFast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM.项目地址https://gitcode.com/gh_mirrors/fast/fesod点击查看免费下载本篇技术指南以 Fesod Sheet 的快速入门示例为核心演示如何用一行式门面 APIFesodSheet完成最常见的两个场景把 xlsx 文件按行读进 Java 对象、把 Java 对象列表写出为带表头的电子表格。读完本文你将掌握读取监听器ReadListener的基本用法、ExcelProperty/ExcelIgnore注解的列映射规则以及读写构建器链的底层调用关系可以直接在业务代码中落地最小可用的导入导出功能。文中所有示例均取自仓库内官方文档 example.md并辅以对应源码与测试进行佐证。环境准备在运行示例前需要先引入fesod-sheet依赖。当前仓库中 Apache FesodIncubating官方文档guide.md给出的 Maven 配置为dependency groupIdorg.apache.fesod/groupId artifactIdfesod-sheet/artifactId version2.0.2-incubating/version /dependencyGradle 项目则使用dependencies { implementation org.apache.fesod:fesod-sheet:2.0.2-incubating }需要说明的适用前提fesod-sheet依赖 Apache POI 5.5.1Excel 处理、Apache Commons CSV 1.14.1CSV 支持与 Ehcache 3.9.11缓存等核心组件如果你的项目已经自带 POI 相关 jar 包可能需要手动排除以避免版本冲突。官方文档同时列出了各版本对 JDK 的支持范围2.0.x 系列支持 JDK 8 至 JDK 25。读取电子表格监听器模式一行触发原文档给出的读取示例非常简洁完整代码如下// 实现 ReadListener 接口设置读取数据的操作 public class DemoDataListener implements ReadListenerDemoData { Override public void invoke(DemoData data, AnalysisContext context) { System.out.println(解析到一条数据 JSON.toJSONString(data)); } Override public void doAfterAllAnalysed(AnalysisContext context) { System.out.println(所有数据解析完成); } } public static void main(String[] args) { String fileName demo.xlsx; // 读取文件 FesodSheet.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); }这段代码的调用链可以拆解为三步FesodSheet.read(fileName, DemoData.class, new DemoDataListener())指定文件路径、目标 POJO 类型和监听器.sheet()读取默认工作表从第 0 个 sheet 开始.doRead()真正开始逐行解析。从源码看 read 的三种数据源查看门面类 FesodSheet.java 可以发现read不止接受文件路径还针对不同数据来源提供了多种重载read(String pathName, Class head, ReadListener readListener)按路径读取内部转为new File(pathName)read(File file, Class head, ReadListener readListener)直接读取文件对象read(InputStream inputStream, Class head, ReadListener readListener)从输入流读取适用于上传接口、网络下载等场景。三者最终都会进入new ExcelReaderBuilder().file(...).headIfNotNull(head).registerReadListenerIfNotNull(readListener)构建出一个 ExcelReaderBuilder。也就是说数据源路径 / 文件 / 流与解析逻辑是解耦的换一种输入方式只需要改read的第一个参数。此外如果file与inputStream同时设置源码注释明确说明以文件优先。ReadListener 的核心回调读取过程中的一切行为都由 ReadListener 驱动这是一个泛型接口ReadListenerT其中T是每行数据映射到的类型。它的方法分两类方法触发时机是否必须实现invoke(T data, AnalysisContext context)每解析完一行数据时调用一次data即当前行映射出的对象必须doAfterAllAnalysed(AnalysisContext context)整个文件解析完成后调用适合做汇总、收尾或释放资源必须invokeHead(MapInteger, ReadCellData? headMap, AnalysisContext context)解析表头行时触发可选默认空实现onException(Exception exception, AnalysisContext context)任意监听器上报错误时触发若此处抛出异常则终止整个读取可选默认抛出原异常extra(CellExtra extra, AnalysisContext context)返回批注、超链接等额外信息时触发可选默认空实现hasNext(AnalysisContext context)判断是否还有下一条数据返回false可提前停止读取可选默认按numRows限制判断从默认实现看hasNext会读取当前 sheet 或整个 workbook 上配置的numRows行数上限当已读取行数达到上限时返回false终止解析——这正是控制只读前 N 行能力的底层机制对应FesodSheet.readSheet(sheetNo, sheetName, numRows)中的numRows参数。监听器的使用注意ReadListener需要每次读取时重新实例化官方文档简单读取特别提示监听器不宜被 Spring 容器管理并复用因为一次读取的生命周期内监听器内部状态如累计计数是读取逻辑的一部分。写入电子表格注解驱动的一行式导出原文档给出的写入示例同样简洁包含数据模型、数据准备和入口三部分// 示例数据类 public class DemoData { ExcelProperty(字符串标题) private String string; ExcelProperty(日期标题) private Date date; ExcelProperty(数字标题) private Double doubleData; ExcelIgnore private String ignore; } // 填充要写入的数据 private static ListDemoData data() { ListDemoData list new ArrayList(); for (int i 0; i 10; i) { DemoData data new DemoData(); data.setString(字符串 i); data.setDate(new Date()); data.setDoubleData(0.56); list.add(data); } return list; } public static void main(String[] args) { String fileName demo.xlsx; // 创建一个名为模板的 sheet 页并写入数据 FesodSheet.write(fileName, DemoData.class).sheet(模板).doWrite(data()); }写入调用链同样清晰FesodSheet.write(path, head)构建 ExcelWriterBuilder.sheet(模板)指定 sheet 名称.doWrite(data())完成写入并自动关闭输出流。write方法同样支持File、String路径与OutputStream三种目标便于对接文件下载响应。ExcelProperty表头与列映射写入时的表头、列顺序由 ExcelProperty.java 注解控制它声明在字段上关键属性如下属性默认值含义value{}表头名称可传数组写入时多个值会自动合并为多级表头读取时取最后一个作为字段映射index-1列索引从 0 开始为-1时按 Java 类字段声明顺序排列orderInteger.MAX_VALUE排序号优先级低于indexconverterAutoConverter.class强制该字段使用指定类型转换器源码注释给出的优先级规则是indexorder 默认排序。也就是说当表头顺序与字段声明顺序不一致或需要跳过某些列时可以显式指定index当只需调整相对顺序时用order即可。ExcelIgnore排除字段示例中ignore字段标注了 ExcelIgnore含义是忽略该字段的 Excel 转换——它既不会出现在写入的表头和内容中读取时也会被跳过。对于 id、内部标志位等无需落表的字段这是最直接的排除手段。sheet 名称与多个 sheetsheet(模板)用于给工作表命名。如果想按索引定位或写入多个 sheet门面类还提供了writerSheet(Integer sheetNo, String sheetName)方法配合ExcelWriter使用可以一次导出多个工作表仓库测试 SimpleDataTest.java 中有写入 sheet0、sheet1 两个工作表再统一读取的完整用例。需要注意 sheet 名称会经过sensitiveSheetName处理见 ExcelWriterSheetBuilder.java且.doWrite()只能在FesodSheet.write(...).sheet(...)这种链式入口下调用直接使用new ExcelWriterSheetBuilder()会抛出ExcelGenerateException。源码与测试佐证读写闭环是自洽的仓库中的测试工程对上述读写示例做了完整的往返验证。以 SimpleDataTest.java 为例readAndWrite构造 10 条数据 → 写入文件 → 读回 → 断言读回条数为 10 且首条 name 为Name0synchronousRead通过doReadSync()将文件一次性读为内存中的ListSimpleData列表sheetNameRead07/sheetNoRead07验证sheet(simple)按名称、sheet(1)按索引两种定位 sheet 的读取方式pageReadListener07使用PageReadListener按每批 5 条分页消费数据pageReadListenerMultipleSheets07验证跨多个 sheet 读取时每行数据恰好被回调一次。测试数据模型 DemoData.java 与文档示例一致string、date、doubleData三个字段并注明字段顺序与 Excel 列顺序一一对应这印证了默认按字段声明顺序映射的约定。如果你需要将整个文件直接读入内存列表数据量较小时可以参考 简单读取 文档中的doReadSync()用法ListDemoData list FesodSheet.read(fileName) .head(DemoData.class) .sheet() .doReadSync();进阶方向本文覆盖的是官方文档中的最小示例。进一步深入时可以沿以下路径继续读取细节列索引解析、无 POJO 的Map读取、读取指定行数范围见 简单读取写入细节多级表头、样式、合并单元格与填充见 写入 系列文档类型转换日期格式、数字格式与自定义转换器见 转换器CSV 支持fesod-sheet同时提供 CSV 读写能力配合charset参数使用见 CSV 读取。小结通过本文的简单示例可以看出Fesod Sheet 的读写 API 高度对称读取用FesodSheet.read(...).sheet().doRead()配合ReadListener写入用FesodSheet.write(...).sheet(...).doWrite(data)配合ExcelProperty注解二者都以门面方法 构建器链的形式收敛了复杂度。示例中的DemoData既是读取的映射目标也是写入的数据模型同一套注解可以同时服务导入与导出这正是它适合作为业务中报表导出 / 数据导入模块起步模板的原因。赞分享后端【免费下载链接】fesodFast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM.项目地址https://gitcode.com/gh_mirrors/fast/fesod点击查看免费下载相关推荐PhpSpreadsheet 快速上手指南使用纯 PHP 读写 Excel 电子表格PhpSpreadsheet 快速上手指南使用纯 PHP 读写 Excel 电子表格 PhpSpreadsheet 是一套用纯 PHP 编写的类库提供了一组后端Apache Fesod(Incubating) Fesod Sheet 快速上手一个示例玩转 Excel 读写Apache Fesod Incubating Fesod Sheet 快速上手一个示例玩转 Excel 读写 Apache Fesod Incubating后端5分钟快速上手Jspreadsheet电子表格的完整使用指南5分钟快速上手Jspreadsheet电子表格的完整使用指南 想要在网页中创建功能强大的电子表格吗Jspreadsheet CE v5是一个轻量级的纯Jav前端UI组件上一篇Seafile知识管理指标分析如何评估团队内容活跃度与用户参与度下一篇终端效率革命Powerlevel9k与Oh-My-Zsh默认主题全方位对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表