| | |
| | | private ExcelSelectListUtil() { |
| | | throw new IllegalStateException("Utility class"); |
| | | } |
| | | |
| | | /** |
| | | * firstRow 開始行號 根据此项目,默认为2(下标0开始) |
| | | * lastRow 根据此项目,默认为最大65535 |
| | | * firstCol 区域中第一个单元格的列号 (下标0开始) |
| | | * lastCol 区域中最后一个单元格的列号 |
| | | * firstRow 開始行號 根据此项目,默认为2(下标0开始) lastRow 根据此项目,默认为最大65535 firstCol 区域中第一个单元格的列号 (下标0开始) lastCol 区域中最后一个单元格的列号 |
| | | * strings 下拉内容 |
| | | * */ |
| | | public static void selectList(Workbook workbook, int firstCol, int lastCol, String[] 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{ |
| | | int arraylLenth = strings.length; |
| | | if (charLenth + arraylLenth >= 255) { |
| | | Sheet sheet = workbook.getSheetAt(0); |
| | | // 生成下拉列表 |
| | | // 只对(x,x)单元格有效 |
| | | // 解决下拉超过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页生效 |
| | | sheet.addValidationData(dataValidation); |
| | | } |
| | | } |
| | | |
| | | private static int stringArrayLength(String[] args){ |
| | | int rs=0; |
| | | for( int i=0 ; i<args.length ; i++ ){ |
| | | rs+=args[i].length(); |
| | | private static int stringArrayLength(String[] args) { |
| | | int rs = 0; |
| | | for (int i = 0; i < args.length; i++) { |
| | | rs += args[i].length(); |
| | | } |
| | | return rs; |
| | | } |
| | | } |
| | | |