# poi-plus
**Repository Path**: izifeng/poi-plus
## Basic Information
- **Project Name**: poi-plus
- **Description**: 轻量级Excel导入、导出工具,支持自定义导出模板
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2019-01-23
- **Last Updated**: 2025-07-31
## Categories & Tags
**Categories**: excel-utils
**Tags**: None
## README
# poi-plus
#### 介绍
一款轻量级Excel导入、导出工具,支持自定义模板导出。支持spring mvc和spring boot运用。
注:还支持导出CSV哦~~~
#### poi-plus能做什么?
1. 支持自定义Excel模板导入、导出。有了poi-plus再也不用担心复杂表头的导出需求了。
2. 支持xls、xlsx、cvs文件导出
3. 支持海量数据导入
4. 支持支持多Sheet多出
5. 支持Excel模板导出
#### 安装教程
1、编译项目到本地Maven仓库
`mvn clean install -DskipTests`
2、在项目pom.xml中加入poi-plus
```
xin.yangda
poi-plus
1.0
```
#### 使用说明
1、 单Sheet导入、导出Demo(更多案例,请查看单元测试)
```java
package xin.yangda.poiplus.test.controller;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import xin.yangda.poiplus.constants.PoiPlusFileExtend;
import xin.yangda.poiplus.designer.SimpleXlsDesigner;
import xin.yangda.poiplus.designer.csv.CsvDesigner;
import xin.yangda.poiplus.handler.ExcelReadHandler;
import xin.yangda.poiplus.loader.SimpleXlsxLoader;
import xin.yangda.poiplus.pojo.ExcelData;
import xin.yangda.poiplus.pojo.ExcelErrorField;
import xin.yangda.poiplus.test.entity.UserEntity;
import xin.yangda.poiplus.test.service.UserService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
/**
* @author yangdaxin
* @version 创建时间 2019/1/21 16:32
*/
@RestController
@RequestMapping(value = "/user", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class UserController {
private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
private static final String XLS_EXCEL_TEMP_PATH = "templates/user.xls";
private static final String XLSX_EXCEL_TEMP_PATH = "templates/user.xlsx";
@Autowired
private UserService userService;
/**
* 下载excel(有模板)
*
* @param request
* @param response
*/
@GetMapping(value = "/excelTemp")
public void exportExcelTemp(HttpServletRequest request, HttpServletResponse response) {
// 打开模板
// InputStream inputStream = getClass().getClassLoader().getResourceAsStream(XLS_EXCEL_TEMP_PATH);
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(XLSX_EXCEL_TEMP_PATH);
try (SimpleXlsDesigner simpleXlsDesigner = new SimpleXlsDesigner(inputStream)) {
// 填充数据源
Map map = Maps.newConcurrentMap();
map.put("createUser", "yangdaxin");
map.put("createTime", "2019-01-18 18:05:00");
ExcelData excelData = new ExcelData<>(UserEntity.class, map, userService.queryList());
simpleXlsDesigner.setData(excelData);
// 数据加工
simpleXlsDesigner.process();
// 保存Excel
simpleXlsDesigner.download(request, response, PoiPlusFileExtend.XLS);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载excel(无模板)
*
* @param request
* @param response
*/
@GetMapping(value = "/excel")
public void exportExcel(HttpServletRequest request, HttpServletResponse response) {
try (SimpleXlsDesigner simpleXlsDesigner = new SimpleXlsDesigner()) {
// 填充数据源
ExcelData excelData = new ExcelData<>(UserEntity.class, userService.queryList());
simpleXlsDesigner.setData(excelData);
// 数据加工
simpleXlsDesigner.process();
// 保存Excel
simpleXlsDesigner.download(request, response, PoiPlusFileExtend.XLS);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载模板
*
* @param request
* @param response
*/
@GetMapping(value = "/template")
public void exportTemplate(HttpServletRequest request, HttpServletResponse response) {
try (SimpleXlsDesigner simpleXlsDesigner = new SimpleXlsDesigner()) {
// 填充数据源
ExcelData excelData = new ExcelData<>(UserEntity.class);
simpleXlsDesigner.setData(excelData);
// 数据加工
simpleXlsDesigner.process(true);
// 保存Excel
simpleXlsDesigner.download(request, response, PoiPlusFileExtend.XLS);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载CSV
*
* @param request
* @param response
*/
@GetMapping(value = "/csv")
public void exportCsv(HttpServletRequest request, HttpServletResponse response) {
ExcelData excelData = new ExcelData<>(UserEntity.class, userService.queryList());
CsvDesigner.build(excelData).download(request, response);
}
/**
* Excel导入
*
* @param file
* @return
* @throws IOException
*/
@PostMapping("/import")
public ResponseEntity> importExcel(@RequestParam("excelFile") MultipartFile file) throws IOException {
// 执行文件导入.
long beginTimeMillis = System.currentTimeMillis();
final List userList = Lists.newArrayList();
final List