1.excel通用导出模板,解决时间格式不是文本问题
2.解决部分部门查询问题
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.njcn.web.utils.HttpServletUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
@@ -112,15 +113,26 @@ public class ExcelUtil {
|
||||
setTopLevel(workbook, pullDowns);
|
||||
if (CollUtil.isNotEmpty(pullDowns)) {
|
||||
int num = 1;
|
||||
CellStyle cellStyle = workbook.createCellStyle();
|
||||
DataFormat format = workbook.createDataFormat();
|
||||
cellStyle.setDataFormat(format.getFormat("@"));
|
||||
for (PullDown pullDown : pullDowns) {
|
||||
String colName = numberToExcelColumn(num);
|
||||
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
|
||||
if(sum>255){
|
||||
ExcelUtil.selectListMaxLength(workbook, pullDown.getFirstCol(), pullDown.getLastCol(),pullDown.getStrings().size(),colName);
|
||||
num++;
|
||||
}else{
|
||||
ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{}));
|
||||
if (pullDown.getIsText()) {
|
||||
ExcelUtil.selectListText(workbook, pullDown.getFirstCol(),cellStyle);
|
||||
} else {
|
||||
String colName = numberToExcelColumn(num);
|
||||
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
|
||||
if (sum == 0) {
|
||||
continue;
|
||||
}
|
||||
if (sum > 255) {
|
||||
ExcelUtil.selectListMaxLength(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().size(), colName);
|
||||
num++;
|
||||
} else {
|
||||
ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{}));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Sheet sheetAt = workbook.getSheetAt(0);
|
||||
@@ -240,16 +252,17 @@ public class ExcelUtil {
|
||||
// 对sheet页生效
|
||||
sheet.addValidationData(validation);
|
||||
}
|
||||
/**
|
||||
* @Description: 当下拉框超过最大字符255,设置隐藏表单来进行展示
|
||||
* @param workbook
|
||||
* @param firstCol
|
||||
* @param lastCol
|
||||
* @param colName 列A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
|
||||
* @Author: wr
|
||||
* @Date: 2024/8/13 15:07
|
||||
*/
|
||||
public static void selectListMaxLength(Workbook workbook,int firstCol, int lastCol,int row ,String colName) {
|
||||
|
||||
/**
|
||||
* @param workbook
|
||||
* @param firstCol
|
||||
* @param lastCol
|
||||
* @param colName 列A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
|
||||
* @Description: 当下拉框超过最大字符255,设置隐藏表单来进行展示
|
||||
* @Author: wr
|
||||
* @Date: 2024/8/13 15:07
|
||||
*/
|
||||
public static void selectListMaxLength(Workbook workbook, int firstCol, int lastCol, int row, String colName) {
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
// 生成下拉列表
|
||||
// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
|
||||
@@ -261,6 +274,24 @@ public class ExcelUtil {
|
||||
DataValidation validation = help.createValidation(hiddentConstraint, regions);
|
||||
sheet.addValidationData(validation);
|
||||
}
|
||||
/**
|
||||
* @Description:
|
||||
* @param workbook
|
||||
* @param firstCol
|
||||
* @Author: wr
|
||||
* @Date: 2024/8/20 10:44
|
||||
*/
|
||||
public static void selectListText(Workbook workbook, int firstCol,CellStyle cellStyle) {
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
for (int i = 2; i < 65535; i++) {
|
||||
Row row = sheet.getRow(i);
|
||||
if(ObjectUtil.isNull(row)){
|
||||
row = sheet.createRow(i);
|
||||
}
|
||||
Cell cell = row.createCell(firstCol);
|
||||
cell.setCellStyle(cellStyle);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定名称、数据下载报表(带指定标题将*显示比必填信息),带有下拉信息
|
||||
@@ -364,38 +395,44 @@ public class ExcelUtil {
|
||||
|
||||
/**
|
||||
* 设置隐藏表单来进行下拉框
|
||||
*
|
||||
* @param workbook
|
||||
* @param pullDowns
|
||||
*/
|
||||
private static void setTopLevel(Workbook workbook, List<PullDown> pullDowns) {
|
||||
int num = 0;
|
||||
for (PullDown pullDown : pullDowns) {
|
||||
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
|
||||
if (sum > 255) {
|
||||
// 创建隐藏sheet
|
||||
String hiddenSheetName = "hiddenSheetA";
|
||||
if (num == 0) {
|
||||
workbook.createSheet(hiddenSheetName);
|
||||
if (!pullDown.getIsText()) {
|
||||
int sum = pullDown.getStrings().stream().mapToInt(String::length).sum();
|
||||
if (sum == 0) {
|
||||
continue;
|
||||
}
|
||||
//false展示隐藏sheet ,true不展示隐藏sheet
|
||||
workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true);
|
||||
Sheet sheet = workbook.getSheet(hiddenSheetName);
|
||||
if(num == 0){
|
||||
//sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行
|
||||
sheet.createRow(0);
|
||||
}
|
||||
Row row; //创建数据行
|
||||
sheet.setColumnWidth(num, 4000); //设置每列的列宽
|
||||
for (int j = 0; j < pullDown.getStrings().size(); j++) {
|
||||
if (sheet.getLastRowNum() < j) {
|
||||
row = sheet.createRow(j); //创建数据行
|
||||
} else {
|
||||
row = sheet.getRow(j);
|
||||
if (sum > 255) {
|
||||
// 创建隐藏sheet
|
||||
String hiddenSheetName = "hiddenSheetA";
|
||||
if (num == 0) {
|
||||
workbook.createSheet(hiddenSheetName);
|
||||
}
|
||||
//设置对应单元格的值
|
||||
row.createCell(num).setCellValue(pullDown.getStrings().get(j));
|
||||
//false展示隐藏sheet ,true不展示隐藏sheet
|
||||
workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true);
|
||||
Sheet sheet = workbook.getSheet(hiddenSheetName);
|
||||
if (num == 0) {
|
||||
//sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行
|
||||
sheet.createRow(0);
|
||||
}
|
||||
Row row; //创建数据行
|
||||
sheet.setColumnWidth(num, 4000); //设置每列的列宽
|
||||
for (int j = 0; j < pullDown.getStrings().size(); j++) {
|
||||
if (sheet.getLastRowNum() < j) {
|
||||
row = sheet.createRow(j); //创建数据行
|
||||
} else {
|
||||
row = sheet.getRow(j);
|
||||
}
|
||||
//设置对应单元格的值
|
||||
row.createCell(num).setCellValue(pullDown.getStrings().get(j));
|
||||
}
|
||||
num++;
|
||||
}
|
||||
num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,13 @@ public class PullDown {
|
||||
|
||||
//起始列
|
||||
private Integer firstCol;
|
||||
|
||||
//结束列
|
||||
private Integer lastCol;
|
||||
|
||||
//是否设置单元格(文本)
|
||||
private Boolean isText = false;
|
||||
|
||||
//属性值
|
||||
private List<String> strings;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user