Просмотр исходного кода

修复Excel自定义格式样式污染问题

RuoYi 5 месяцев назад
Родитель
Сommit
1f2f11f80f
1 измененных файлов с 16 добавлено и 1 удалено
  1. 16 1
      ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java

+ 16 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java

@@ -1153,7 +1153,7 @@ public class ExcelUtil<T>
                 String dictType = attr.dictType();
                 String dictType = attr.dictType();
                 if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
                 if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
                 {
                 {
-                    cell.getCellStyle().setDataFormat(this.wb.getCreationHelper().createDataFormat().getFormat(dateFormat));
+                    cell.setCellStyle(createCellStyle(cell.getCellStyle(), dateFormat));
                     cell.setCellValue(parseDateToStr(dateFormat, value));
                     cell.setCellValue(parseDateToStr(dateFormat, value));
                 }
                 }
                 else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
                 else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
@@ -1193,6 +1193,21 @@ public class ExcelUtil<T>
     }
     }
 
 
     /**
     /**
+     * 使用自定义格式,同时避免样式污染
+     * 
+     * @param cellStyle 从此样式复制
+     * @param format 格式匹配的字符串
+     * @return 格式化后CellStyle对象
+     */
+    private CellStyle createCellStyle(CellStyle cellStyle, String format)
+    {
+        CellStyle style = wb.createCellStyle();
+        style.cloneStyleFrom(cellStyle);
+        style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat(format));
+        return style;
+    }
+
+    /**
      * 设置 POI XSSFSheet 单元格提示或选择框
      * 设置 POI XSSFSheet 单元格提示或选择框
      * 
      * 
      * @param sheet 表单
      * @param sheet 表单