# Excel导出导入工具POI-Excel
**Repository Path**: ydjjava/poi-excel
## Basic Information
- **Project Name**: Excel导出导入工具POI-Excel
- **Description**: (记得star一下)屏蔽POI细节,学习成本低,简单快速上手,且满足绝大多数业务场景。导出支持复杂表头和尾部设计,以及单元格样式自定义支持。纯编码实现去除烦人的各种POJO
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://gitee.com/stupid1t/poi-excel
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 179
- **Created**: 2020-10-12
- **Last Updated**: 2022-06-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# maven使用方式
```java
com.github.stupdit1t
poi-excel
1.7
```
## 一. 项目优势
- 简单快速上手,且满足绝大多数业务场景
- 屏蔽POI细节,学习成本低。
- 未使用注解方式实现,纯编码代码块,去除烦人的各种POJO
- 功能强大,导入支持严格的单元格校验,导出支持公式,复杂表头和尾部设计,以及单元格样式自定义支持
- 支持读取复杂Excel模板,替换变量输出Excel,变量用${}替代
## 二. 更新记录
> 有需求才有进步,这个轮子本身就是从0开始因为需求慢慢叠加起来的。有新需求提出来,我觉得合适会更新.
### v1.7
1. 导入抽象规则类修改
2. 添加读取Excel的方法readSheet,方便将Excel直接读取为Map
### v1.6
1. 新增单元格支持函数导出, 使用方式如设置字段内容为 =SUM(A1:12), 具体函数参考Excel写法
2. 新增读取Excel模板, 替换模板里的变量并输出Excel, 变量标记为${}
3. POI版本升级至4.1.2
### v1.5
1. 新增单元格整体样式自定义功能, 可设置全局表头/标题/单元格样式
## 三. 导出
##### 1. 支持傻瓜式定义动态表头/表尾
##### 2. 支持单元格公式
##### 3. 支持导出回调逻辑,处理业务数据化再导出
##### 4. 支持全局或者局部单元格的样式自定义
##### 5. xls和xlsx都支持导出
* 导出示例图

* 代码示例(1.2.3.4.5功能 )
```java
// 0.准备数据
List listData = new ArrayList<>();
// 1.表头设置,可以对应excel设计表头,一看就懂
Map headerRules = new HashMap<>();
headerRules.put("1,1,A,K", "项目资源统计");
headerRules.put("2,3,A,A", "序号");
headerRules.put("2,2,B,E", "基本信息");
headerRules.put("3,3,B,B", "项目名称");
headerRules.put("3,3,C,C", "所属区域");
headerRules.put("3,3,D,D", "省份");
headerRules.put("3,3,E,E", "市");
headerRules.put("2,3,F,F", "项目所属人");
headerRules.put("2,3,G,G", "市项目领导人");
headerRules.put("2,2,H,I", "分值");
headerRules.put("3,3,H,H", "得分");
headerRules.put("3,3,I,I", "平均分");
headerRules.put("2,3,J,J", "创建时间");
headerRules.put("2,3,K,K", "项目图片");
// 2.尾部设置,一般可以用来设计合计栏
HashMap footerRules = new HashMap<>();
footerRules.put("1,2,A,C", "合计:");
footerRules.put("1,2,D,K", "=SUM(H4:H13)");
// 3.导出hearder对应的属性设置
Column[] column = {
Column.field("projectName"),
// 4.1设置此列宽度为10
Column.field("areaName").width(10),
// 4.2设置此列下拉框数据
Column.field("province").width(5).dorpDown(new String[]{"陕西省", "山西省", "辽宁省"}),
// 4.3设置此列水平居右
Column.field("city").align(HorizontalAlignment.RIGHT),
// 4.4 设置此列垂直居上
Column.field("people").valign(VerticalAlignment.TOP),
// 4.5 设置此列单元格 自定义校验 只能输入文本
Column.field("leader").width(4).verifyCustom("VALUE(F3:F500)", "我是提示"),
// 4.6设置此列单元格 整数 数据校验 ,同时设置背景色为棕色
Column.field("scount").verifyIntNum("10~20").backColor(IndexedColors.BROWN),
// 4.7设置此列单元格 浮点数 数据校验, 同时设置字体颜色红色
Column.field("avg").verifyFloatNum("10.0~20.0").color(IndexedColors.RED),
// 4.8设置此列单元格 日期 数据校验 ,同时宽度为20、限制用户表格输入、水平居中、垂直居中、背景色、字体颜色
Column.field("createTime").width(20).verifyDate("2000-01-03 12:35~3000-05-06 23:23")
.align(HorizontalAlignment.LEFT).valign(VerticalAlignment.CENTER)
.backColor(IndexedColors.YELLOW).color(IndexedColors.GOLD),
// 4.9项目图片, 只有该列是byte[], 自动变为图片
Column.field("img")
};
// 4.导出规则定义
ExportRules exportRules = ExportRules.complexRule(column, headerRules)
// 自动生成序号, 需要定义序号列
.autoNum(true)
// 尾部合计行定义
.footerRules(footerRules)
// 全局表格样式定义, 默认就是这个设置, 可自定义, 如果自定义则以自定义为主
.globalStyle(DefaultCellStyleEnum.TITLE,DefaultCellStyleEnum.HEADER,DefaultCellStyleEnum.CELL)
// 表格的大标题, ExportRules.simpleRule()简要表头模式才有用, ExportRules.complexRule()复杂规则不在这里定义,如果定义会报错
.title("中国好项目")
// 自定义sheet名字
.sheetName("我的sheet");
// 5.执行导出到工作簿, 依次叔 $集合数据, $导出规则, $是否导出xlsx格式(导出文件名对应好), $导出回调处理
Workbook bean = ExcelUtils.createWorkbook(listData, exportRules, true, new ExportSheetCallback() {
@Override
// 此处可处理后写入到Excel, 依次是 $字段名 $字段值 $行记录值 $cell单元格样式
public Object callback(String fieldName, Object value, ProjectEvaluate projectEvaluate, Column customStyle) {
return value;
}
});
// 6.写出文件, 如果是web环境则写到servlet里
bean.write(new FileOutputStream("filePath"));
```
##### 6. 支持Map/复杂对象/模板/图片导出
* Map导出
```java
// 1.导出的hearder设置
List