起源:blog.csdn.net/weixin_43225813/article/details/108995011

性能介绍

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实现导入

我的项目中应用:

<dependency>    <groupId>com.alanpoi</groupId>    <artifactId>alanpoi-analysis</artifactId>    <version>1.3.0</version></dependency>
简略一句话:一配置一继承一调用

一配置

在我的项目resources目录中新建excel-config.xml文件,cosume中配置本人的消费类门路,继承ExcelConsumeInterface接口,sheet中的vo是把以后sheet序列化的对象门路,column中当然就是配置vo中的属性了。

其中name可选字段,填了就是依照这个匹配excel列名,不填就是依照offset程序;导入蕴含多个sheet就配置多个

<?xml version = "1.0" encoding = "GB2312"?><exg name="excelId" version="1.0" file-type="excel">  <excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">     <sheet index="0" row-start="1" column-start="0"            vo="com.xxx.vo.FinAccountImportVO">         <column name="公司/供应商编号" offset="1">companyCode</column>         <column name="公司/供应商名称" offset="2">companyName</column>         <column name="银行账号" offset="3">bankAccount</column>         <column name="开户银行" offset="4">bankName</column>     </sheet> </excel></exg>

一继承

consume类继承ExcelConsumeInterface接口,实现办法

/** * when error will 调用 * * @param excelError */void error(ExcelError excelError);/** * custom valid data * * @param workbookId * @param sheetDataList */void validData(String workbookId, List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);/** * @param sheetDataList return success data */void end(List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);

一调用

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

Export

描叙

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

模式

注解模式导出:

  • ExcelSheet注解: 用于导入类上,可制订sheet名,列头的色彩、字体、高度、宽度
  • ExcelColum注解: 用于导入类的属性上,可指定列头的名称,单元格的款式
  • DateFormat注解: 用于导入类的属性上, 能够依照指定格局输入到excel,默认"yyyy/MM/dd"
  • NumFormat注解: 用于导入类的属性上,能够依照指定格局输入到excel,默认"00.00"

样例:

@ExcelSheet(name = "测试", backColor = AlanColors.GREEN, font = "宋体", fontSize = 25)@Datapublic class ExportVO {    @ExcelColumn(name = "名称", width = 32, link = "${url}")    private String name;    @ExcelColumn(name = "值")    private String value;    @ExcelColumn(name = "金额")    @NumFormat(value = "0000.00##")    private BigDecimal amount;    @ExcelColumn(name = "工夫格式化")    @DateFormat(value = "yyyy-MM-dd hh:mm:ss")    private Date dateTime;    @DateFormat    @ExcelColumn(name = "日期格式化")    private java.sql.Date date;        @ExcelColumn(isExist = false)    private String url;}

应用

形式一. 间接导出到浏览器

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

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

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

高级应用

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

List<ExportVO> list = new ArrayList<>();for (int i = 0; i < 500; i++) {    ExportVO exportVO = new ExportVO();    exportVO.setName("name" + i);    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));    exportVO.setDate(new Date(132324343 + i * 100));    exportVO.setDateTime(new java.util.Date());    list.add(exportVO);}List<String> colList = new ArrayList<>();//依照程序仅导出add的列colList.add("name");colList.add("value");//调用获取workbook对象;也能够间接调用exportSpecifyCol办法导出到浏览器Workbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.class, colList);

示例二:多sheet页签导出

List<ExportVO> list = new ArrayList<>();List<Export2VO> list2 = new ArrayList<>();for (int i = 0; i < 500; i++) {    ExportVO exportVO = new ExportVO();    exportVO.setName("name" + i);    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));    exportVO.setDate(new Date(132324343 + i * 100));    exportVO.setDateTime(new java.util.Date());    list.add(exportVO);    Export2VO export2VO = new Export2VO();    export2VO.setName("name" + i);    export2VO.setValue("value" + i);    export2VO.setAmount(new BigDecimal(6666.666 + i * 10));    export2VO.setDate(new Date(132324343 + i * 100));    export2VO.setDateTime(new java.util.Date());    list2.add(export2VO);}Map<Class<?>, Collection<?>> map = new HashMap<>();map.put(ExportVO.class, list);map.put(Export2VO.class, list2);//调用获取workbook对象;也能够间接调用exportByMultiSheet办法导出到浏览器Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);

近期热文举荐:

1.1,000+ 道 Java面试题及答案整顿(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!