Java实现导出excel

  1 package demo;
  2 
  3 import java.io.OutputStream;
  4 import java.lang.reflect.Field;
  5 import java.text.SimpleDateFormat;
  6 import java.util.Date;
  7 import java.util.List;
  8 
  9 import javax.servlet.http.HttpServletResponse;
 10 
 11 import jxl.Workbook;
 12 import jxl.format.Alignment;
 13 import jxl.format.Border;
 14 import jxl.format.BorderLineStyle;
 15 import jxl.format.VerticalAlignment;
 16 import jxl.write.Label;
 17 import jxl.write.WritableCellFormat;
 18 import jxl.write.WritableFont;
 19 import jxl.write.WritableSheet;
 20 import jxl.write.WritableWorkbook;
 21 /*** 
 22  * @author lsf 
 23  */  
 24 public class ExportExcel {  
 25  /**
 26   * @param fileName EXCEL文件名称 
 27   * @param listTitle EXCEL文件第一行列标题集合 
 28   * @param listContent EXCEL文件正文数据集合 
 29   * @return 
 30   */  
 31  public  final static String exportExcel(HttpServletResponse response,String fileName,String[] Title, List<Object> listContent) {  
 32   String result="系统提示:Excel文件导出成功!";    
 33   // 以下开始输出到EXCEL  
 34   try {      
 35    //定义输出流,以便打开保存对话框______________________begin  
 36 //   HttpServletResponse response=ServletActionContext.getResponse();  
 37    OutputStream os = response.getOutputStream();// 取得输出流        
 38    response.reset();// 清空输出流        
 39    response.setHeader("Content-disposition", "attachment; filename="+ new String(fileName.getBytes("GB2312"),"ISO8859-1"));  
 40 // 设定输出文件头        
 41    response.setContentType("application/msexcel");// 定义输出类型      
 42    //定义输出流,以便打开保存对话框_______________________end  
 43   
 44    /** **********创建工作簿************ */  
 45    WritableWorkbook workbook = Workbook.createWorkbook(os);  
 46   
 47    /** **********创建工作表************ */  
 48    WritableSheet sheet = workbook.createSheet("Sheet1", 0);  
 49   
 50    /** **********设置纵横打印(默认为纵打)、打印纸***************** */  
 51    jxl.SheetSettings sheetset = sheet.getSettings();  
 52    sheetset.setProtected(false);  
 53   
 54    /** ************设置单元格字体************** */  
 55    WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);  
 56    WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD);  
 57   
 58    /** ************以下设置三种单元格样式,灵活备用************ */  
 59    // 用于标题居中  
 60    WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);  
 61    wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条  
 62    wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐  
 63    wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐  
 64    wcf_center.setWrap(false); // 文字是否换行  
 65      
 66    // 用于正文居左  
 67    WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);  
 68    wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条  
 69    wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐  
 70    wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐  
 71    wcf_left.setWrap(false); // 文字是否换行     
 72    
 73   
 74    /** ***************以下是EXCEL开头大标题,暂时省略********************* */  
 75    //sheet.mergeCells(0, 0, colWidth, 0);  
 76    //sheet.addCell(new Label(0, 0, "XX报表", wcf_center));  
 77    /** ***************以下是EXCEL第一行列标题********************* */  
 78    for (int i = 0; i < Title.length; i++) {  
 79     sheet.addCell(new Label(i, 0,Title[i],wcf_center));  
 80    }     
 81    /** ***************以下是EXCEL正文数据********************* */  
 82    Field[] fields=null;  
 83    int i=1;  
 84    for(Object obj:listContent){  
 85        fields=obj.getClass().getDeclaredFields();  
 86        int j=0;  
 87        for(Field v:fields){  
 88            v.setAccessible(true);  
 89            Object va=v.get(obj);  
 90            if(va==null){  
 91                va="";  
 92            }  
 93            if (va instanceof Date)  
 94            {  
 95                Date date = (Date) va;  
 96                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
 97                va = sdf.format(date); 
 98            }
 99            sheet.addCell(new Label(j, i,va.toString(),wcf_left));  
100            j++;  
101        }  
102        i++;  
103    }  
104    /** **********将以上缓存中的内容写到EXCEL文件中******** */  
105    workbook.write();  
106    /** *********关闭文件************* */  
107    workbook.close();     
108   
109   } catch (Exception e) {  
110    result="系统提示:Excel文件导出失败,原因:"+ e.toString();  
111    System.out.println(result);   
112    e.printStackTrace();  
113   }  
114   return result;  
115  }  
116 }  

 

下面写一个简单的servlet类来测试导出的情况:

 1 package demo;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.PrintWriter;
 8 import java.net.MalformedURLException;
 9 import java.net.URL;
10 import java.util.ArrayList;
11 import java.util.List;
12 
13 import javax.servlet.http.HttpServlet;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 
17 
18 /**
19  * 导出excel测试
20  * @author sy
21  *
22  */
23 public class HelloServlet extends HttpServlet{
24     
25         public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
26             String result=excelPage(response);
27             System.out.println(result);
28             /*设置消息返回格式*/  
29             response.setCharacterEncoding("utf-8");  
30             response.setHeader("Pragma","No-cache");     
31             response.setHeader("Cache-Control","no-cache");     
32             response.setDateHeader("Expires",0);  
33             PrintWriter out = response.getWriter();  
34             out.print(result);   
35             out.flush();  
36             out.close();  
37     }
38     
39     /** 
40      * 导出excel 
41      * @return 
42      */  
43     public static String excelPage(HttpServletResponse response){  
44         ExportExcel excel=new ExportExcel();  
45         List<Object> li=new ArrayList<Object>(); 
46         UserInfo user=new UserInfo();
47         user.setId(0);
48         user.setName("张三");
49         user.setPassword("123456");
50         user.setBirthday(new Date());
51         li.add(user);
52         String[] Title={"姓名","年龄","爱好","描述"};  
53         return excel.exportExcel(response,"自定义表单信息.xls",Title, li);   
54     } 
55 }

 

ps:因为我写的导出工具是用于web的,传递参数中含有response,向本地测试的朋友可以自行修改下。

posted @ 2016-02-03 11:07  爱茹一婉年  阅读(373)  评论(0编辑  收藏  举报