Android 优雅的读写Excel
作者:Hujian 时间:2021-09-19 15:10:37
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…
来源:https://juejin.cn/post/7213771312121102394
标签:Android,读写,Excel
0
投稿
猜你喜欢
Android实现读取NFC卡的编号
2021-07-13 11:19:21
详解如何利用C#实现设置系统时间
2023-09-04 13:55:05
Android中TextView自动适配文本大小的几种解决方案
2022-05-28 09:08:01
Android通过实现GridView的横向滚动实现仿京东秒杀效果
2023-06-08 22:53:46
java模拟TCP通信实现客户端上传文件到服务器端
2023-11-26 10:14:49
Android自定义view之3D正方体效果实例
2023-02-01 05:01:34
Maven中央仓库发布的实现方法
2023-12-09 07:15:06
C# 使用Fiddler捕获本地HttpClient发出的请求操作
2022-06-28 04:10:34
基于java构造方法Vector创建对象源码分析
2023-11-25 11:27:54
DevExpress实现自定义TreeListNode的Tooltip的方法
2022-08-19 05:39:47
Java全面细致讲解类与对象
2022-07-07 07:04:42
Android Handler源码深入探究
2023-02-17 11:54:53
SpringCloud微服务架构升级汇总
2022-05-04 06:09:19
java struts2学习笔记之线程安全
2022-08-07 00:13:07
java实现邮件发送
2022-06-03 02:48:20
SpringBoot如何读取war包jar包和Resource资源
2023-11-09 01:40:44
Android自定义View用切图显示字符串
2023-03-13 07:14:58
详解Android USB转串口通信开发基本流程
2022-01-04 10:12:15
Java异步处理机制实例详解
2022-05-12 01:39:37
C#实现缩放字体的方法
2021-08-25 23:47:51