java导出多个excel并打成zip包

这里主要是要针对数据量过大,通过生成多个excel文件并打成一个zip压缩包提供下载.

 

压缩excel的类  ZipUtil:

 

import java.io.*;
import java.util.*;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class ZipUtil {
    
    private static final Log log = LogFactory.getLog(ZipUtil.class);


    /**
     * 压缩文件
     * 
     * @param srcfile File[] 需要压缩的文件列表
     * @param zipfile File 压缩后的文件
     */
    public static void zipFiles(List<File> srcfile, File zipfile) {
        byte[] buf = new byte[1024];
        try {
            // Create the ZIP file
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
            // Compress the files
            for (int i = 0; i < srcfile.size(); i++) {
                File file = srcfile.get(i);
                FileInputStream in = new FileInputStream(file);
                // Add ZIP entry to output stream.
                out.putNextEntry(new ZipEntry(file.getName()));
                // Transfer bytes from the file to the ZIP file
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                // Complete the entry
                out.closeEntry();
                in.close();
            }
            // Complete the ZIP file
            out.close();
        } catch (IOException e) {
           log.error("ZipUtil zipFiles exception:"+e);
        }
    }

    /**
     * 解压缩
     * 
     * @param zipfile File 需要解压缩的文件
     * @param descDir String 解压后的目标目录
     */
    public static void unZipFiles(File zipfile, String descDir) {
        try {
            // Open the ZIP file
            ZipFile zf = new ZipFile(zipfile);
            for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
                // Get the entry name
                ZipEntry entry = ((ZipEntry) entries.nextElement());
                String zipEntryName = entry.getName();
                InputStream in = zf.getInputStream(entry);
                // System.out.println(zipEntryName);
                OutputStream out = new FileOutputStream(descDir + zipEntryName);
                byte[] buf1 = new byte[1024];
                int len;
                while ((len = in.read(buf1)) > 0) {
                    out.write(buf1, 0, len);
                }
                // Close the file and stream
                in.close();
                out.close();
            }
        } catch (IOException e) {
            log.error("ZipUtil unZipFiles exception:"+e);
        }
    }

    /**
     * Main
     * 
     * @param args
     */
    public static void main(String[] args) {
    	List<File> srcfile=new ArrayList<File>();
    	srcfile.add(new File("e:\\1.xls"));
    	srcfile.add(new File("e:\\2.xls"));
    	srcfile.add(new File("e:\\3.xls"));
    	srcfile.add(new File("e:\\4.xls"));
    	srcfile.add(new File("e:\\5.xls"));

        File zipfile = new File("e:\\edm.zip");
        ZipUtil.zipFiles(srcfile, zipfile);
    }
}

 

 

生成多个excel 类:

 

 /**
     * forward:导出Excel
     * @throws Exception
     */
    private ModelAndView forwardExport2Excel(HttpServletRequest request, HttpServletResponse response)
    throws Exception{
        try {
        	
	            Integer page=0;//页数
	            Integer pagesize=Integer.valueOf(PropertiesUtil.getPropertyValue("PAGESIZE"));//每页显示数
	            Integer total=0;//总数
	            int pageindex=1;//当前页数
	            Integer rowfrom = 1;
	            Integer rowto = 10;
	        	total =service.getTotal();
	        	if(total<pagesize){
	        		page=1;
	        		System.out.println("from:"+rowfrom+"---"+total);
    				List<Object> list = new ArrayList<Object>();
        			list = service.getAllList(rowfrom,total);
        			JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
	        	}else{	        	
		        	Integer mode=total%pagesize;
		        	if(mode!=0){
		        		page=total/pagesize+1;
		        	}else{
		        		page=total/pagesize;
		        	}
		        	if(total!=0 && page!=0){
		        		while(pageindex<=page ){
		        			if(total<0){
		        				break;
		        			}
		        			if( total>pageindex*pagesize ){
			        			System.out.println("from:"+(rowfrom)+"----"+pageindex*pagesize);
			        			List<Object> list = new ArrayList<Object>();
			        			list = service.getAllList(rowfrom,pagesize);
				 	            JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
			        			rowfrom=pageindex*pagesize;
			        			pageindex++;   
		        			}else{
		        				System.out.println("from:"+rowfrom+"--"+total);
		        				List<Object> list = new ArrayList<Object>();
			        			list = service.getAllList(rowfrom,total);
			        			JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
			        			break;
		        			}
		        		}
		        	}
	        }	
        	List<File> srcfile=new ArrayList<File>();
        	for(int p=1;p<=page;p++){
            	srcfile.add(new File(PropertiesUtil.getPropertyValue("URL")+"zipname"+p+".xls"));
        	}
        	File zipfile = new File(PropertiesUtil.getPropertyValue("OUTPATH")+"zipname.zip");
            ZipUtil.zipFiles(srcfile, zipfile);
            String path = request.getContextPath();
            String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";	
	        writeObject("成功导出excel  地址:<html><a href="+basePath+"zipname.zip>点击下载</a></html>", response);	
	     
        } catch (Exception e) {
            log.error("error:"+e);
        }
        return null;
    }

 jxl生成excel参考我之前的一篇即可

你可能感兴趣的:(Excel)