0%

Springboot集成POI


本文比较简单。。。希望想真正使用的同学。。去看别人整理的吧。。。我怕这次整理比较乱。。影响大家阅读


什么是POI

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。


添加依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>RELEASE</version>
</dependency>

代码实现

因为为了方便所以本代码。。。就是基本上没有修改的项目代码。。。所以又看不懂的话。。多担待 -_-!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public String exportExcel(List<Object> data, Class<?> clazz) {

OutputStream outputStream = null;
File[] roots = File.listRoots();
String path = roots[0].getPath();
try {
Field[] fields = data.getClass().getDeclaredFields();
//实例化HSSFWorkbook
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个Excel表单,参数为sheet的名字
HSSFSheet sheet = workbook.createSheet("sheet");
//设置表头
setTitle(workbook, sheet, clazz);
//设置单元格并赋值
setData(sheet, data, clazz);
} catch (Exception e) {
logger.info("ExcelUtil.exportExcel : 导出解析失败!");
e.printStackTrace();
}
}

private void setTitle(HSSFWorkbook workbook, HSSFSheet sheet, Class<?> clazz) {
ClassField classField = new ClassField();

List<String> list = classField.map.get(clazz);
logger.info("ExcelUtil.setTitle : 这是map信息:" + classField.map);
logger.info("ExcelUtil.setTitle : 这是头信息:" + list);
try {
HSSFRow row = sheet.createRow(0);
//设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
for (int i = 0; i < list.size(); i++) {
sheet.setColumnWidth(i, 15 * 256);
}
//设置为居中加粗,格式化时间格式
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
style.setFont(font);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
//创建表头名称
HSSFCell cell;
for (int j = 0; j < list.size(); j++) {
cell = row.createCell(j);
cell.setCellValue(list.get(j));
cell.setCellStyle(style);
}
} catch (Exception e) {
logger.info("ExcelUtil.setTitle : 导出时设置表头失败!");
e.printStackTrace();
}
}

private static void setData(HSSFSheet sheet, List<Object> data, Class<?> clazz) {
try {
int rowNum = 1;
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < data.size(); i++) {
HSSFRow row = sheet.createRow(rowNum);
for (int j = 0; j < fields.length; j++) {
// 对于每个属性,获取属性名
String varName = fields[j].getName();
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[j].isAccessible();
// 修改访问控制权限
fields[j].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o;
try {
o = fields[j].get(data.get(i));
row.createCell(j).setCellValue(String.valueOf(o));
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
}
rowNum++;
}
logger.info("ExcelUtil.setTitle : 表格赋值成功!");
} catch (Exception e) {
logger.info("ExcelUtil.setTitle : 表格赋值失败!");
e.printStackTrace();
}
}

上面的代码中ClassField.java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class ClassField {

public Map<Class<?>, List> map = new HashMap<>();

public ClassField() {
List<String> gradingLoglist = new ArrayList<>();
gradingLoglist.add("ID");
gradingLoglist.add("问卷ID");
gradingLoglist.add("问卷时间");
gradingLoglist.add("问卷简介");
gradingLoglist.add("被评人ID");
gradingLoglist.add("被评人姓名");
gradingLoglist.add("分数");
map.put(GradingLogPo.class, gradingLoglist);
List<String> submitInfoList = new ArrayList<>();
submitInfoList.add("ID");
submitInfoList.add("评分人ID");
submitInfoList.add("评分人姓名");
submitInfoList.add("被评人ID");
submitInfoList.add("被评人姓名");
submitInfoList.add("问卷ID");
submitInfoList.add("问卷简介");
submitInfoList.add("评分规则ID");
submitInfoList.add("分数");
submitInfoList.add("备注");
map.put(SubmitInformationPo.class, submitInfoList);
}
}