java的多个excel打包成zip下载 poi

    /** 
     * 导出Excel功能 
     * @param sql 获取数据要执行的SQL语句 
     * @param params SQL语句的参数 
     * @param column Excel表头,如果有扩展属性的话,可定义为:户号,户名,营业区域$ALL_BS_INFO 
     * @param excelRowsLimit 没个Excel单元格的条数 
     * @param httpServletRequest  
     * @return 改Excel的下载地址 
     * @throws Exception 
     */  
    public String expExcel(String sql, List params, String[] column,  
            int excelRowsLimit, HttpServletRequest httpServletRequest)  
            throws Exception {  
        DBTool dbTool = null;  
        String downloadUrl = "";  
        Record[] rds = null;  
        Record record = null;  
        ZipOutputStream out =  null;  
        try {  
            dbTool = new DBTool();  
            rds = dbTool.executeQuery(sql, params);  
//          System.out.println("L:  "+rds.length);  
            int genExcelRowsLimit = excelRowsLimit <= 0 ? ServiceLocator.getInstance().getWebAppConfig().getGenExcelRowsLimit(): excelRowsLimit;  
              
            String path = ServiceLocator.getInstance().getWebAppConfig().getExcelTempDirectory();  
            String zipPath = httpServletRequest.getSession().getId()+ System.currentTimeMillis() + ".zip";  
            downloadUrl = "http://" + httpServletRequest.getServerName() + ":"+ httpServletRequest.getServerPort()  
                    + httpServletRequest.getContextPath()+ "/GetTempFileServlet?fileName=" + zipPath;  
            if (path == null) {  
                path = httpServletRequest.getSession().getServletContext().getRealPath("download");  
                downloadUrl = "http://" + httpServletRequest.getServerName()  
                        + ":" + httpServletRequest.getServerPort()+ httpServletRequest.getContextPath() + "/download"  
                        + "/" + zipPath;  
            }  
//          System.out.println(path+System.getProperty("file.separator")+zipPath);  
            File file = new File(path+System.getProperty("file.separator")+zipPath);  
            if(!file.exists()){  
                file.createNewFile();  
            }  
            out = new ZipOutputStream(new FileOutputStream(file));  
            DropBeanMap dbm = DropBeanMap.getInstance();  
  
            int fileCount = rds.length % genExcelRowsLimit == 0 ? rds.length/genExcelRowsLimit : rds.length / genExcelRowsLimit + 1;  
//          System.out.println("fileCount "+fileCount);  
            for (int i = 0; i < fileCount; i++) {  
                int temp = i * genExcelRowsLimit;  
  
                HSSFWorkbook wb = new HSSFWorkbook();  
                HSSFSheet hs = wb.createSheet();  
  
                HSSFCellStyle style = wb.createCellStyle();  
                style.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
                style.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
                style.setBorderRight(HSSFCellStyle.BORDER_THIN);  
                style.setBorderTop(HSSFCellStyle.BORDER_THIN);  
                style.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);  
                style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
                HSSFFont font = wb.createFont();  
                font.setFontHeightInPoints((short) 11);  
                style.setFont(font);  
                HSSFCellStyle style1 = wb.createCellStyle();  
                style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
                style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
                style1.setBorderRight(HSSFCellStyle.BORDER_THIN);  
                style1.setBorderTop(HSSFCellStyle.BORDER_THIN);  
                style1.setFillForegroundColor(HSSFColor.ORANGE.index);  
                style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
                HSSFFont font1 = wb.createFont();  
                font1.setFontHeightInPoints((short) 15);  
                font1.setBoldweight((short) 700);  
                style1.setFont(font);  
                HSSFCellStyle style2 = wb.createCellStyle();  
                style2.setWrapText(true); // 设置自动换行  
  
                HSSFRow hr = hs.createRow(0);  
                for (int j = 0; j < column.length; j++) {  
                    // 设置表头  
                    String value = "";  
                    if (column[j].indexOf("$") < 0) {  
                        value = column[j];  
                    } else {  
                        value = column[j].substring(0, column[j].indexOf("$"));  
                    }  
                    int len = value.length();  
                    hs.setColumnWidth((short) j, (short) (len * 1600));  
                    HSSFCell hc = hr.createCell((short) j);  
                    hc.setEncoding(HSSFCell.ENCODING_UTF_16);  
                    hc.setCellStyle(style1);  
                    hc.setCellValue(value);  
                }  
                  
                int eachCount =  genExcelRowsLimit;  
                if(i==(fileCount-1) && rds.length % genExcelRowsLimit != 0 ){  
                    eachCount = rds.length % genExcelRowsLimit-1;  
                }  
//              System.out.println("i: "+i+" eachCount: "+eachCount);  
                for (int j = 0; j < eachCount; j++) {  
                    hr = hs.createRow(j + 1);  
//                  System.out.println("temp + j: "+(temp + j));  
                    record = rds[temp + j];  
                    for (int r = 0; r < column.length; r++) {  
                        String dropName = "";  
                        String value = record.getString(r + 1) == null ? "": record.getString(r + 1).toString();  
                        value = value.replaceAll(";alt", "'");  
                        if (column[r].indexOf("$") >= 0) {  
                            dropName = column[r].substring(column[r].indexOf("$") + 1, column[r].length());  
                            value = dbm.getDropLabel(dropName, value);  
                        }  
                        hr.setHeight((short) 500);  
                        HSSFCell hc = hr.createCell((short) r);  
                        hc.setCellStyle(style);  
                        hc.setEncoding(HSSFCell.ENCODING_UTF_16);  
                        hc.setCellValue(value);  
                        hc.setCellStyle(style2);  
                    }  
                }  
                  
                out.putNextEntry(new ZipEntry(i+".xls"));  
                  
                wb.write(out);  
            }  
            out.close();  
              
        } catch (Exception e) {  
            e.printStackTrace();  
            throw new highsoft.framework.exceptions.BaseRunException(  
                    "导出excel出错!", e);  
        } finally {  
            if (dbTool != null) {  
                dbTool.closeConnection();  
                dbTool = null;  
            }  
            if(null != out){  
                  try{  
                      out.flush();  
                      out.close();  
                      out = null;  
                  }  
                  catch(IOException e){};   
            }  
        }  
        return downloadUrl;  
    }  
  
    /** 
      * 遍历目录并添加文件. 
      * @param jos - JAR 输出流 
      * @param file - 目录文件名 
      * @param pathName - ZIP中的目录名 
      * @throws IOException 
      * @throws FileNotFoundException 
      */  
     private static void recurseFiles(ZipOutputStream jos, File file,  
            String pathName) throws IOException, FileNotFoundException {  
        byte buf[] = new byte[1024];  
        if (file.isDirectory()) {  
            pathName = pathName + file.getName() + "/";  
            jos.putNextEntry(new ZipEntry(pathName));  
            String fileNames[] = file.list();  
            if (fileNames != null) {  
                for (int i = 0; i < fileNames.length; i++)  
                    recurseFiles(jos, new File(file, fileNames[i]), pathName);  
            }  
        } else {  
            ZipEntry jarEntry = new ZipEntry(pathName + file.getName());  
            // System.out.println(pathName + " " + file.getName());  
            FileInputStream fin = new FileInputStream(file);  
            BufferedInputStream in = new BufferedInputStream(fin);  
            jos.putNextEntry(jarEntry);  
            int len;  
            while ((len = in.read(buf)) >= 0)  
                jos.write(buf, 0, len);  
            in.close();  
            jos.closeEntry();  
        }  
    }  
       
     /** 
         * 创建 ZIP/JAR 文件. 
         *  
         * @param directory - 
         *            要添加的目录 
         * @param zipFile - 
         *            保存的 ZIP 文件名 
         * @param zipFolderName - 
         *            ZIP 中的路径名 
         * @param level - 
         *            压缩级别(0~9) 
         * @throws IOException 
         * @throws FileNotFoundException 
         */  
     public static void makeDirectoryToZip(File directory, File zipFile,  
            String zipFolderName, int level) throws IOException,  
            FileNotFoundException {  
        level = (level < 0 || level > 9)? 7 : level;  
        if (zipFolderName == null) {  
            zipFolderName = "";  
        }  
        ZipOutputStream jos = new ZipOutputStream(new FileOutputStream(zipFile));  
        jos.setLevel(level);  
        String fileNames[] = directory.list();  
        if (fileNames != null) {  
            for (int i = 0; i < fileNames.length; i++)  
                recurseFiles(jos, new File(directory, fileNames[i]),zipFolderName);  
        }  
        jos.close();  
    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值