Cómo escribir columnas de combinación easypoi
2
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
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
Cuarenta y dos
43
Cuarenta y cuatro
45
46
47
48
Cuarenta y nueve
50
51
Cincuenta y dos
53
54
55
Cincuenta- seis años
57
58
59
60
61
62
63
64
65
66
67
Sesenta y ocho
Sesenta y nueve
70
71
Setenta y dos
73
p >74
75
76
77
Setenta y ocho
79 p >
80
81
82
83
84
Ochenta y cinco años
86
87
88
Ochenta y nueve
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
Paquete org.jeecgframe.
.util;
Importar Java .util .ArrayList;
Importar Java .util .hashmap;
Importar Java .util .list;
Importar Java util. map;
Importar Java. utils set;
Importar org. Importar org.poi.ss.modelo de usuario.
Importar .org.poi.ss. .modelo de usuario;
importar org.
/**
*Clase de herramienta de combinación de celdas verticales
* @authorJueyue
* @date 2065438+265438 de junio +2005 11 :21:40am
*/
Clase final pública PoiMergeCellUtil {
PoiMergeCellUtil privada(){
} p>
/**
*Fusionar verticalmente celdas con el mismo contenido.
*
* @param hoja de trabajo
* @param columna clave mergeMap, columna relacionada con el valor, no nula.
* @param startRow fila inicial
*/
Celda de combinación vacía estática pública (hoja de hoja, mapa & ltInteger, int []》; mergeMap, int startRow ) {
Map & ltInteger, MergeEntity & gtmergeDataMap = new HashMap & ltInteger, MergeEntity & gt()
if (fusionar mapa. tamaño () == 0 ) {
Retorno;
}
Fila fila;
Establecer<intger>sets = fusionar map.keyset();
Cadena texto;
for(int I = startRow;i<= hoja.getlastrownum();i++) {
fila = hoja.getrow( I);
for (índice entero: conjunto) {
if (fila. obtener celda (índice) == nulo) {
fusionar mapa de datos obtener (índice). setEndRow(I);
} else {
texto = fila obtener celda(índice).
getStringCellValue();
if (string utils. isnotempty(texto)) {
hanlderMergeCells(índice, I, texto, mergeDataMap, hoja, fila. obtener celda(índice),
fusionar map.get(índice));
}else{
mergeCellOrContinue(índice, mergeDataMap, hoja);
}
}
}
}
if (fusionar mapa de datos. tamaño()> 0) {
for (índice entero: fusionar mapa de datos. conjunto de claves ()) {
hoja. addmergedregion (nueva dirección de rango de celdas (fusionar mapa de datos. get (índice). getStartRow (),
fusionar datos map.get(index).getEndRow(),index,index));
}
}
}
/**
*Procesar celdas fusionadas
*
* @param index
* @param rowNum
* @param text
* @param mergeDataMap
* @param worksheet
* @param cell
* @param delys
*/
Hanlder vacío estático privadoMergeCells(índice entero, int rowNum, literal de cadena,
Map<Integer,MergeEntity>Merge Mapeo de datos, hoja de trabajo,
Celda celda, int []delys ) {
if (combinar mapa de datos. contiene clave (índice)) {
if(checkIsEqualByCellContents(combinar mapa de datos. get(index) ), texto, celda, delys, número de fila)({
fusionar mapa de datos. get(index). setEndRow(rowNum);
} else {
sheet.addmergedregion(nueva dirección de rango de celdas(merge data map.get(index).getStartRow(),
fusionar datos map.get(index).getEndRow(),index,index));
fusionar datos map.put(index,createMergeEntity(text,rowNum,cell,delys));
}
} De lo contrario, {
fusionar mapa de datos . put(index, createMergeEntity(text, rowNum, cell, delys));
}
/**
* Determinar cuándo el rol está vacío.
*
* @param index
* @param mergeDataMap
* @param hoja de trabajo
* /
mergeCellOrContinue vacío estático privado (índice entero, mapa y ltInteger, MergeEntity y gtmergeDataMap,
hoja de trabajo)
if (mapa de datos combinados. contiene clave (índice) )
& amp&merge data map.get(index).getEndRow()! = merge datamap.get(index).getStartRow()){
sheet. dirección(fusionar mapa de datos. get(index).getStartRow(),
fusionar mapa de datos. get(index).getEndRow(), index, index));
fusionar datos map .remove(index);
}
}
Entidad de fusión estática privada createMergeEntity(Texto de cadena, int número de fila, celda de celda, int【】delys) {
entidad de fusión entidad de fusión = nueva entidad de fusión (texto, número de fila, número de fila);
Lista & lt string & gtlist = nueva ArrayList & lt string & gt(delys.length) ;
fusionar entidad.setrelylist(lista);
for(int I = 0; i<delys.lengthi++) {
list.add(getCellNotNullText(cell, delys[I], rowNum);
}
Devolver mergeEntity
}
Verificación booleana estática privadaIsEqualByCellContents(fusionar entidad fusionar entidad, String text,
Celda celda, int []delys, int rowNum) {
//Sin dependencias
if (delys == null | | delys . longitud == 0 ) {
Devuelve mergeEntity.getText(). igual(texto);
}
//Existe una relación de dependencia.
if (fusionar entidad. gettext(). es igual a (texto)) {
for(int I = 0; i<delys.lengthi++) {
if ( !getCellNotNullText(celda, delys[I], número de fila es igual a (
mergeEntity.getRelyList().
get(I))){
Devuelve falso
}
}
Devuelve verdadero
}
Devuelve falso
}
/**
* Obtenga el valor de la celda y asegúrese de que la celda debe tener un valor, o arriba Consulta.
*
* @param celda
* @param índice
* @param filaNum
* @ return
*/
Cadena estática privada getCellNotNullText(cell Cell, int index, int rowNum) {
String temp = cell.getRow(). getCell(índice). getStringCellValue();
while(string utils. isempty(temp)) {
temp = cell.getRow(). obtenerHoja(). getRow(-número de fila). getCell(índice). getStringCellValue();
}
Temperatura de retorno;
}
}