Przeglądaj źródła

fix(导入/导出):
修改导出模板

18339543638 2 lat temu
rodzic
commit
a1f9243cd3

+ 1 - 4
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/handler/read/CustomerReadListener.java

@@ -9,6 +9,7 @@ import cn.tr.module.excel.core.exception.SheetException;
 import cn.tr.plugin.eventbus.config.EventBus;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.metadata.Head;
 import com.alibaba.excel.metadata.data.ReadCellData;
 import com.alibaba.excel.read.listener.ReadListener;
 import lombok.extern.slf4j.Slf4j;
@@ -41,10 +42,6 @@ public class CustomerReadListener<T> implements ReadListener<T> {
     @Override
     public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
         //对sheet的表头进行校验
-        headMap.forEach((k,value)->{
-            String cellValue = value.getStringValue();
-            value.setStringValue(StrUtil.trim(StrUtil.replace(cellValue,"*","")));
-        });
         validateExcelHead(fieldMap,headMap);
         headIndex = context.readRowHolder().getRowIndex();
     }

+ 10 - 5
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/handler/write/CustomCellWriteHandler.java

@@ -134,8 +134,7 @@ public class CustomCellWriteHandler implements CellWriteHandler {
     private void markNotNull(Field field,Cell cell){
         NotNull notNull = field.getAnnotation(NotNull.class);
         if(notNull!=null){
-            String cellValue = cell.getStringCellValue();
-            cell.setCellValue("*"+cellValue);
+            setComment(cell,cell.getColumnIndex(),"",false);
         }
     }
 
@@ -180,11 +179,17 @@ public class CustomCellWriteHandler implements CellWriteHandler {
         dataValidation.setSuppressDropDownArrow(true);
         sheet.addValidationData(dataValidation);
 
-        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
+        setComment(cell,columnIndex,promptMsg,allowEmpty);
+    }
+
+    private void setComment(Cell cell,int columnIndex,String msg,boolean allowEmpty){
+        Comment comment = cell.getCellComment();
+        Drawing<?> drawingPatriarch = cell.getSheet().createDrawingPatriarch();
         // 在第一行 第二列创建一个批注
-        Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, columnIndex, 0, columnIndex, 0));
+        comment =comment==null? drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, columnIndex, 0, columnIndex, 0)):comment;
         // 输入批注信息
-        comment.setString(new XSSFRichTextString(promptMsg));
+        msg=allowEmpty?msg:"---必输项---\n"+msg;
+        comment.setString(new XSSFRichTextString(msg));
         // 将批注添加到单元格对象中
         cell.setCellComment(comment);
     }

+ 48 - 0
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/handler/write/CustomHorizontalCellStyleStrategy.java

@@ -0,0 +1,48 @@
+package cn.tr.module.excel.core.handler.write;
+
+import cn.tr.module.excel.core.utils.StyleUtils;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.util.ListUtils;
+import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+
+import javax.validation.constraints.NotNull;
+import java.lang.reflect.Field;
+
+/**
+ * @ClassName : CustomHorizontalCellStyleStrategy
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年06月17日
+ */
+
+public class CustomHorizontalCellStyleStrategy extends HorizontalCellStyleStrategy {
+    private final WriteCellStyle notNullCellStyle;
+    public CustomHorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle, WriteCellStyle contentWriteCellStyle) {
+        super(headWriteCellStyle,contentWriteCellStyle);
+        notNullCellStyle=StyleUtils.getNotNullHeadStyle();
+    }
+    @Override
+    public void afterCellDispose(CellWriteHandlerContext context) {
+        if (context.getHead() == null) {
+            return;
+        }
+        if (context.getHead()) {
+            customSetHeadCellStyle(context);
+        } else {
+            setContentCellStyle(context);
+        }
+    }
+
+    private void customSetHeadCellStyle(CellWriteHandlerContext context) {
+        Field field = context.getExcelContentProperty().getField();
+        NotNull notNull = field.getAnnotation(NotNull.class);
+        if(notNull!=null){
+            WriteCellData<?> cellData = context.getFirstCellData();
+            cellData.setWriteCellStyle(notNullCellStyle);
+        }else {
+            setHeadCellStyle(context);
+        }
+    }
+}

+ 4 - 3
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/service/ExcelService.java

@@ -5,6 +5,7 @@ import cn.tr.module.api.sys.storage.SysStorageApi;
 import cn.tr.module.excel.core.dto.ExcelTemplateDescDTO;
 import cn.tr.module.excel.core.handler.read.CustomerReadListener;
 import cn.tr.module.excel.core.handler.write.CustomCellWriteHandler;
+import cn.tr.module.excel.core.handler.write.CustomHorizontalCellStyleStrategy;
 import cn.tr.module.excel.core.handler.write.CustomSheetWriteHandler;
 import cn.tr.module.excel.core.utils.ExcelTemplateDescUtil;
 import cn.tr.module.excel.core.utils.StyleUtils;
@@ -37,7 +38,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 @Component
 public class ExcelService {
     private static HorizontalCellStyleStrategy horizontalCellStyleStrategy =
-            new HorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle());
+            new CustomHorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle());
 
     @Autowired
     private ISysExportSheetService exportSheetService;
@@ -119,8 +120,8 @@ public class ExcelService {
     private <T> void createSheet(ExcelWriter excelWriter,int sheetNo,String sheetName,Class<T> aClass, Collection<T> data){
         WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetName)
                 .registerWriteHandler(horizontalCellStyleStrategy)
-                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(30))
-                .registerWriteHandler(new SimpleRowHeightStyleStrategy((short) 30, (short) 30))
+                .registerWriteHandler(new SimpleColumnWidthStyleStrategy(13))
+                .registerWriteHandler(new SimpleRowHeightStyleStrategy((short) 20, (short) 20))
                 .registerWriteHandler(new CustomCellWriteHandler())
                 .registerWriteHandler(new CustomSheetWriteHandler())
                 .head(aClass).build();

+ 21 - 13
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/utils/StyleUtils.java

@@ -3,6 +3,7 @@ package cn.tr.module.excel.core.utils;
 import com.alibaba.excel.write.metadata.style.WriteCellStyle;
 import com.alibaba.excel.write.metadata.style.WriteFont;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 
 /**
  * @ClassName : StyleUtils
@@ -12,22 +13,27 @@ import org.apache.poi.ss.usermodel.*;
  */
 
 public class StyleUtils {
+    public static WriteCellStyle getNotNullHeadStyle(){
+        WriteCellStyle headStyle = getHeadStyle();
+        WriteFont writeFont = headStyle.getWriteFont();
+        writeFont.setColor(IndexedColors.RED.getIndex());
+        return headStyle;
+    }
+
     public static WriteCellStyle getHeadStyle(){
         // 头的策略
         WriteCellStyle headWriteCellStyle = new WriteCellStyle();
         // 背景颜色
-        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
         headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
-        headWriteCellStyle.setLocked(true);
-
         // 字体
         WriteFont headWriteFont = new WriteFont();
         //设置字体名字
-        headWriteFont.setFontName("体");
-        //斜体
-        headWriteFont.setItalic(true);
+        headWriteFont.setFontName("体");
+//        //斜体
+//        headWriteFont.setItalic(true);
         //设置字体大小
-        headWriteFont.setFontHeightInPoints((short)12);
+        headWriteFont.setFontHeightInPoints((short)9);
         //字体加粗
         headWriteFont.setBold(true);
 
@@ -56,7 +62,6 @@ public class StyleUtils {
         //设置自动换行
         headWriteCellStyle.setWrapped(true);
 
-
         //设置水平对齐的样式为居中对齐
         headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
         //设置垂直对齐的样式为居中对齐
@@ -69,7 +74,6 @@ public class StyleUtils {
         return headWriteCellStyle;
     }
 
-
     public static WriteCellStyle getContentStyle(){
         // 内容的策略
         WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
@@ -80,10 +84,7 @@ public class StyleUtils {
         contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
 
         // 设置字体
-        WriteFont contentWriteFont = new WriteFont();
-        contentWriteFont.setFontHeightInPoints((short) 9);//设置字体大小
-        contentWriteFont.setFontName("宋体"); //设置字体名字
-        contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;
+        contentWriteCellStyle.setWriteFont(getDefaultFont());;
 
         //设置样式;
         contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
@@ -104,4 +105,11 @@ public class StyleUtils {
         return contentWriteCellStyle;
     }
 
+    private static WriteFont getDefaultFont(){
+        // 设置字体
+        WriteFont contentWriteFont = new WriteFont();
+        contentWriteFont.setFontHeightInPoints((short) 9);//设置字体大小
+        contentWriteFont.setFontName("宋体"); //设置字体名字
+        return contentWriteFont;
+    }
 }