/** * 輸出Excel文檔 * * @param response * @param sheetName 文件名稱 * @param firstCellTile 第一行的標題 * @param cells 列名集合 * @param cellData 每列數據集合,應該和列名對應起來 * @throws IOException */ public static void createExcel(HttpServletResponse response, String sheetName, String firstCellTile, List<String> cells, List<Object[]> cellData) throws IOException { //創建HSSFWorkbook對象(excel的文檔對象) HSSFWorkbook wb = new HSSFWorkbook(); //建立新的sheet對象(excel的表單) HSSFSheet sheet = wb.createSheet(sheetName); //在sheet里創建第一行,參數為行索引(excel的行),可以是0~65535之間的任何一個 HSSFRow row1 = sheet.createRow(0); //創建單元格(excel的單元格,參數為列索引,可以是0~255之間的任何一個 HSSFCell cell = row1.createCell(0); //設置單元格內容 cell.setCellValue(firstCellTile); //合並單元格CellRangeAddress構造參數依次表示起始行,截至行,起始列, 截至列 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (cells.size() - 1))); //在sheet里創建第二行 HSSFRow row2 = sheet.createRow(1); //創建單元格並設置單元格內容 for (int i = 0; i < cells.size(); i++) { row2.createCell(i).setCellValue(cells.get(i)); } //創建單元格並設置單元格內容 for (int i = 0; i < cellData.size(); i++) { //在sheet里從第三行開始創建 HSSFRow row3 = sheet.createRow(i + 2); Object[] obj = cellData.get(i); for (int k = 0; k < obj.length; k++) { String type = obj[k].getClass().getName(); if ("java.sql.Timestamp".equals(type)) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定義格式,不顯示毫秒 row3.createCell(k).setCellValue(df.format(obj[k])); } else { row3.createCell(k).setCellValue(String.valueOf(obj[k])); } } } //輸出Excel文件 OutputStream output = response.getOutputStream(); response.reset(); //中文需要重新編碼,不然無法顯示中文文件名稱 sheetName = new String(sheetName.getBytes(), "ISO-8859-1"); response.setHeader("Content-disposition", "attachment; filename=" + sheetName + ".xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); }
cell 數據樣式: List list=new ArrayList<>(); list.add("1“);。。。。。
cellData中Object【】數據樣式 obj1,obj2,obj3. PS:obj的數組長度應該與cells的長度是一樣的。
結果樣式: