共计 4256 个字符,预计需要花费 11 分钟才能阅读完成。
起源: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 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!
正文完