• 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,向本地测试的朋友可以自行修改下。

  • 相关阅读:
    J
    I
    uva122 二叉树的实现和层次遍历(bfs)
    A
    HDU 波峰
    2239: 童年的圣诞树
    1734: 堆(DFS)
    1731: 矩阵(前缀和)
    1733: 旋转图像(模拟)
    1728: 社交网络(概率问题 组合数/排列数)
  • 原文地址:https://www.cnblogs.com/wanying521/p/5179239.html
Copyright © 2020-2023  润新知