poi匯出下拉列表,解決下拉列表資料過多問題
// 傳入下拉列表陣列值,構造資訊模板
public static Workbook generateExcel(String[]typeArrays) {
Workbook wb = new XSSFWorkbook();
// 建立模板工作表
Sheet sheet = wb.createSheet("test");
// 建立下拉列表值儲存工作表並設定值
genearteOtherSheet(wb, typeArrays);
// 建立模板列資訊並繫結下拉列表值
Row row = sheet.createRow(0);
// 設定列資訊樣式 -- 當前樣式對於列資訊未居中
setStyle(wb, sheet, 0);
setStyle(wb, sheet, 1);
// 繫結列資訊
Cell nameCell = row.createCell((int)0);
nameCell.setCellValue("名稱");
Cell typeCell = row.createCell((int)1);
typeCell.setCellValue("型別");
// 設定下拉列表值繫結對哪一頁起作用
sheet.addValidationData(SetDataValidation(wb, "typelist!$A$1:$A$" + typeArrays.length, 1, 0, typeArrays.length, 0));
// 隱藏作為下拉列表值的Sheet
wb.setSheetHidden(wb.getSheetIndex("typelist"), 1);
return wb;
}
// 建立下拉列表值儲存工作表並設定值
public static void genearteOtherSheet(Workbook wb, String[]typeArrays) {
// 建立下拉列表值儲存工作表
Sheet sheet = wb.createSheet("typelist");
// 迴圈往該sheet中設定新增下拉列表的值
for (int i = 0; i < typeArrays.length; i++) {
Row row = sheet.createRow(i);
Cell cell = row.createCell((int)0);
cell.setCellValue(typeArrays[i]);
}
}
// 設定列資訊樣式
public static void setStyle(Workbook wb, Sheet sheet, int colNum) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
DataFormat format = wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));
sheet.setDefaultColumnStyle(colNum, cellStyle);
}
// 設定並引用其他Sheet作為繫結下拉列表資料
public static DataValidation SetDataValidation(Workbook wb, String strFormula, int firstRow, int firstCol, int endRow, int endCol) {
// 表示A列1-59行作為下拉列表來源資料
// String formula = "typelist!$A$1:$A$59" ;
// 原順序為 起始行 起始列 終止行 終止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
DataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)wb.getSheet("typelist"));
DataValidationConstraint formulaListConstraint = dvHelper.createFormulaListConstraint(strFormula);
DataValidation dataValidation = dvHelper.createValidation(formulaListConstraint, regions);
return dataValidation;
}
public static void main(String[]args)throws Exception {
List < String > typelist = new ArrayList < String > ();
for (int i = 0; i < 200; i++) {
typelist.add("T" + (0 + i));
}
String[]typeArrays = typelist.toArray(new String[typelist.size()]);
Workbook wb = generateExcel(typeArrays);
File tempFile = new File("C:\\Users\\gqd\\Desktop\\test.xlsx");
OutputStream os = new FileOutputStream(tempFile);
wb.write(os);
os.close();
}