|
|
@@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |