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