注意:該版本生成的會存在兼容性問題,下述會進行說明。數組
項目引用poi庫的依賴 (略過)excel
構造生成excel模板方法code
// 傳入下拉列表數組值,構造信息模板 public static Workbook generateExcel(String[] typeArrays) { Workbook wb = new HSSFWorkbook(); // 建立模板工做表 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("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(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); // add DVConstraint constraint = DVConstraint.createFormulaListConstraint(strFormula); // add DataValidation dataValidation = new HSSFDataValidation(regions, constraint); 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.xls"); OutputStream os = new FileOutputStream(tempFile); wb.write(os); os.close(); }
問題點orm
項目引用poi庫的依賴 (略過)get
構造生成excel模板方法it
// 傳入下拉列表數組值,構造信息模板 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(); }
完美解決該問題io
上述生成excel模板僅限於解決當前問題,若有興趣,本身封裝form