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…