1.excel通用导出模板,解决时间格式不是文本问题

2.解决部分部门查询问题
This commit is contained in:
wr
2024-08-20 16:23:00 +08:00
parent 003880619e
commit bddd1efef3
7 changed files with 188 additions and 74 deletions

View File

@@ -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++;
}
}
}

View File

@@ -14,8 +14,13 @@ public class PullDown {
//起始列
private Integer firstCol;
//结束列
private Integer lastCol;
//是否设置单元格(文本)
private Boolean isText = false;
//属性值
private List<String> strings;
}