如图:
导出的功能,就不在这里做过多的解释了。如果最后一行是合计,或者其他的内容。例如:
如上图所示。那么只要把此方法写在【合计】前方就好
// 合并【学员姓名】之前相同的列表
mergeContent(sheet);
// 合计
// ......
private void mergeContent(XSSFSheet sheet) {
boolean flag = false;
int index = 0;
int rownum = -1;
if (sheet.getLastRowNum() > 4) {
// 循环导出的最大行数
for(int i=2; i
Map map1 = new HashMap();
Map map2 = new HashMap();
String frontRow = "";
String afterRow = "";
double frontValue = 0.0;
double afterValue = 0.0;
// 循环前面七列
for(int j=0; j<7; ++j) {
XSSFCell cell2 = sheet.getRow(i).getCell(j);
XSSFCell cell3 = sheet.getRow(i+1).getCell(j);
// 两种不同的类型:string和double
if(j < 3) {
frontRow = cell2.getStringCellValue();
afterRow = cell3.getStringCellValue();
map1.put(j, frontRow);
map2.put(j, afterRow);
}else {
frontValue = cell2.getNumericCellValue();
afterValue = cell3.getNumericCellValue();
map1.put(j, frontValue);
map2.put(j, afterValue);
}
}
if(map1.equals(map2)) {
// 相同的时候, 标记改成true
flag = true;
index++;
if(rownum == -1) {
rownum = i;
}
continue;
}else {
// 遇到不同, 且只有2列, 那么就合并。多列在想想
if(flag) {
for(int k=0; k<7; ++k) {
sheet.addMergedRegion(new CellRangeAddress(rownum, rownum+index, k, k));
}
flag = false;
index = 0;
rownum = -1;
}
}
}
}
}
新手上路, 此方法如果导出的数据量过多, 那么就要费时间了。暂时还未想到如何优化。