Excel导出下拉方案调整
This commit is contained in:
		| @@ -5,8 +5,19 @@ package com.jeelowcode.framework.excel.handler; | ||||
| import com.alibaba.excel.write.handler.SheetWriteHandler; | ||||
| import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; | ||||
| import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; | ||||
| import org.apache.poi.ss.usermodel.CellStyle; | ||||
| import org.apache.poi.ss.usermodel.*; | ||||
| import org.apache.poi.ss.util.CellRangeAddressList; | ||||
| import org.apache.poi.xssf.streaming.SXSSFSheet; | ||||
| import org.apache.poi.xssf.streaming.SXSSFWorkbook; | ||||
| import org.apache.poi.xssf.usermodel.XSSFDataValidation; | ||||
| import org.springframework.web.context.request.RequestContextHolder; | ||||
| import org.springframework.web.context.request.ServletRequestAttributes; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * | ||||
| @@ -15,6 +26,12 @@ public class CustomSheetWriteHandler implements SheetWriteHandler { | ||||
|  | ||||
|     private static final Integer COLUMN = 26; | ||||
|  | ||||
|     private Map<Integer, List<String>> dropDownData; | ||||
|  | ||||
|     public CustomSheetWriteHandler(Map<Integer, List<String>> dropDownData){ | ||||
|         this.dropDownData = dropDownData; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { | ||||
|         for (int i = 0; i < COLUMN; i++) { | ||||
| @@ -26,5 +43,25 @@ public class CustomSheetWriteHandler implements SheetWriteHandler { | ||||
|             // i为列,一整列设置为文本格式 | ||||
|             sxssfSheet.setDefaultColumnStyle(i, cellStyle); | ||||
|         } | ||||
|  | ||||
|         for (Map.Entry<Integer, List<String>> entry : dropDownData.entrySet()){ | ||||
|             if(entry.getValue().size()>=10){ | ||||
|                 String[] selectValues = entry.getValue().toArray(new String[entry.getValue().size()]); | ||||
|                 /*   解决办法从这里开始   */ | ||||
|                 //获取一个workbook | ||||
|                 Workbook workbook = writeWorkbookHolder.getWorkbook(); | ||||
|                 //定义sheet的名称 | ||||
|                 String hiddenName = "hidden"+entry.getKey(); | ||||
|                 //1.创建一个隐藏的sheet 名称为 hidden | ||||
|                 Sheet hidden = workbook.createSheet(hiddenName); | ||||
|                 //2.循环赋值(为了防止下拉框的行数与隐藏域的行数相对应,将隐藏域加到结束行之后) | ||||
|                 for (int i = 0, length = selectValues.length; i < length; i++) { | ||||
|                     // 3:表示你开始的行数  3表示 你开始的列数 | ||||
|                     hidden.createRow( i).createCell(0).setCellValue(selectValues[i]); | ||||
|                 } | ||||
|                 workbook.setSheetHidden(workbook.getSheetIndex(hidden), true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -81,6 +81,7 @@ public class RowFormatSetTextHandler implements CellWriteHandler { | ||||
|         cellData.setOriginCellStyle(cellStyle); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * 单元格样式 | ||||
|      */ | ||||
| @@ -110,7 +111,15 @@ public class RowFormatSetTextHandler implements CellWriteHandler { | ||||
|         String[] dropdownOptionsArray = dropdownOptionList.toArray(new String[0]); | ||||
|  | ||||
|         // 创建下拉列表的约束 | ||||
|         DataValidationConstraint constraint = helper.createExplicitListConstraint(dropdownOptionsArray); | ||||
|         DataValidationConstraint constraint;//= helper.createExplicitListConstraint(dropdownOptionsArray); | ||||
|         if (dropdownOptionsArray.length < 10) { | ||||
|             // 直接设置下拉选 | ||||
|             constraint = helper.createExplicitListConstraint(dropdownOptionsArray); | ||||
|         } else { | ||||
|             // 联动到另外一个 sheet | ||||
|             //这里如果识别到大于等于10行不管数据量有多少 | ||||
|             constraint = helper.createFormulaListConstraint("hidden"+firstCol+"!$A$1:$A$"+dropdownOptionList.size()); | ||||
|         } | ||||
|  | ||||
|         // 设置下拉列表应用的单元格区域,例如第2行到最后一行的第2列 | ||||
|         int firstRow = 1; // 通常Excel中第一行是1,这里假设第一行为表头 | ||||
|   | ||||
| @@ -93,7 +93,7 @@ public class ExcelExportUtils { | ||||
|             rowFormatSetTextHandler.setDropdownOptionsMap(dropdownOptionsMap); | ||||
|             EasyExcel.write(response.getOutputStream()) | ||||
|                     .registerWriteHandler(rowFormatSetTextHandler) | ||||
|                     .registerWriteHandler(new CustomSheetWriteHandler())// 初始化单元格为文本格式 | ||||
|                     .registerWriteHandler(new CustomSheetWriteHandler(dropdownOptionsMap))// 初始化单元格为文本格式 | ||||
|                     .registerWriteHandler(new CustomColumnWidthStyleStrategy())// 单元格宽度 | ||||
|                     .registerWriteHandler(CellStyleUtils.getCellStyleStrategy())// 单元格样式 | ||||
|                     .head(head) | ||||
| @@ -145,7 +145,7 @@ public class ExcelExportUtils { | ||||
|                 WriteSheet writeSheet = EasyExcel.writerSheet(sheetName) | ||||
|                         .head(head) | ||||
|                         .registerWriteHandler(rowFormatSetTextHandler) | ||||
|                         .registerWriteHandler(new CustomSheetWriteHandler()) | ||||
|                         .registerWriteHandler(new CustomSheetWriteHandler(dropdownOptionsMap)) | ||||
|                         .registerWriteHandler(new CustomColumnWidthStyleStrategy()) | ||||
|                         .registerWriteHandler(CellStyleUtils.getCellStyleStrategy()) | ||||
|                         .build(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user