导出Zip压缩Excel

package download;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import jxl.Workbook;
import jxl.format.Border;
import jxl.format.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class DownloadTools {
    
  private DownloadTools aninyDao;
  private InputStream excelStream;
  public InputStream getExcelStream() {
    return excelStream;
  }
  public void setExcelStream(InputStream excelStream) {
    this.excelStream = excelStream;
  }

  /**
    * 醉翁之意不在酒
    */

  public DownloadTools(DownloadTools aninydao) {
    super();
    this.aninyDao =aninydao;
  }
   
  public String expZip() throws IOException{
    InputStream[] excelStream2=getDownloadInputStream(getDateList());
    String filepath = "D:/Log.zip";
    File f = new File(filepath);
    f.createNewFile();
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));
    out.putNextEntry(new ZipEntry("/"));
    for (int i = 0; i < excelStream2.length; i++) {
    //FileInputStream In = excelStream2[i];//分批以流的方式读取要压缩的文件
      out.putNextEntry(new ZipEntry((i+1)+".xls"));// 开始写入新的 ZIP 分别为每一个文件添加名称
      int b;
      while ((b = excelStream2[i].read()) != -1) {
        out.write(b);
      }
      excelStream2[i].close();
    
    }
    out.flush();
    out.close();

    InputStream fis = new BufferedInputStream(new FileInputStream(filepath));
    this.setExcelStream(fis);
    f.delete();
    return "toDownloadZipActionResult";
  }
  /**
    *   
    */

  public InputStream[] getDownloadInputStream(List list)
  {
    int count=aninyDao.getDateCount(list);
    int weekRows=500;//每页500行
    int page = (count + weekRows - 1) / weekRows;
    ByteArrayInputStream[] inputStream = new ByteArrayInputStream[page];
    for(int p = 0 ; p < page ; p++){
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      try{
        WritableFont font= new WritableFont(WritableFont.createFont("宋体".trim()),10,WritableFont.BOLD);
        WritableCellFormat cellfmt = new WritableCellFormat(font);           
        cellfmt.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN);
        cellfmt.setBackground=\'#\'"  />        cellfmt.setAlignment(jxl.format.Alignment.CENTRE);   
            WritableWorkbook wwb = Workbook.createWorkbook(out);
            WritableSheet ws = wwb.createSheet(String.valueOf("excel 页签"+p).trim(),0);
            //Label x,y,z,e---对应第x列,第y行,显示z字符,使用e格式
            ws.addCell(new Label(0,0, "用户姓名".trim(), cellfmt));
            List<Map<Integer,String>> DateList=getDateList();
            if(DateList!=null&&DateList.size()>0)
            {
              for(int i=0;i<DateList.size();i++)
              {
                ws.addCell(new Label(0,i+1,DateList.get(i).get(i+1).toString()));
              }
            }
                    wwb.write();
        wwb.close();
        out.flush();
        out.close();
        } catch (IOException e) {
          e.printStackTrace();
        } catch (WriteException e) {
          e.printStackTrace();
        }
        inputStream[p]=new ByteArrayInputStream(out.toByteArray());
        return inputStream;
      }
    return null;
  }
  public int getDateCount(List...objects)
  {
    /*
     * 逻辑处理
     * 按需而定,此处不做处理
     */

    return objects.length;
  }
  public List<Map<Integer,String>> getDateList()
  {
    
    Map<Integer, String> map=new HashMap<Integer, String>();
    map.put(Integer.valueOf("1"),"宋健!!!");
    map.put(Integer.valueOf("2"),"宋健@@@");
    map.put(Integer.valueOf("3"),"宋健###");
    map.put(Integer.valueOf("4"),"宋健$$$");
    map.put(Integer.valueOf("5"),"宋健^^^");
    List<Map<Integer,String>> dateList=new ArrayList<Map<Integer,String>>();
    dateList.add(map);
    return dateList;
  }
}

 

         

 

 

 

http://90songjian.blog.51cto.com/2264714/656267

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值