| @@ -0,0 +1,92 @@ | |||
| package cn.afterturn.easypoi.util; | |||
| import org.apache.poi.ss.usermodel.*; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| /** | |||
| * poi 4.0 07版本在 shift操作下有bug,不移动了单元格以及单元格样式,没有移动cell | |||
| * cell还是复用的原理的cell,导致wb输出的时候没有输出值 | |||
| * 等待修复的时候删除这个问题 | |||
| * | |||
| * @author by jueyue on 19-6-17. | |||
| */ | |||
| public class PoiExcelTempUtil { | |||
| /** | |||
| * 把这N行的数据,cell重新设置下,修复因为shift的浅复制问题,导致文本不显示的错误 | |||
| * | |||
| * @param sheet | |||
| * @param startRow | |||
| * @param endRow | |||
| */ | |||
| public static void reset(Sheet sheet, int startRow, int endRow) { | |||
| for (int i = startRow; i <= endRow; i++) { | |||
| Row row = sheet.getRow(i); | |||
| int cellNum = row.getLastCellNum(); | |||
| for (int j = 0; j < cellNum; j++) { | |||
| Map<String, Object> map = copyCell(row.getCell(j)); | |||
| row.removeCell(row.getCell(j)); | |||
| Cell cell = row.createCell(j); | |||
| cell.setCellStyle((CellStyle) map.get("cellStyle")); | |||
| if ((boolean) map.get("isDate")) { | |||
| cell.setCellValue((Date) map.get("value")); | |||
| } else { | |||
| CellType cellType = (CellType) map.get("cellType"); | |||
| switch (cellType) { | |||
| case NUMERIC: | |||
| cell.setCellValue((double) map.get("value")); | |||
| break; | |||
| case STRING: | |||
| cell.setCellValue((String) map.get("value")); | |||
| case FORMULA: | |||
| break; | |||
| case BLANK: | |||
| break; | |||
| case BOOLEAN: | |||
| cell.setCellValue((boolean) map.get("value")); | |||
| case ERROR: | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| private static Map copyCell(Cell cell) { | |||
| Map<String, Object> map = new HashMap<>(); | |||
| map.put("cellType", cell.getCellType()); | |||
| map.put("isDate", CellType.NUMERIC == cell.getCellType() && DateUtil.isCellDateFormatted(cell)); | |||
| map.put("value", getValue(cell)); | |||
| map.put("cellStyle", cell.getCellStyle()); | |||
| return map; | |||
| } | |||
| private static Object getValue(Cell cell) { | |||
| if (CellType.NUMERIC == cell.getCellType() && DateUtil.isCellDateFormatted(cell)) { | |||
| return cell.getDateCellValue(); | |||
| } | |||
| switch (cell.getCellType()) { | |||
| case _NONE: | |||
| return null; | |||
| case NUMERIC: | |||
| return cell.getNumericCellValue(); | |||
| case STRING: | |||
| return cell.getStringCellValue(); | |||
| case FORMULA: | |||
| return cell.getCellFormula(); | |||
| case BLANK: | |||
| break; | |||
| case BOOLEAN: | |||
| return cell.getBooleanCellValue(); | |||
| case ERROR: | |||
| break; | |||
| } | |||
| return null; | |||
| } | |||
| } | |||