package cn.crossmedia.eshop.makeFile;import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;import cn.crossmedia.common.util.ClassUtil;import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;public  class createExcel { private List list; public List getList() {
return list;
} public void setList(List list) {
this.list = list;
} public ByteArrayOutputStream writeXls(String[] itemHead) {
if (list == null || list.size() < 1) {
return null;
}
WritableWorkbook wwb = null;
WritableSheet sheet = null;
OutputStream os = new ByteArrayOutputStream();
Label lable = null;
int row = 0; try {
wwb = Workbook.createWorkbook(os);
sheet = wwb.createSheet("CORSS", 0); //添加第一个工作表
for (int i = 0; i < itemHead.length; i++) {
lable = new Label(i, row, itemHead[i]); //put the title in row1       
sheet.addCell(lable);
}
Field[] fielItem = null; //用于保存实体对象属性 key
if (list.size() > 0) {
fielItem = list.get(0).getClass().getDeclaredFields(); }
for (Object o : list) {
++row;
if (fielItem.length > 0) {
for (int i = 0; i < itemHead.length; i++) {
//获取属性value值
Object value = ClassUtil.getFieldValue(o, fielItem[i]);
value = value == null ? "" : value;
lable = new Label(i, row, itemHead[i]);
sheet.addCell(lable);
}
}
}

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return (ByteArrayOutputStream)os;
}}
这是 创建类

解决方案 »

  1.   

    这是struts中Action类中的一个调用方法:
    public ActionForward makeExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    // TODO Auto-generated method stub
    if (list==null||list.size()<1) {
    return null ;
    }
    FormatForm formatForm = (FormatForm) form;// TODO Auto-generated
    formatForm.getExcel().setList(list);

    String []itemHead = {"编号","标题","描述","创建者","状态"};
    ByteArrayOutputStream ba = formatForm.getExcel().writeXls(itemHead);
        pubCode(response, ba,"application/excel");
    return null;
    }public void pubCode(HttpServletResponse response,ByteArrayOutputStream ba,String type){
    try {
              response.setContentType(type);
              response.setContentLength(ba.size());
              ServletOutputStream out = null;
     out = response.getOutputStream();
              ba.writeTo(out);
              out.flush();
          }catch (IOException e) {
      // TODO Auto-generated catch block
         e.printStackTrace();
          }
    }
      

  2.   

    不报错,就是什么页面没有东西出来!奇怪……………… 现在我改成这样了你看下啊:
    public ActionForward makeExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    // TODO Auto-generated method stub
    if (list==null||list.size()<1) {
    return null ;
    }
    FormatForm formatForm = (FormatForm) form;// TODO Auto-generated
    formatForm.getExcel().setList(list);

    String []itemHead = {"编号","标题","描述","创建者","状态"};
    ByteArrayOutputStream outStream= formatForm.getExcel().writeXls(itemHead);
     response.reset();
     response.setContentType("application/x-msdownload");   
     try {
    response.setHeader("Content-Disposition",   "attachment;   filename="+new String(("导出excel.xls").getBytes(),"iso8859-1"));   
     ServletOutputStream sos = response.getOutputStream(); 
     outStream.writeTo(sos);
     sos.flush();
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return null;
    }
    可是 弹了一个 Excel保存提示 但是打开 报错: 格式不正确 ………………  哭啊
      

  3.   

    你本身就没有给路径它怎么可能创建文件  创建文件怎么用输出流
    OutputStream os = new ByteArrayOutputStream();
    改成 InputStream is =new FileInputStream(“D:\test”);
      

  4.   

    package cn.crossmedia.eshop.makeFile;import java.io.OutputStream;
    import java.lang.reflect.Field;
    import java.util.List;import javax.servlet.http.HttpServletResponse;import cn.crossmedia.common.util.ClassUtil;import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;public  class createExcel { private List list; public List getList() {
    return list;
    } public void setList(List list) {
    this.list = list;
    } public void writeXls(String[] itemHead,HttpServletResponse response) {
    if (list == null || list.size() < 1) {
    return ;
    }
    WritableWorkbook wwb = null;
    WritableSheet sheet = null;

    Label lable = null;
    int row = 0; try {
    OutputStream os = response.getOutputStream();
    wwb = Workbook.createWorkbook(os);
    sheet = wwb.createSheet("CORSS", 0); //添加第一个工作表
    for (int i = 0; i < itemHead.length; i++) {
    lable = new Label(i, row, itemHead[i]); //put the title in row1       
    sheet.addCell(lable);
    }
    Field[] fielItem = null; //用于保存实体对象属性 key
    if (list.size() > 0) {
    fielItem = list.get(0).getClass().getDeclaredFields(); }
    for (Object o : list) {
    ++row;
    if (fielItem.length > 0) {
    for (int i = 0; i < itemHead.length; i++) {
    //获取属性value值
    Object value = ClassUtil.getFieldValue(o, fielItem[i]);
    value = value == null ? "" : value;
    lable = new Label(i, row, value.toString());
    sheet.addCell(lable);
    }
    }
    }   
                wwb.write();         
                wwb.close();   
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }
    }}
      

  5.   

    public ActionForward makeExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    // TODO Auto-generated method stub
    if (list==null||list.size()<1) {
    return null ;
    }
    FormatForm formatForm = (FormatForm) form;// TODO Auto-generated
    formatForm.getExcel().setList(list);
    response.setHeader("Content-disposition", "attachment; filename=student.xls");// 设定输出文件头
        response.setContentType("application/msexcel");// 定义输出类型
    String []itemHead = {"编号","标题","描述","创建者","状态"};
    formatForm.getExcel().writeXls(itemHead,response);

    return null;
    }我昨天也是找了好久 ,最后合起来给解决了   希望对以后需要的人有用
      

  6.   

    lz的这个应用数据量大吗?我最近一直在搞这个问题,要写一个公共的方法来下载excel,lz有什么办法[email protected],谢谢!