`

Java操作POI批量导出多个excle,打压缩包

    博客分类:
  • java
 
阅读更多
http://blog.csdn.net/jibaole/article/details/52086559

[javascript] view plain copy 在CODE上查看代码片派生到我的代码片
//站内搜索查询报表-Excel导出 
function exportRecord(){ 
    var browseUrl=$("#browseUrl").val(); 
      if(browseUrl == null || browseUrl == ""){ 
          $.messager.show({ 
                title : '友好提示', 
                msg : '浏览资源ID,不能为空!' 
            }); 
            return ; 
      }else{ 
      var data = $.toJSON(getCustomerSearch()); 
      window.location.href="statResourceBrowseAction!exportStatResourceBrowse?queryJson="+data+"&excelTatol="+excelTatol; 
      } 


二、Java请求处理
[java] view plain copy 在CODE上查看代码片派生到我的代码片
//站内搜索查询报表-Excel导出 
    public void exportStatResourceBrowse() { 
        ExportToExcelUtil<StatResourceBrowse> excelUtil = new ExportToExcelUtil<StatResourceBrowse>(); 
        // 导出总记录数 
        excelTatol = request.getParameter("excelTatol") == null ? 10 : Integer.parseInt(request.getParameter("excelTatol")); 
        OutputStream out = null; 
        try { 
            out = response.getOutputStream(); 
            excelUtil.setResponseHeader(response,"资源浏览统计表"); 
            String[] headers = { "会员id",  "医师职称", "专业领域", "省","医院等级id","医院等级","操作途径"}; 
            String[] columns = { "customerId", "medicalTitle","areasExpertise", "province","hospitalLevelId","hospitalLevel","opSource"}; 
 
            List<StatResourceBrowse> dataset = service.getList(getQueryJsonKeywordObject()); 
            excelUtil.exportExcel( headers, columns, dataset, out, request, ""); 
        } catch (Exception e1) { 
            e1.printStackTrace(); 
        } finally { 
            try { 
                out.flush(); 
                out.close(); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 

三、POI导出excle工具类
[java] view plain copy 在CODE上查看代码片派生到我的代码片
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.lang.reflect.Method; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Date; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
import org.apache.poi.hssf.usermodel.HSSFClientAnchor; 
import org.apache.poi.hssf.usermodel.HSSFFont; 
import org.apache.poi.hssf.usermodel.HSSFPatriarch; 
import org.apache.poi.hssf.usermodel.HSSFRichTextString; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.util.HSSFColor; 
import org.apache.poi.hssf.util.Region; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.compass.core.util.CollectionUtils; 
 
/** 
* 2015-4-29 
* DES:POI导出Excel
* author:JiBaoLe 
*/  
public class ExportToExcelUtil<T> {   
    //每次设置导出数量 
    public static int  NUM=5000; 
    public static String title=""; 
    
    /** 
     * 导出Excel的方法 
     * @param title excel中的sheet名称 
     * @param headers 表头 
     * @param result 结果集 
     * @param out 输出流 
     * @param pattern 时间格式 
     * @throws Exception 
     */    
    public void exportExcel( String[] headers,String[] columns, List<T> result, OutputStream out,HttpServletRequest request, String pattern) throws Exception{    
         
        File zip = new File(request.getRealPath("/files") + "/" +getFileName() + ".zip");// 压缩文件 
         
        int n=0; 
        if (!CollectionUtils.isEmpty(result)) { 
            if (result.size() % NUM == 0) { 
                n = result.size() / NUM; 
            } else { 
                n = result.size() / NUM + 1; 
            } 
        }else{ 
            n=1; 
        } 
        List<String> fileNames = new ArrayList();// 用于存放生成的文件名称s 
        //文件流用于转存文件 
         
        for (int j = 0; j < n; j++) { 
            Collection<T> result1=null; 
        //切取每5000为一个导出单位,存储一个文件 
        //对不足5000做处理; 
            if (!CollectionUtils.isEmpty(result)) { 
                if (j == n - 1) { 
                    if (result.size() % NUM == 0) { 
                        result1 = result.subList(5000 * j, 5000 * (j + 1)); 
                    } else { 
                        result1 = result.subList(5000 * j, 
                                5000 * j + result.size() % NUM); 
                    } 
                } else { 
                    result1 = result.subList(5000 * j, 5000 * (j + 1)); 
                } 
            } 
        // 声明一个工作薄    
            Workbook workbook = new HSSFWorkbook(); 
        // 生成一个表格    
        HSSFSheet sheet = (HSSFSheet) workbook.createSheet(title);    
        // 设置表格默认列宽度为18个字节    
        sheet.setDefaultColumnWidth((short)18);    
            
         
        String file = request.getRealPath("/files") + "/" + getFileName() + "-" +j+ ".xls"; 
 
        fileNames.add(file); 
         
        FileOutputStream o = new FileOutputStream(file); 
            
        // 生成一个样式    
        HSSFCellStyle style = (HSSFCellStyle) workbook.createCellStyle();    
        // 设置这些样式    
        style.setFillForegroundColor(HSSFColor.GOLD.index);    
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);    
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);    
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);    
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);    
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);    
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);    
        // 生成一个字体    
        HSSFFont font = (HSSFFont) workbook.createFont();    
        font.setColor(HSSFColor.VIOLET.index);    
        //font.setFontHeightInPoints((short) 12);    
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);    
        // 把字体应用到当前的样式    
        style.setFont(font);    
            
        // 指定当单元格内容显示不下时自动换行    
        style.setWrapText(true);    
          
        // 声明一个画图的顶级管理器   
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
       
        // 产生表格标题行    
        //表头的样式  
        HSSFCellStyle titleStyle = (HSSFCellStyle) workbook.createCellStyle();// 创建样式对象  
        titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中  
        titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中  
        // 设置字体  
        HSSFFont titleFont = (HSSFFont) workbook.createFont(); // 创建字体对象  
        titleFont.setFontHeightInPoints((short) 15); // 设置字体大小  
        titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体  
      //  titleFont.setFontName("黑体"); // 设置为黑体字  
        titleStyle.setFont(titleFont);  
        sheet.addMergedRegion(new Region(0,(short)0,0,(short)(headers.length-1)));//指定合并区域   
        HSSFRow rowHeader = sheet.createRow(0);    
        HSSFCell cellHeader = rowHeader.createCell((short)0);   //只能往第一格子写数据,然后应用样式,就可以水平垂直居中  
        HSSFRichTextString textHeader = new HSSFRichTextString(title);    
        cellHeader.setCellStyle(titleStyle);  
        cellHeader.setCellValue(textHeader);  
          
        HSSFRow row = sheet.createRow(1);    
        for (int i = 0; i < headers.length; i++) {    
            HSSFCell cell = row.createCell((short)i);    
            cell.setCellStyle(style);    
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);    
            cell.setCellValue(text);    
         }    
         // 遍历集合数据,产生数据行    
         if(result1 != null){    
             int index = 2;    
             for(T t:result1){   
                 row = sheet.createRow(index);    
                 index++;  
                 for(short i = 0; i < columns.length; i++) {  
                     HSSFCell cell = row.createCell(i);  
                     String fieldName = columns[i];  
                     String getMethodName = "get"  
                         + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);  
                     Class tCls = t.getClass();  
                     Method getMethod = tCls.getMethod(getMethodName, new Class[]{});  
                     Object value = getMethod.invoke(t, new Class[]{});  
                     String textValue = null;  
                     if(value == null) {  
                         textValue = "";  
                     }else if (value instanceof Date) {  
                         Date date = (Date) value;  
                         SimpleDateFormat sdf = new SimpleDateFormat(pattern);  
                          textValue = sdf.format(date);  
                      }  else if (value instanceof byte[]) {  
                         // 有图片时,设置行高为60px;  
                         row.setHeightInPoints(60);  
                         // 设置图片所在列宽度为80px,注意这里单位的一个换算  
                         sheet.setColumnWidth(i, (short) (35.7 * 80));  
                         byte[] bsValue = (byte[]) value;  
                         HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,  
                               1023, 255, (short) 6, index, (short) 6, index);  
                         anchor.setAnchorType(2);  
                         patriarch.createPicture(anchor, workbook.addPicture(  
                               bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));  
                      } else{  
                         //其它数据类型都当作字符串简单处理  
                         textValue = value.toString();  
                      }  
                       
                     if(textValue!= null){  
                         Pattern p = Pattern.compile("^//d+(//.//d+)?$");    
                         Matcher matcher = p.matcher(textValue);  
                         if(matcher.matches()){  
                            //是数字当作double处理  
                            cell.setCellValue(Double.parseDouble(textValue));  
                         }else{  
                            HSSFRichTextString richString = new HSSFRichTextString(textValue);  
                            cell.setCellValue(richString);  
                         }  
                      }  
                 }  
             }       
         }    
         workbook.write(o);   
         File srcfile[] = new File[fileNames.size()]; 
        for (int i = 0, n1 = fileNames.size(); i < n1; i++) { 
            srcfile[i] = new File(fileNames.get(i)); 
        } 
        ZipFiles(srcfile, zip); 
        FileInputStream inStream = new FileInputStream(zip); 
        byte[] buf = new byte[4096]; 
        int readLength; 
        while (((readLength = inStream.read(buf)) != -1)) { 
            out.write(buf, 0, readLength); 
        } 
        inStream.close(); 
        } 
     }    
    //获取文件名字 
    public static String getFileName(){ 
        // 文件名获取 
        Date date = new Date(); 
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); 
        String f = title + format.format(date); 
        return f; 
    } 
    //压缩文件 
    public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) { 
        byte[] buf = new byte[1024]; 
        try { 
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream( 
                    zipfile)); 
            for (int i = 0; i < srcfile.length; i++) { 
                FileInputStream in = new FileInputStream(srcfile[i]); 
                out.putNextEntry(new ZipEntry(srcfile[i].getName())); 
                int len; 
                while ((len = in.read(buf)) > 0) { 
                    out.write(buf, 0, len); 
                } 
                out.closeEntry(); 
                in.close(); 
            } 
            out.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
     
    /** 设置响应头 */ 
    public void setResponseHeader(HttpServletResponse response,String fileName) { 
        try { 
            this.title=fileName; 
            response.reset();// 清空输出流 
            response.setContentType("application/octet-stream;charset=UTF-8"); 
            response.setHeader("Content-Disposition", "attachment;filename=" 
                    +new String(this.title.getBytes("GB2312"), "8859_1") 
                    + ".zip"); 
            response.addHeader("Pargam", "no-cache"); 
            response.addHeader("Cache-Control", "no-cache"); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } 
    } 
}    
分享到:
评论

相关推荐

    Java利用poi导出excel表格.zip

    以上就是一个基本的使用Apache POI导出Excel表格的过程。在实际应用中,你可能还需要处理更复杂的需求,如设置单元格样式、合并单元格、添加公式等。Apache POI提供了丰富的API,可以满足这些需求。通过深入学习和...

    JAVA通过POI读取excle

    在Java开发中,处理Excel数据是一项常见的任务,尤其是在数据分析、报表生成或数据导入导出的场景下。Apache POI是一个强大的库,它允许开发者使用Java读取、创建和修改Microsoft Office格式的文件,包括Excel(XLS...

    POI 完美生成带文字水印的excle

    在压缩包文件“8fe29b2d72814152be235d089f38a3bc”中,虽然没有提供具体的文件名,但可以推测这可能包含了一个或多个Java源代码文件,用于演示如何使用Apache POI库创建带有文字水印的Excel文件。这些文件可能包含...

    java导出excle工具类

    在给定的"java jsp 导出 excle"标签中,我们可以推断这个工具类主要用于Java Web环境,尤其是JSP页面,用于生成和下载Excel文件。 在Java中,实现Excel导出通常有两种方式:使用Apache POI库和使用JExcelAPI。...

    poi根据ResultSet到处Excle源码

    标题中的“poi根据ResultSet到处Excle源码”指的是使用Java的Apache POI库将数据库查询结果(ResultSet)转换为Excel文件的过程。Apache POI是一个流行的API,它允许开发者读写Microsoft Office格式的文件,包括...

    easyuiPoi导出Excel工具类封装(支持合并单元格)

    EasyUIPoI是一款基于Apache POI的Java工具库,专门用于简化Excel的导出操作,尤其在处理模板和合并单元格方面提供了便利。这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表...

    java动态导出excel压缩成zip下载的方法

    "java动态导出excel压缩成zip下载的方法" 本文主要介绍了java动态导出excel压缩成zip下载的方法,该方法可以将excel文件压缩成zip格式并下载,具有实用价值。 java动态导出excel压缩成zip下载的原理 java动态导出...

    Excel导入导出 jxl及Poi 工具类

    为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中的示例代码。通过阅读和运行这些代码,你可以更深入地了解如何在实际项目中应用jxl和Apache POI。 总的来说,jxl和Apache ...

    java-excel.rar_excel java_java excel_java excle_java语言 excel

    "java-excel.rar"这个压缩包文件显然包含了关于如何使用Java处理Excel的相关资源,特别是导出Excel文件的方法。下面将详细介绍使用Java进行Excel操作的核心知识点。 首先,Java与Excel交互的主要库有Apache POI和...

    导出 Excel 以及转化为 PDF 导出

    首先,`easypoi` 是一个基于 Apache POI 的 Java 框架,专门用于处理 Office 文档,包括 Excel。它简化了操作 Excel 的过程,提供了强大的 API,使得开发者能够方便地读取、写入和操作 Excel 文件。例如,你可以使用...

    excle导出相关jar

    综上所述,这个名为“excleexportJar”的压缩包文件很可能包含了一个用Java编写的程序,该程序利用Apache POI或者其他类似库来处理Excel文件的导出。它可能是为了方便开发者快速实现将数据导出为Excel格式,以便于...

    导出EXCLE数据ExcelReader

    标题中的“导出EXCLE数据ExcelReader”表明我们要讨论的是一个与Excel数据处理相关的工具或技术,特别是关于从Excel文件中读取数据的部分。在IT领域,这通常涉及到电子表格编程,例如使用特定的库或者API来解析Excel...

    jfinal写的文件导入导出到excle

    标题 "jfinal写的文件导入导出到excle" 涉及的是使用JFinal这个Java Web开发框架来处理Excel文件的导入与导出功能。JFinal是一个轻量级的MVC框架,它提供了快速开发、高效率运行的能力,使得开发者能够更加便捷地...

    java web项目中通过apache poi将本地excel文件导入到系统中并打印到控制台

    在Java Web项目中,Apache POI是一个非常流行的库,用于读取、写入以及操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。本教程将详细讲解如何使用Apache POI将本地Excel文件导入到系统中,并将其...

    jxls实现的excel导出功能,支持03以上版本

    jxls是一个强大的Java库,它允许开发者使用Apache POI库来处理Excel模板,从而简化Excel数据导出的过程。这个功能特别适用于需要将大量结构化数据转换为易于阅读的Excel格式的情况,比如报告、数据分析或用户导出的...

    poi读取excel并输出到jsp页面

    在Java开发中,Apache POI库提供了API来读取、写入和操作Excel文件。读取Excel文件时,主要涉及到的工作包括打开工作簿、选择工作表、读取单元格数据等。例如,可以使用以下代码片段打开一个Excel文件: ```java ...

    后台pdf&excle导出.zip

    这里,我们主要关注"后台pdf&excle导出.zip"这个压缩包,它很可能包含了一个用于实现此类功能的代码示例或者库。文件名"ImportAndExportRepository-master"可能指示这是一个主仓库,包含了导入和导出功能的相关代码...

    poi-src-3.16

    在给定的"poi-src-3.16"压缩包中,我们聚焦于POI库的一个特定版本——3.16,该版本在处理Excel文件时具有某些特定的功能,而这些功能在更新的3.17版本中可能未被发现或已有所改变。 Apache POI 提供了Java API,...

    apache 的 poi-3.8.jar

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Microsoft Excel。这个"poi-3.8.jar"是Apache POI的一个版本库,主要用于读取、写入和修改Excel文件。此版本为3.8,发布于2012年3月26日。开发者...

    java对Excel案例

    首先,我们注意到压缩包中的`jxl.jar`文件,这是一个Java Excel API库,它允许开发者读取、写入和修改Microsoft Excel文件。JExcelApi是早期广泛使用的Java与Excel交互的开源库,虽然现在已经有更现代的选择(如...

Global site tag (gtag.js) - Google Analytics