package com.panzhihua.common.utlis;
|
|
import org.apache.poi.hssf.usermodel.DVConstraint;
|
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
|
import org.apache.poi.ss.usermodel.Name;
|
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.util.CellRangeAddressList;
|
|
public final class ExcelSelectListUtil {
|
private ExcelSelectListUtil() {
|
throw new IllegalStateException("Utility class");
|
}
|
|
/**
|
* firstRow 開始行號 根据此项目,默认为2(下标0开始) lastRow 根据此项目,默认为最大65535 firstCol 区域中第一个单元格的列号 (下标0开始) lastCol 区域中最后一个单元格的列号
|
* strings 下拉内容
|
*/
|
public static void selectList(Workbook workbook, int firstCol, int lastCol, String[] strings) {
|
int charLenth = stringArrayLength(strings);
|
int arraylLenth = strings.length;
|
if (charLenth + arraylLenth >= 255) {
|
Sheet sheet = workbook.getSheetAt(0);
|
// 解决下拉超过255个字符的问题
|
String hiddenSheet = "hidden" + firstCol;
|
Sheet category1Hidden = workbook.createSheet(hiddenSheet);
|
for (int i = 0, length = strings.length; i < length; i++) {
|
// 循环赋值(为了防止下拉框的行数与隐藏域的行数相对应来获取>=选中行数的数组,将隐藏域加到结束行之后)
|
category1Hidden.createRow(i).createCell(0).setCellValue(strings[i]);
|
}
|
Name category1Name = workbook.createName();
|
category1Name.setNameName(hiddenSheet);
|
category1Name.setRefersToFormula(hiddenSheet + "!$A$1:$A$" + strings.length);
|
// A1:A代表隐藏域创建第?列createCell(?)时。以A1列开始A行数据获取下拉数组
|
// 生成下拉列表
|
// 只对(x,x)单元格有效
|
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, 65535, firstCol, lastCol);
|
// 生成下拉框内容
|
DVConstraint dvConstraint = DVConstraint.createFormulaListConstraint(hiddenSheet);
|
HSSFDataValidation dataValidation = new HSSFDataValidation(cellRangeAddressList, dvConstraint);
|
// 对sheet页生效
|
workbook.setSheetHidden(1, true);
|
sheet.addValidationData(dataValidation);
|
} else {
|
Sheet sheet = workbook.getSheetAt(0);
|
// 生成下拉列表
|
// 只对(x,x)单元格有效
|
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, 65535, firstCol, lastCol);
|
// 生成下拉框内容
|
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(strings);
|
HSSFDataValidation dataValidation = new HSSFDataValidation(cellRangeAddressList, dvConstraint);
|
// 对sheet页生效
|
sheet.addValidationData(dataValidation);
|
}
|
}
|
|
private static int stringArrayLength(String[] args) {
|
int rs = 0;
|
for (int i = 0; i < args.length; i++) {
|
rs += args[i].length();
|
}
|
return rs;
|
}
|
}
|