JAvaは複数のexcelをエクスポートしzipパッケージに打つ

6230 ワード

ここでは主にデータ量が多すぎる場合に、複数の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 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 srcfile=new ArrayList();
    	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 list = new ArrayList();
        			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 list = new ArrayList();
			        			list = service.getAllList(rowfrom,pagesize);
				 	            JXLUtil.writeEmailInfo2Excel(response, "      ", "titles", list,pageindex);
			        			rowfrom=pageindex*pagesize;
			        			pageindex++;   
		        			}else{
		        				System.out.println("from:"+rowfrom+"--"+total);
		        				List list = new ArrayList();
			        			list = service.getAllList(rowfrom,total);
			        			JXLUtil.writeEmailInfo2Excel(response, "      ", "titles", list,pageindex);
			        			break;
		        			}
		        		}
		        	}
	        }	
        	List srcfile=new ArrayList();
        	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    :ダウンロード", response);	
	     
        } catch (Exception e) {
            log.error("error:"+e);
        }
        return null;
    }

 jxl生成excelは私の前の1編を参考にすればいいです.