# tlgen-springboot-easyexcel
**Repository Path**: tlgen_1/tlgen-springboot-easyexcel
## Basic Information
- **Project Name**: tlgen-springboot-easyexcel
- **Description**: springboot整合easyexcel导出导入
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2020-11-15
- **Last Updated**: 2023-11-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# tlgen-springboot-easyexcel
springboot整合easyexcel导出导入
全部依赖
```
org.springframework.boot
spring-boot-starter
org.projectlombok
lombok
true
com.alibaba
easyexcel
1.1.2-beta5
org.apache.poi
poi
3.17
org.apache.poi
poi-ooxml
3.17
mysql
mysql-connector-java
8.0.20
runtime
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
```
实体类
```
@Data
public class User extends BaseRowModel {
@ExcelProperty(value = "ID", index = 0)
private Long id;
@ExcelProperty(value = "姓名", index = 1)
private String name;
@ExcelProperty(value = "年龄", index = 2)
private String age;
}
```
数据库访问层
```
@Mapper
public interface UserMapper {
@Select("select * from t_user")
public List getAllUsers();
@Insert("insert into t_user(name, age) values (#{name}, #{age})")
void addUser(User user);
}
```
业务逻辑层
```
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 导出excel
* @param response
* @throws IOException
*/
public void excelExport(HttpServletResponse response) throws IOException {
List list = userMapper.getAllUsers();
String fileName = "response";
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xls");
ServletOutputStream out = response.getOutputStream();
ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLS,true);
Sheet sheet = new Sheet(1,0,User.class);
//设置自适应宽度
sheet.setAutoWidth(Boolean.TRUE);
sheet.setSheetName("用户名单");
writer.write(list,sheet);
writer.finish();
out.flush();
response.getOutputStream().close();
out.close();
}
/**
* 导入excel
* @param file
* @throws IOException
*/
public void excelImport(MultipartFile file) throws IOException {
if(!file.getOriginalFilename().equals("response.xls") && !file.getOriginalFilename().equals("response.xlsx") ){
return;
}
InputStream inputStream = new BufferedInputStream(file.getInputStream());
//实例化实现了AnalysisEventListener接口的类
ExcelListener excelListener = new ExcelListener(userMapper);
ExcelReader reader = new ExcelReader(inputStream,null,excelListener);
//读取信息
reader.read(new Sheet(1,1,User.class));
}
}
```
ExcelListener
```
public class ExcelListener extends AnalysisEventListener {
private List datas = new ArrayList<>();
private static final int BATCH_COUNT = 3000;
private UserMapper userMapper;
public ExcelListener(UserMapper userMapper){
this.userMapper = userMapper;
}
@Override
public void invoke(User user, AnalysisContext analysisContext) {
//数据存储到datas,供批量处理,或后续自己业务逻辑处理。
datas.add(user);
//达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if(datas.size() >= BATCH_COUNT){
saveData();
// 存储完成清理datas
datas.clear();
}
}
private void saveData() {
for(User user : datas){
userMapper.addUser(user);
}
}
public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}
/**
* 所有数据解析完成了 都会来调用
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
saveData();//确保所有数据都能入库
}
```
}
控制层
```
@RestController
public class UserController {
@Autowired
private UserService userService;
/**
* 导出excel
* @param response
* @throws IOException
*/
@GetMapping("/user/excel")
public void excelExport(HttpServletResponse response) throws IOException {
userService.excelExport(response);
}
/**
* 导入excel
* @param file
* @return
* @throws IOException
*/
@PostMapping("/user/excel")
public String excelImport(@RequestParam("file") MultipartFile file) throws IOException {
userService.excelImport(file);
return "success";
}
}
```
导出

导入

#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)