来源: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)
@Data
public 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开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
来源:https://www.cnblogs.com/javastack/p/16420026.html
本站部分图文来源于网络,如有侵权请联系删除。