Android 优雅的读写Excel

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

创建实体对象:

  1. @ExcelTable(sheetName = “测试表1”)
  2. public class Table {
  3.      @ExcelReadCell(name = “存放位置”)
  4.      public String storageLocation;
  5.      @ExcelReadCell(name = “物品名称”)
  6.      public String name;
  7.      @ExcelReadCell(name = “物品编码”)
  8.      public String code;
  9.      //指定此变量保存其他数据,也可以不处理
  10.      @ExcelReadAggregate
  11.      public String extend;
  12. }

这里只指定了三列数据,其他没有指定的数据列(备注、日期),将被聚合保存到被**@ExcelReadAggregate标注extend变量中,当然如果不需要这些数据也可以不用声明变量使用@ExcelReadAggregate**标注。

被@ExcelReadAggregate标注的对象接收的是一个jsonArray String 对象。

  1. Table
  2. {
  3. storageLocation=‘0’,
  4. note=‘SDS-30S’,
  5. name=‘厨房-面团分割机’,
  6. code=‘TY2023122635’,
  7. extend=
  8. ‘[{“name”:”日期”,”value”:”2021.2.1″,”index”:7},{“name”:”备注”,”value”:”SDS30S”,”index”:8}]’

Use:

  1. Excel.get().readwith(is).doReadXLSX(new IParseListener<Table>() {
  2.      @Override
  3.      public void onStartParse() {
  4.      }
  5.      @Override
  6.      public void onParse(Table test, JSONArray jsonArray) {
  7.      }
  8.      @Override
  9.      public void onParseError(Exception e) {
  10.      }
  11.      @Override
  12.      public void onEndParse() {
  13.      }
  14. }, Table.class);

输出excel文件:

  1. @ExcelTable(sheetName = “测试表1”)
  2. public class Table {
  3.      @ExcelWriteCell(writeIndex = 2, writeName = “存放位置”)
  4.      public String storageLocation;
  5.      @ExcelWriteCell(writeIndex = 1, writeName = “物品名称”)
  6.      public String name;
  7.      @ExcelWriteCell(writeIndex = 0, writeName = “物品编码”)
  8.      public String code;
  9.      //如果你将多个数据聚合在某一个变量中,可以通过实现IConvertParserAdapter接口来处理数据以便正确写入文件
  10.      @ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
  11.      public String extend;
  12. }

@ExcelWriteCell

ExcelWriteCell注解有两个属性,writeIndex指定数据所属列,writeName指定列名称

@ExcelWriteAdapter

ExcelWriteAdapter用来辅助工具正确写入用户自定义的聚合数据。

这里extend 的数据如下:

  1. [
  2.      {
  3.          “name”:“日期”,
  4.          “value”:“2021.2.9”,
  5.          “index”:3
  6.      },
  7.      {
  8.          “name”:“备注”,
  9.          “value”:“1.0”,
  10.          “index”:4
  11.      }
  12. ]

Name 表示列名称,value表示值,index表示列号,这里的数据结构可以自行定义。

IConvertParserAdapter 接口

使用了聚合数据,就需要实现IConvertParserAdapter接口用来解析你的聚合数据并通过ISheet接口回调数据的列名称,值,列号等信息。

针对上面的聚合数据:

  1. public class JsonArrayConvertAdapter implements IConvertParserAdapter {
  2.      @Override
  3.      public void convert(ISheet sheet, Object o) {
  4.          JSONArray jsonArray = null;
  5.          try {
  6.              jsonArray = new JSONArray((String) o);
  7.          } catch (JSONException e) {
  8.              e.printStackTrace();
  9.          }
  10.          for (int i = 0; i < jsonArray.length(); i++) {
  11.              JSONObject json = (JSONObject) jsonArray.opt(i);
  12.              String name = (String) json.opt(“name”);
  13.              Object value = json.opt(“value”);
  14.              int index = (int) json.opt(“index”);
  15.              sheet.onCreateCell(name, value, index);
  16.          }
  17.      }
  18. }

@ExcelWriteAdapter使用方法:

  1.      @ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
  2.      public String extend;

Use:

  1.      Excel.get().writeWith(file).doWrite(new IWriteListener() {
  2.                      @Override
  3.                      public void onStartWrite() {
  4.                      Log.d(TAG, “onStartWrite: “);
  5.                      }
  6.                      @Override
  7.                      public void onWriteError(Exception e) {
  8.                      Log.d(TAG, “onWriteError: “+e);
  9.          }
  10.                      @Override
  11.                      public void onEndWrite() {
  12.                      Log.d(TAG, “onEndWrite: “);
  13.                      }
  14.                      },data);

gitee地址:gitee.com/Jian-Hu/Exc…

github地址:github.com/Andihu/Exce…

以上就是android 优雅的读写Excel的详细内容,更多关于Android 读写Excel的资料请关注我们其它相关文章!

标签

发表评论