阿里 EasyExcel 使用及避坑
github地址:https://github.com/alibaba/easyexcel
原本在项目中使用EasyPoi读取excel,后来为了统一技术方案,改用阿里的EasyExcel。EasyExcel和EasyPoi有一定的相似之处。
EasyExcel和EasyPoi效率对比:
因为数据量少,从效率上看几乎没有差别,EasyExcel略胜一筹。
使用maven的方式引用EasyExcel
https://mvnrepository.com/artifact/com.alibaba/easyexcel
<!--easyexcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beat1</version>
</dependency>
使用Java模型的方式使用easyexcel
Java模型
@Data
public class TotalAmount extends BaseRowModel implements Serializable { private Integer id; @ExcelProperty(value ="类型",index = 0)
private String type;//开支类型 信用卡等 @ExcelProperty(value = "金额",index =1)
private String sum; @ExcelProperty(value = "来源",index =2)
private String name;//开支来源 如:**银行信用卡 @ExcelProperty(value = "日期",index =3)
private String date; @ExcelProperty(value = "状态",index =4)
private Integer status; @ExcelProperty(value = "备注",index =5)
private String descr; }
使用Java模型的方式需要继承 BaseRowModel ,字段上使用 @ExcelProperty 注解,注解中 value 属性指定字段名,index属性指定字段排序。
注意:这里和EasyExcel不同的是,目前可以使用只指定index和同时指定index和value的方式来匹配excel文件,但是如果只指定value,则无法读取。
@RequestMapping("/importExce")
@ResponseBody
public JsonResponse importExcel(@RequestParam("excelFile") MultipartFile excelFile, String type) throws IOException {
JsonResponse jsonResponse = new JsonResponse();
String sm="2019-02";
List<Object> dataList = null;
dataList = EasyExcelFactory.read(excelFile.getInputStream(), new Sheet(3, 1, TotalAmount.class));
int scuess = 0;
int error = 0;
for (Object o : dataList) {
if (o instanceof TotalAmount) {
TotalAmount importEntity = (TotalAmount) o; try { } catch (Exception e) {
error++;
e.printStackTrace();
continue;
}
}
}
} /* @RequestMapping("/importExce")
@ResponseBody
public JsonResponse importExce(){
JsonResponse jsonResponse = new JsonResponse();
File excelFile = new File
("E:\\工作文档\\部门架构201902(bug).xlsx");
String sm="2019-02";
InputStream inputStream = new FileInputStream(excelFile);
List<Object> dataList = null;
dataList = EasyExcelFactory.read(inputStream, new Sheet(3, 1, TotalAmount.class));
int scuess = 0;
int error = 0;
for (Object o : dataList) {
if (o instanceof TotalAmount) {
TotalAmount importEntity = (TotalAmount) o; try { } catch (Exception e) {
error++;
e.printStackTrace();
continue;
}
}
}
}*/
注意:在使用EasyExcel时容易出的几个错误:
For input "" 类型错误,应该是double等类型的字段有非double类型的数据
java.lang.NumberFormatException: multiple points 多线程使用非线程安全类报错,实际是在日期格式里有并非指定日期格式的数据,比如空格,比如指定 yyyy/mm/dd 但数据是 yyyy-mm-dd
使用easyexcel写出excel:
使用Java模型方式,返回模型列表,带入方法即可
/**
* 导出Excel
*
* @param request
* @param response
* @param map
* @throws IOException
*/
@RequestMapping("export.do")
public void export(HttpServletRequest request, String type, HttpServletResponse response,
@RequestParam Map<String, Object> map) throws IOException {
ServletOutputStream out = null;
try {
out = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
String filename;
String fileName = null;
try {
filename = new Date().toLocaleString();
fileName = new String((filename).getBytes(), "UTF-8");
Sheet sheet2 = new Sheet(2, 3, ImportEntityEasyExcel.class, "sheet", null);
List<ImportEntityEasyExcel> list = service.getData(map);
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
writer.finish();
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结:
easyexcel还有一些并不完善,但是大数据量操作效率高于easypoi
阿里 EasyExcel 使用及避坑的更多相关文章
- Java避坑宝典《Java业务开发常见错误100例》上线了
写这个专栏的缘起 之前我写过一篇博客:<朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑>,引起的关注还是挺多的.后来和极客时间的编辑一拍即合决定以这个为题写一个专栏.其实所 ...
- Canal v1.1.4版本避坑指南
前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...
- 珍爱生命,远离JS=>JS避坑记
JavaScript避坑记 转载请注明源地址: http://www.cnblogs.com/funnyzpc/p/8407952.html 上图=> 有意思的漫画,不知大家看懂了没,这里我想说 ...
- 双刃剑MongoDB的学习和避坑
双刃剑MongoDB的学习和避坑 MongoDB 是一把双刃剑,它对数据结构的要求并不高.数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档.所以我们在使用的过程中非常方 ...
- Windows环境下Anaconda安装TensorFlow的避坑指南
最近群里聊天时经常会提到DL的东西,也有群友在学习mxnet,但听说坑比较多.为了赶上潮流顺便避坑,我果断选择了TensorFlow,然而谁知一上来就掉坑里了…… 我根据网上的安装教程,默认安装了最新 ...
- spring-boot-starter-thymeleaf 避坑指南
第一步:pom配置环境 先不要管包是做什么的 总之必须要有 否则进坑 <!--避坑包--> <dependency> <groupId>net.sourceforg ...
- 在mpvue中使用map如何避坑
最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...
- MyBatis 一级缓存避坑
MyBatis 一级缓存(MyBaits 称其为 Local Cache)无法关闭,但是有两种级别可选: package org.apache.ibatis.session; /** * @autho ...
- electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3
electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...
随机推荐
- 设置外部查找工具来索引 Confluence 6
任何网页的 crawler 工具都可以被用来索引你的 Confluence 站点中的内容.如果你希望注册用户才能够查看的内容也被索引的话,你需要为你的 Confluence 创建一个只被 crawl ...
- 修改MongoDB密码
修改MongoDB密码 禁用管理员(root)密码 1.找到配置文件mongod.conf,并进入 vim /etc/mongod.conf 2.禁用管理员(root)密码 找到: security: ...
- python之通过thread来实现多进程
代码如下: import threading, time class Test1(threading.Thread): def __init__(self, name): super().__init ...
- Android 框架 Afinal使用
介绍android Afinal框架功能: Afinal是一个开源的android的orm和ioc应用开发框架.在android应用开发中,通过Afinal的ioc框架,诸如UI绑定,事件绑定,通过注 ...
- java Swing组件和事件处理(二)
1.BoxLayout类可以创建一个布局对象,成为盒式布局,BoxLayout在javax.Swing border 包中,java.swing 包提供一个Box类,该类也是一个类,创建的容器称作一 ...
- poj3162 树形dp|树的直径 + 双单调队列|线段树,好题啊
题解链接:https://blog.csdn.net/shiqi_614/article/details/8105149 用树形dp是超时的,, /* 先求出每个点可以跑的最长距离dp[i][0|1] ...
- Nginx详解十:Nginx场景实践篇之Nginx静态资源场景配置
一.静态资源WEB服务 1.静态资源类型:非服务器动态运行生成的文件 2.静态资源服务场景-CDN 假设静态资源存储中心在云南,用户在北京去请求一个文件,那么就会造成一个传输的延时,而如果Nginx同 ...
- SqlServer 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
CREATE TABLE [dbo].[Order]( [ID] [int] IDENTITY(1,1) NOT NULL, [UserId] [int] NOT NULL, [TotalPrice] ...
- Oracle数据库执行exp命令--报参数'log' 不允许有多个值
前几天设置自动备份oracle 数据库时发现一个问题,自动备份老是执行失败,后来把语句拿出来单独执行才发现是语句写的有问题,一般情况下自动备份都要自动生成日志文件,以便于我们查看备份是否正常执行.下面 ...
- layui简单例子
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...