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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package orgjeecgframeworkpoiutil;
import javautilArrayList;
import javautilHashMap;
import javautilList;
import javautilMap;
import javautilSet;
import orgapachecommonslang3StringUtils;
import orgapachepoissusermodelCell;
import orgapachepoissusermodelRow;
import orgapachepoissusermodelSheet;
import orgapachepoissutilCellRangeAddress;
import orgjeecgframeworkpoiexcelentityparamsMergeEntity;
/
纵向合并单元格工具类
@author JueYue
@date 2015年6月21日 上午11:21:40
/
public final class PoiMergeCellUtil {
private PoiMergeCellUtil() {
}
/
纵向合并相同内容的单元格
@param sheet
@param mergeMap key--列,value--依赖的列,没有传空
@param startRow 开始行
/
public static void mergeCells(Sheet sheet, Map<Integer, int[]> mergeMap, int startRow) {
Map<Integer, MergeEntity> mergeDataMap = new HashMap<Integer, MergeEntity>();
if (mergeMapsize() == 0) {
return;
}
Row row;
Set<Integer> sets = mergeMapkeySet();
String text;
for (int i = startRow; i <= sheetgetLastRowNum(); i++) {
row = sheetgetRow(i);
for (Integer index : sets) {
if (rowgetCell(index) == null) {
mergeDataMapget(index)setEndRow(i);
} else {
text = rowgetCell(index)getStringCellValue();
if (StringUtilsisNotEmpty(text)) {
hanlderMergeCells(index, i, text, mergeDataMap, sheet, rowgetCell(index),
mergeMapget(index));
} else {
mergeCellOrContinue(index, mergeDataMap, sheet);
}
}
}
}
if (mergeDataMapsize() > 0) {
for (Integer index : mergeDataMapkeySet()) {
sheetaddMergedRegion(new CellRangeAddress(mergeDataMapget(index)getStartRow(),
mergeDataMapget(index)getEndRow(), index, index));
}
}
}
/
处理合并单元格
@param index
@param rowNum
@param text
@param mergeDataMap
@param sheet
@param cell
@param delys
/
private static void hanlderMergeCells(Integer index, int rowNum, String text,
Map<Integer, MergeEntity> mergeDataMap, Sheet sheet,
Cell cell, int[] delys) {
if (mergeDataMapcontainsKey(index)) {
if (checkIsEqualByCellContents(mergeDataMapget(index), text, cell, delys, rowNum)) {
mergeDataMapget(index)setEndRow(rowNum);
} else {
sheetaddMergedRegion(new CellRangeAddress(mergeDataMapget(index)getStartRow(),
mergeDataMapget(index)getEndRow(), index, index));
mergeDataMapput(index, createMergeEntity(text, rowNum, cell, delys));
}
} else {
mergeDataMapput(index, createMergeEntity(text, rowNum, cell, delys));
}
}
/
字符为空的情况下判断
@param index
@param mergeDataMap
@param sheet
/
private static void mergeCellOrContinue(Integer index, Map<Integer, MergeEntity> mergeDataMap,
Sheet sheet) {
if (mergeDataMapcontainsKey(index)
&& mergeDataMapget(index)getEndRow() != mergeDataMapget(index)getStartRow()) {
sheetaddMergedRegion(new CellRangeAddress(mergeDataMapget(index)getStartRow(),
mergeDataMapget(index)getEndRow(), index, index));
mergeDataMapremove(index);
}
}
private static MergeEntity createMergeEntity(String text, int rowNum, Cell cell, int[] delys) {
MergeEntity mergeEntity = new MergeEntity(text, rowNum, rowNum);
List<String> list = new ArrayList<String>(delyslength);
mergeEntitysetRelyList(list);
for (int i = 0; i < delyslength; i++) {
listadd(getCellNotNullText(cell, delys[i], rowNum));
}
return mergeEntity;
}
private static boolean checkIsEqualByCellContents(MergeEntity mergeEntity, String text,
Cell cell, int[] delys, int rowNum) {
// 没有依赖关系
if (delys == null || delyslength == 0) {
return mergeEntitygetText()equals(text);
}
// 存在依赖关系
if (mergeEntitygetText()equals(text)) {
for (int i = 0; i < delyslength; i++) {
if (!getCellNotNullText(cell, delys[i], rowNum)equals(
mergeEntitygetRelyList()get(i))) {
return false;
}
}
return true;
}
return false;
}
/
获取一个单元格的值,确保这个单元格必须有值,不然向上查询
@param cell
@param index
@param rowNum
@return
/
private static String getCellNotNullText(Cell cell, int index, int rowNum) {
String temp = cellgetRow()getCell(index)getStringCellValue();
while (StringUtilsisEmpty(temp)) {
temp = cellgetRow()getSheet()getRow(--rowNum)getCell(index)getStringCellValue();
}
return temp;
}
}
1、首先,自己写一个fileloader实现IFileLoader接口。
2、其次,只需要重写上面获取网络的这一块地方。
3、最后,赋值给POICacheManager。easypoi功能让一个没见接触过poi的人员可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言,完成以前复杂的写法。
最近要写excel导出,用了easypoi。有个需求需要根据字段的值判断,然后动态改变某个单元格的值,网上搜了搜相关资料试了试但是都不行。无奈只能打断点一步步跟。大家都知道wook下有sheet下有row下有cell。
按照这个思路,果然通过row可以获取到cell。cell有个方法setCellStyle()。这个无疑就是改变颜色了,点进去里面有个getFillForegroundColor()设置背景颜色。
经过多次重启测试,还是不行。继续看里面的方法,终于找到了,设置背景色之前要调用setFillForegroundColor()这个方法。注释上也写的很清楚。
果然颜色改变了,不过通过这种方式会改变整个行的颜色,需求是改变单元格的颜色,继续研究。果然通过wookcreateCellStyle(),会创建一个新的样式。最新测试可以了。
区别就是,通过cell获得cellStyle获取的是存在的样式,通过wook获取的是全新的样式。因为老的样式很可能包含了设置全部背景色,导致改变了整个行的颜色。就研究到这里吧。下班了
以上就是关于easypoi合并列怎么写全部的内容,包括:easypoi合并列怎么写、easypoiword导出图片发现无法读取的内容、essypoi导出改变单元格颜色等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)