目录
- Excel
- 读取excel文件:
- Use:
- 输出excel文件:
- @ExcelWriteCell
- @ExcelWriteAdapter
- IConvertParserAdapter 接口
- @ExcelWriteAdapter使用方法:
- Use:
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 |
创建实体对象:
public class Table { | |
public String storageLocation; | |
public String name; | |
public String code; | |
//指定此变量保存其他数据,也可以不处理 | |
public String extend; | |
} |
这里只指定了三列数据,其他没有指定的数据列(备注、日期),将被聚合保存到被**@ExcelReadAggregate标注extend变量中,当然如果不需要这些数据也可以不用声明变量使用@ExcelReadAggregate**标注。
被@ExcelReadAggregate标注的对象接收的是一个JsonArray String 对象。
Table | |
{ | |
storageLocation='', | |
note='SDS-S', | |
name='厨房-面团分割机', | |
code='TY', | |
extend= | |
'[{"name":"日期","value":".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文件:
public class Table { | |
public String storageLocation; | |
public String name; | |
public String code; | |
//如果你将多个数据聚合在某一个变量中,可以通过实现IConvertParserAdapter接口来处理数据以便正确写入文件 | |
public String extend; | |
} |
@ExcelWriteCell
ExcelWriteCell注解有两个属性,writeIndex指定数据所属列,writeName指定列名称
@ExcelWriteAdapter
ExcelWriteAdapter用来辅助工具正确写入用户自定义的聚合数据。
这里extend 的数据如下:
[ | |
{ | |
"name":"日期", | |
"value":".2.9", | |
"index": | |
}, | |
{ | |
"name":"备注", | |
"value":".0", | |
"index": | |
} | |
] |
Name 表示列名称,value表示值,index表示列号,这里的数据结构可以自行定义。
IConvertParserAdapter 接口
使用了聚合数据,就需要实现IConvertParserAdapter接口用来解析你的聚合数据并通过ISheet接口回调数据的列名称,值,列号等信息。
针对上面的聚合数据:
public class JsonArrayConvertAdapter implements IConvertParserAdapter { | |
public void convert(ISheet sheet, Object o) { | |
JSONArray jsonArray = null; | |
try { | |
jsonArray = new JSONArray((String) o); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
for (int i =; 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使用方法:
public String extend; |
Use:
Excel.get().writeWith(file).doWrite(new IWriteListener() { | |
public void onStartWrite() { | |
Log.d(TAG, "onStartWrite: "); | |
} | |
public void onWriteError(Exception e) { | |
Log.d(TAG, "onWriteError: "+e); | |
} | |
public void onEndWrite() { | |
Log.d(TAG, "onEndWrite: "); | |
} | |
},data); |
gitee地址:gitee.com/Jian-Hu/Exc…
github地址:github.com/Andihu/Exce…