自動生成Excel 報表工具類


/**
 * 輸出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的長度是一樣的。

結果樣式:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM