zoukankan      html  css  js  c++  java
  • 自动生成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的长度是一样的。

    结果样式:

  • 相关阅读:
    BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊(分块)
    BZOJ 4241 历史研究(分块)
    BZOJ 3110 [Zjoi2013]K大数查询(整体二分)
    hdu 5412 CRB and Queries(整体二分)
    POJ2104 K-th Number(整体二分)
    luogu P3157 [CQOI2011]动态逆序对(CDQ分治)
    陌上开花(CDQ分治)
    BZOJ 1176[Balkan2007]Mokia(CDQ分治)
    BZOJ 3626 LCA(离线+树链剖分+差分)
    bzoj1592 Making the Grade
  • 原文地址:https://www.cnblogs.com/leirenyuan/p/9141708.html
Copyright © 2011-2022 走看看