网站首页 > java教程 正文
Excel
apache 为 Java开发者们提供了一套excel表格读写的工具:POI ,对于一个小白来说每次读写使用POI需要写一套复杂的读写流程实属不易,这里小编为大家封装了一套简单易用的excel读写工具
注解 | 描述 |
@ExcelReadCell | Name 标记表头名称 |
@ExcelTable | 使用类上用来指定表名 |
@ExcelWriteAdapter | 展开数据集合适配器 |
@ExcelWriteCell | 输出文件编辑列名称,列号信息。 |
@ExcelReadAggregate | 标记类成员变量用来保存没有标记的数据 |
读取excel文件:
数据源(表名称:测试表1):
物品编码 | 物品名称 | 存放位置 | 备注 | 日期 |
TY122635 | 厨房-面团分割机 | 0 | SDS-30S | 2021.2.1 |
TY122654 | 黑白激光打印机 | 0 | 兄弟 HL-5590DN | 2021.2.2 |
TY122652 | 黑白激光打印机 | 0 | 兄弟 HL-5590DN | 2021.2.3 |
TY122634 | 台式计算机 | 0 | 联想ThinkCentre M710t-D749 | 2021.2.4 |
创建实体对象:
- @ExcelTable(sheetName = "测试表1")
- public class Table {
- @ExcelReadCell(name = "存放位置")
- public String storageLocation;
- @ExcelReadCell(name = "物品名称")
- public String name;
- @ExcelReadCell(name = "物品编码")
- public String code;
- //指定此变量保存其他数据,也可以不处理
- @ExcelReadAggregate
- public String extend;
- }
这里只指定了三列数据,其他没有指定的数据列(备注、日期),将被聚合保存到被**@ExcelReadAggregate标注extend变量中,当然如果不需要这些数据也可以不用声明变量使用@ExcelReadAggregate**标注。
被@ExcelReadAggregate标注的对象接收的是一个jsonArray String 对象。
- Table
- {
- storageLocation='0',
- note='SDS-30S',
- name='厨房-面团分割机',
- code='TY2023122635',
- extend=
- '[{"name":"日期","value":"2021.2.1","index":7},{"name":"备注","value":"SDS30S","index":8}]'
Use:
- Excel.get().readwith(is).doReadXLSX(new IParseListener<Table>() {
- @Override
- public void onStartParse() {
- }
- @Override
- public void onParse(Table test, JSONArray jsonArray) {
- }
- @Override
- public void onParseError(Exception e) {
- }
- @Override
- public void onEndParse() {
- }
- }, Table.class);
输出excel文件:
- @ExcelTable(sheetName = "测试表1")
- public class Table {
- @ExcelWriteCell(writeIndex = 2, writeName = "存放位置")
- public String storageLocation;
- @ExcelWriteCell(writeIndex = 1, writeName = "物品名称")
- public String name;
- @ExcelWriteCell(writeIndex = 0, writeName = "物品编码")
- public String code;
- //如果你将多个数据聚合在某一个变量中,可以通过实现IConvertParserAdapter接口来处理数据以便正确写入文件
- @ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
- public String extend;
- }
@ExcelWriteCell
ExcelWriteCell注解有两个属性,writeIndex指定数据所属列,writeName指定列名称
@ExcelWriteAdapter
ExcelWriteAdapter用来辅助工具正确写入用户自定义的聚合数据。
这里extend 的数据如下:
- [
- {
- "name":"日期",
- "value":"2021.2.9",
- "index":3
- },
- {
- "name":"备注",
- "value":"1.0",
- "index":4
- }
- ]
Name 表示列名称,value表示值,index表示列号,这里的数据结构可以自行定义。
IConvertParserAdapter 接口
使用了聚合数据,就需要实现IConvertParserAdapter接口用来解析你的聚合数据并通过ISheet接口回调数据的列名称,值,列号等信息。
针对上面的聚合数据:
- public class JsonArrayConvertAdapter implements IConvertParserAdapter {
- @Override
- public void convert(ISheet sheet, Object o) {
- JSONArray jsonArray = null;
- try {
- jsonArray = new JSONArray((String) o);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- for (int i = 0; i < jsonArray.length(); i++) {
- JSONObject json = (JSONObject) jsonArray.opt(i);
- String name = (String) json.opt("name");
- Object value = json.opt("value");
- int index = (int) json.opt("index");
- sheet.onCreateCell(name, value, index);
- }
- }
- }
@ExcelWriteAdapter使用方法:
- @ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
- public String extend;
Use:
- Excel.get().writeWith(file).doWrite(new IWriteListener() {
- @Override
- public void onStartWrite() {
- Log.d(TAG, "onStartWrite: ");
- }
- @Override
- public void onWriteError(Exception e) {
- Log.d(TAG, "onWriteError: "+e);
- }
- @Override
- public void onEndWrite() {
- Log.d(TAG, "onEndWrite: ");
- }
- },data);
gitee地址:gitee.com/Jian-Hu/Exc…
github地址:github.com/Andihu/Exce…
猜你喜欢
- 2025-06-28 POI Excel导入(poi excel导入附件)
- 2025-06-28 若依框架中实现Excel浮动图片和WPS内嵌式图片的批量导入功能
- 2025-06-28 还在为 Spring Boot3 整合 Easy Excel 发愁?一文搞定!
- 2025-06-28 Python写入Excel表格模块:xlwt介绍
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)