From bc15400afe30d4f277c6f55b49ef8838298c8ab4 Mon Sep 17 00:00:00 2001 From: jueyue Date: Mon, 17 Jun 2019 11:40:48 +0800 Subject: [PATCH] =?UTF-8?q?07=E7=89=88=E6=9C=ACExcel,=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9B=A0=E4=B8=BAshift=E7=9A=84=E6=B5=85=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E9=97=AE=E9=A2=98,=E5=AF=BC=E8=87=B4=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=94=99=E8=AF=AF2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../easypoi/util/PoiExcelTempUtil.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiExcelTempUtil.java diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiExcelTempUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiExcelTempUtil.java new file mode 100644 index 0000000..53869e6 --- /dev/null +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiExcelTempUtil.java @@ -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 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 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; + } + + +}