Java

功能介绍

IMPORT

  • **ExcelHandle** 核心处理器
  • **ExcelWorkbookManage** excel所有工作表管理
  • **ExcelInitConfig** 配置文件初始化
  • **AbstractFileParser** 文件转换类

    alanpoi import有何优势?

  • 用户不需要额外引入poi等繁琐的jar

  • 毫秒级解析大文件,支持一键解析多sheet页签,不需要自己按照一定的格式循环匹配解析所有数据
  • 不管系统多么复杂,有多少个导入,alanpoi全部支持,而且准确返回需要的对象,减轻开发者工作量
  • 目前外界业务越来越复杂,对各个功能要求也越来越严格,当然导入也不例外,alanpoi支持错误一键回写到excel,对应到每一行
  • alanpoi灵活可扩展,提供了**ExcelConsumeInterface**接口,可继承它,实现**valid****error****end**三个方法编写自己的业务
    • valid:方法参数返回excel所有数据,用户可进行自我校验
    • error:导入错误会回调
    • end:方法参数返回校验成功的数据,valid校验失败的数据不会返回,用户可以自己操作持久化或者其他业务

      怎么使用alanpoi实现导入

      项目中使用:
      1. <dependency>
      2. <groupId>com.alanpoi</groupId>
      3. <artifactId>alanpoi-analysis</artifactId>
      4. <version>1.3.0</version>
      5. </dependency>
      简单一句话:一配置一继承一调用

      一配置

      在项目resources目录中新建excel-config.xml文件,cosume中配置自己的消费类路径,继承ExcelConsumeInterface接口,sheet中的vo是把当前sheet序列化的对象路径,column中当然就是配置vo中的属性了。
      其中name可选字段,填了就是按照这个匹配excel列名,不填就是按照offset顺序;导入包含多个sheet就配置多个
      1. <?xml version = "1.0" encoding = "GB2312"?>
      2. <exg name="excelId" version="1.0" file-type="excel">
      3. <excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">
      4. <sheet index="0" row-start="1" column-start="0"
      5. vo="com.xxx.vo.FinAccountImportVO">
      6. <column name="公司/供应商编号" offset="1">companyCode</column>
      7. <column name="公司/供应商名称" offset="2">companyName</column>
      8. <column name="银行账号" offset="3">bankAccount</column>
      9. <column name="开户银行" offset="4">bankName</column>
      10. </sheet>
      11. </excel>
      12. </exg>

      一继承

      consume类继承ExcelConsumeInterface接口,实现方法 ```java /**
      • when error will 调用 *
      • @param excelError */ void error(ExcelError excelError);

/**

  • custom valid data *
  • @param workbookId
  • @param sheetDataList */ void validData(String workbookId, List sheetDataList, Map excelParam);

/**

  • @param sheetDataList return success data */ void end(List sheetDataList, Map excelParam); ```

    一调用

    用户调用ExcelExportUtil类的customImportData即可,参数excelId就是excel-conifg.xml中配置的id

    Export

    描叙

    能够用一行代码实现绝不用第二行,如果一行不行,那就再加一行!

    模式

    注解模式导出:
  • **ExcelSheet**注解:用于导入类上,可制定sheet名,列头的颜色、字体、高度、宽度
  • **ExcelColum**注解:用于导入类的属性上,可指定列头的名称,单元格的样式
  • **DateFormat**注解:用于导入类的属性上, 可以按照指定格式输出到excel,默认”yyyy/MM/dd”
  • **NumFormat**注解:用于导入类的属性上,可以按照指定格式输出到excel,默认”00.00”

样例:

  1. @ExcelSheet(name = "测试", backColor = AlanColors.GREEN, font = "宋体", fontSize = 25)
  2. @Data
  3. public class ExportVO {
  4. @ExcelColumn(name = "名称", width = 32, link = "${url}")
  5. private String name;
  6. @ExcelColumn(name = "值")
  7. private String value;
  8. @ExcelColumn(name = "金额")
  9. @NumFormat(value = "0000.00##")
  10. private BigDecimal amount;
  11. @ExcelColumn(name = "时间格式化")
  12. @DateFormat(value = "yyyy-MM-dd hh:mm:ss")
  13. private Date dateTime;
  14. @DateFormat
  15. @ExcelColumn(name = "日期格式化")
  16. private java.sql.Date date;
  17. @ExcelColumn(isExist = false)
  18. private String url;
  19. }

使用

方式一、直接导出到浏览器

  1. ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);

方式二、调用getWorkbook获取工作表,自行处理workbook

  1. ExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)

高级使用

示例一:导出指定列(动态导出列)

  1. List<ExportVO> list = new ArrayList<>();
  2. for (int i = 0; i < 500; i++) {
  3. ExportVO exportVO = new ExportVO();
  4. exportVO.setName("name" + i);
  5. exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
  6. exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
  7. exportVO.setDate(new Date(132324343 + i * 100));
  8. exportVO.setDateTime(new java.util.Date());
  9. list.add(exportVO);
  10. }
  11. List<String> colList = new ArrayList<>();
  12. //按照顺序仅导出add的列
  13. colList.add("name");
  14. colList.add("value");
  15. //调用获取workbook对象;也可以直接调用exportSpecifyCol方法导出到浏览器
  16. Workbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.class, colList);

示例二:多sheet页签导出

  1. List<ExportVO> list = new ArrayList<>();
  2. List<Export2VO> list2 = new ArrayList<>();
  3. for (int i = 0; i < 500; i++) {
  4. ExportVO exportVO = new ExportVO();
  5. exportVO.setName("name" + i);
  6. exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
  7. exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
  8. exportVO.setDate(new Date(132324343 + i * 100));
  9. exportVO.setDateTime(new java.util.Date());
  10. list.add(exportVO);
  11. Export2VO export2VO = new Export2VO();
  12. export2VO.setName("name" + i);
  13. export2VO.setValue("value" + i);
  14. export2VO.setAmount(new BigDecimal(6666.666 + i * 10));
  15. export2VO.setDate(new Date(132324343 + i * 100));
  16. export2VO.setDateTime(new java.util.Date());
  17. list2.add(export2VO);
  18. }
  19. Map<Class<?>, Collection<?>> map = new HashMap<>();
  20. map.put(ExportVO.class, list);
  21. map.put(Export2VO.class, list2);
  22. //调用获取workbook对象;也可以直接调用exportByMultiSheet方法导出到浏览器
  23. Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);

代码已经开源,地址:https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis