From cdcd2d540de3e6ba4c2e9e7c6a879416da78c17b Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Thu, 16 Dec 2021 10:53:51 +0800
Subject: [PATCH] 保安员导出过多导致报错问题处理

---
 src/main/java/org/springblade/common/excel/RowWriteHandler.java |   53 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/springblade/common/excel/RowWriteHandler.java b/src/main/java/org/springblade/common/excel/RowWriteHandler.java
index ae04aa7..38a7282 100644
--- a/src/main/java/org/springblade/common/excel/RowWriteHandler.java
+++ b/src/main/java/org/springblade/common/excel/RowWriteHandler.java
@@ -6,6 +6,7 @@
 import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
 import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
 import org.apache.poi.ss.usermodel.*;
+import org.springblade.core.tool.utils.Func;
 
 import java.util.List;
 
@@ -14,31 +15,45 @@
  * @author zhongrj
  * @since 2021-9-26
  */
-public class RowWriteHandler implements CellWriteHandler {
+public class RowWriteHandler  implements CellWriteHandler {
 
+	public static CellStyle cellStyle;
 
-		@Override
-		public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+	/**
+	 * 设置全局变量,防止  cellStyle 创建过多报错 2021-12-16 zrj
+	 * The maximum number of cell styles was exceeded. You can define up to 64000styles in a .xlsx workbook
+	 * @param cellStyle
+	 */
+	public static void setCellStyle(CellStyle cellStyle) {
+		RowWriteHandler.cellStyle = cellStyle;
+	}
 
+	@Override
+	public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+
+	}
+
+	@Override
+	public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+		//设置单元格格式为文本
+		Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
+		//自定义样式不为空时,重复利用
+		if(Func.isEmpty(cellStyle)){
+			cellStyle = workbook.createCellStyle();
+			setCellStyle(cellStyle);
 		}
+		DataFormat dataFormat = workbook.createDataFormat();
+		cellStyle.setDataFormat(dataFormat.getFormat("@"));
+		cell.setCellStyle(cellStyle);
+	}
 
-		@Override
-		public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
-			//设置单元格格式为文本
-			Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
-			CellStyle cellStyle = workbook.createCellStyle();
-			DataFormat dataFormat = workbook.createDataFormat();
-			cellStyle.setDataFormat(dataFormat.getFormat("@"));
-			cell.setCellStyle(cellStyle);
-		}
+	//@Override 加上会报错
+	public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
 
-		//@Override 加上会报错
-		public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+	}
 
-		}
+	@Override
+	public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
 
-		@Override
-		public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
-
-		}
+	}
 }

--
Gitblit v1.9.3