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.handler.SheetWriteHandler;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
|
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.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 static final Integer COLUMN = 26;
|
||||||
|
|
||||||
|
private Map<Integer, List<String>> dropDownData;
|
||||||
|
|
||||||
|
public CustomSheetWriteHandler(Map<Integer, List<String>> dropDownData){
|
||||||
|
this.dropDownData = dropDownData;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
|
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
|
||||||
for (int i = 0; i < COLUMN; i++) {
|
for (int i = 0; i < COLUMN; i++) {
|
||||||
@@ -26,5 +43,25 @@ public class CustomSheetWriteHandler implements SheetWriteHandler {
|
|||||||
// i为列,一整列设置为文本格式
|
// i为列,一整列设置为文本格式
|
||||||
sxssfSheet.setDefaultColumnStyle(i, cellStyle);
|
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);
|
cellData.setOriginCellStyle(cellStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单元格样式
|
* 单元格样式
|
||||||
*/
|
*/
|
||||||
@@ -110,7 +111,15 @@ public class RowFormatSetTextHandler implements CellWriteHandler {
|
|||||||
String[] dropdownOptionsArray = dropdownOptionList.toArray(new String[0]);
|
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列
|
// 设置下拉列表应用的单元格区域,例如第2行到最后一行的第2列
|
||||||
int firstRow = 1; // 通常Excel中第一行是1,这里假设第一行为表头
|
int firstRow = 1; // 通常Excel中第一行是1,这里假设第一行为表头
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class ExcelExportUtils {
|
|||||||
rowFormatSetTextHandler.setDropdownOptionsMap(dropdownOptionsMap);
|
rowFormatSetTextHandler.setDropdownOptionsMap(dropdownOptionsMap);
|
||||||
EasyExcel.write(response.getOutputStream())
|
EasyExcel.write(response.getOutputStream())
|
||||||
.registerWriteHandler(rowFormatSetTextHandler)
|
.registerWriteHandler(rowFormatSetTextHandler)
|
||||||
.registerWriteHandler(new CustomSheetWriteHandler())// 初始化单元格为文本格式
|
.registerWriteHandler(new CustomSheetWriteHandler(dropdownOptionsMap))// 初始化单元格为文本格式
|
||||||
.registerWriteHandler(new CustomColumnWidthStyleStrategy())// 单元格宽度
|
.registerWriteHandler(new CustomColumnWidthStyleStrategy())// 单元格宽度
|
||||||
.registerWriteHandler(CellStyleUtils.getCellStyleStrategy())// 单元格样式
|
.registerWriteHandler(CellStyleUtils.getCellStyleStrategy())// 单元格样式
|
||||||
.head(head)
|
.head(head)
|
||||||
@@ -145,7 +145,7 @@ public class ExcelExportUtils {
|
|||||||
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName)
|
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName)
|
||||||
.head(head)
|
.head(head)
|
||||||
.registerWriteHandler(rowFormatSetTextHandler)
|
.registerWriteHandler(rowFormatSetTextHandler)
|
||||||
.registerWriteHandler(new CustomSheetWriteHandler())
|
.registerWriteHandler(new CustomSheetWriteHandler(dropdownOptionsMap))
|
||||||
.registerWriteHandler(new CustomColumnWidthStyleStrategy())
|
.registerWriteHandler(new CustomColumnWidthStyleStrategy())
|
||||||
.registerWriteHandler(CellStyleUtils.getCellStyleStrategy())
|
.registerWriteHandler(CellStyleUtils.getCellStyleStrategy())
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
Reference in New Issue
Block a user