【Excel文件的标题数据下拉选】标题数据下拉选工具类如下:
/**
* *excel导出,有码值的数据使用下拉框展示。解决下拉框最多255个字符的问题。
* *原理为新建一个隐藏状态的sheet页,用来存储下拉框的值。
* * @param wb工作簿HSSFWorkbook
* * @param col当前列名
* * @param boxMap码值集合
* * @param rows正常sheet页数据,用来指定哪些行需要添加下拉框
* * @param i多个码值需要添加下拉,隐藏状态的sheet页名称不能重复,添加i值区分。
* * @param colToIndex用来指定哪些列需要添加下拉框
* * @returndataValidation
*/
public static HSSFDataValidation createBox1(HSSFWorkbook wb, String col, Map boxMap, int rows, int i, int colToIndex) {
HSSFDataValidation dataValidation = null;
String cols = "";
//查询码值集合,获取当前列的码值。
if (null != boxMap.get(col)) {
cols = boxMap.get(col);
}
//新建隐藏状态的sheet,用来存储码值。
if (cols.length() > 0 && null != cols) {
String str[] = cols.split(",");
//创建sheet页
HSSFSheet sheet = wb.createSheet("hidden" + i);
//向创建的sheet页添加码值数据。
for (int i1 = 0;
i1 < str.length;
i1++) {
HSSFRow row = sheet.createRow(i1);
HSSFCell cell = row.createCell((int) 0);
cell.setCellValue(str[i1]);
}
//将码值sheet页做成excel公式
Name namedCell = wb.createName();
namedCell.setNameName("hidden" + i);
namedCell.setRefersToFormula("hidden" + i + "!$A$1:$A$" + str.length);
//确定要在哪些单元格生成下拉框
DVConstraint dvConstraint = DVConstraint.createFormulaListConstraint("hidden" + i);
CellRangeAddressList regions = new CellRangeAddressList(1, rows, colToIndex, colToIndex);
dataValidation = new HSSFDataValidation(regions, dvConstraint);
//隐藏码值sheet页
int sheetNum = wb.getNumberOfSheets();
for (int n = 1;
n < sheetNum;
n++) {
wb.setSheetHidden(n, true);
}
}
return dataValidation;
}/**
* *excel导出,有码值的数据使用下拉框展示。
* * @param col列名
* * @param boxMap码值集合
* * @param firstRow插入下拉框开始行号
* * @param lastRow插入下拉框结束行号
* * @param firstCol插入下拉框开始列号
* * @param lastCol插入下拉框结束行号
* * @return
*/
public static HSSFDataValidation createBox(String col, Map> boxMap, int firstRow, int lastRow, int firstCol, int lastCol) {
HSSFDataValidation dataValidation = null;
//查询码值表
List cols = new ArrayList<>();
if (null != boxMap.get(col)) {
cols = boxMap.get(col);
}
//设置下拉框
if (cols.size() > 0 && null != cols) {
//list转数组
String[] str = cols.toArray(new String[cols.size()]);
//指定0-9行,0-0列为下拉框
CellRangeAddressList cas = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
//创建下拉数据列
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(str);
//将下拉数据放入下拉框
dataValidation = new HSSFDataValidation(cas, dvConstraint);
}
return dataValidation;
}//设置样式
public static HSSFCellStyle createCellStyle(HSSFCellStyle cellStyle, HSSFFont font, Boolean flag, HSSFRow row) {
//设置边框
//下
cellStyle.setBorderBottom(BorderStyle.THIN);
//左
cellStyle.setBorderLeft(BorderStyle.THIN);
//上
cellStyle.setBorderTop(BorderStyle.THIN);
//右
cellStyle.setBorderRight(BorderStyle.THIN);
//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//设置大小
cellStyle.setFont(font);
//背景色填充整个单元格
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//填充背景色
cellStyle.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
return cellStyle;
}
//创建HSSFWorkbook对象
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet对象
HSSFSheet sheet = workbook.createSheet();
//列名样式
HSSFFont colFont = workbook.createFont();
colFont.setFontName("宋体");
colFont.setFontHeightInPoints((short) 10);
//字体大小
//设置表格列宽
sheet.setDefaultColumnWidth(10);
sheet.setColumnWidth(0, 6000);
sheet.setColumnWidth(1, 6000);
sheet.setColumnWidth(2, 6000);
sheet.setColumnWidth(3, 6000);
sheet.setColumnWidth(4, 6000);
//第一行表头
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = ExcelUtil.createCellStyle(workbook.createCellStyle(), colFont, true, row);
sheet.setDefaultColumnStyle(0, style);
推荐阅读
- 后端|PostgreSQL - 一文看懂explain
- #|【Spring从入门到实战教程】第三章 Spring AOP详解
- 大白话mysql|大白话mysql之详细分析mysql事务日志
- 大白话mysql|大白话mysql之深入浅出索引原理 - 下
- 追一科技携手华为云助力企业数字化,Face虚拟数字人亮相828 B2B企业节
- 别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
- 软件开发|为什么软件开发周期总是预估的2-3倍
- Python|【20211129】【Python】使用Python计算欧氏距离的方法
- python|博客目录索引