• 一个很好的通用 excel 导出工具类


    此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习。

    package oa.common.utils;
    import java.io.OutputStream;
    import java.util.List;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts2.ServletActionContext;
    import java.lang.reflect.Field;
     
    import jxl.Workbook;
    import jxl.format.Alignment;
    import jxl.format.Border;
    import jxl.format.BorderLineStyle;
    import jxl.format.VerticalAlignment;
    import jxl.write.Label;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableFont;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    /***
     * @author lsf
     */
    public class ExportExcel {
     /***************************************************************************
      * @param fileName EXCEL文件名称
      * @param listTitle EXCEL文件第一行列标题集合
      * @param listContent EXCEL文件正文数据集合
      * @return
      */
     public  final static String exportExcel(String fileName,String[] Title, List<Object> listContent) {
      String result="系统提示:Excel文件导出成功!";  
      // 以下开始输出到EXCEL
      try {    
       //定义输出流,以便打开保存对话框______________________begin
       HttpServletResponse response=ServletActionContext.getResponse();
       OutputStream os = response.getOutputStream();// 取得输出流      
       response.reset();// 清空输出流      
       response.setHeader("Content-disposition", "attachment; filename="+ new String(fileName.getBytes("GB2312"),"ISO8859-1"));
    // 设定输出文件头      
       response.setContentType("application/msexcel");// 定义输出类型    
       //定义输出流,以便打开保存对话框_______________________end
     
       /** **********创建工作簿************ */
       WritableWorkbook workbook = Workbook.createWorkbook(os);
     
       /** **********创建工作表************ */
     
       WritableSheet sheet = workbook.createSheet("Sheet1", 0);
     
       /** **********设置纵横打印(默认为纵打)、打印纸***************** */
       jxl.SheetSettings sheetset = sheet.getSettings();
       sheetset.setProtected(false);
     
     
       /** ************设置单元格字体************** */
       WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
       WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD);
     
       /** ************以下设置三种单元格样式,灵活备用************ */
       // 用于标题居中
       WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
       wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
       wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
       wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
       wcf_center.setWrap(false); // 文字是否换行
        
       // 用于正文居左
       WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
       wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条
       wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
       wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐
       wcf_left.setWrap(false); // 文字是否换行   
      
     
       /** ***************以下是EXCEL开头大标题,暂时省略********************* */
       //sheet.mergeCells(0, 0, colWidth, 0);
       //sheet.addCell(new Label(0, 0, "XX报表", wcf_center));
       /** ***************以下是EXCEL第一行列标题********************* */
       for (int i = 0; i < Title.length; i++) {
        sheet.addCell(new Label(i, 0,Title[i],wcf_center));
       }   
       /** ***************以下是EXCEL正文数据********************* */
       Field[] fields=null;
       int i=1;
       for(Object obj:listContent){
           fields=obj.getClass().getDeclaredFields();
           int j=0;
           for(Field v:fields){
               v.setAccessible(true);
               Object va=v.get(obj);
               if(va==null){
                   va="";
               }
               sheet.addCell(new Label(j, i,va.toString(),wcf_left));
               j++;
           }
           i++;
       }
       /** **********将以上缓存中的内容写到EXCEL文件中******** */
       workbook.write();
       /** *********关闭文件************* */
       workbook.close();   
     
      } catch (Exception e) {
       result="系统提示:Excel文件导出失败,原因:"+ e.toString();
       System.out.println(result); 
       e.printStackTrace();
      }
      return result;
     }
    }


  • 相关阅读:
    Nodejs 开发指南 Nodejs+Express+ejs 开发microblog开发心得
    转载 java学习注意点
    STM32f103的数电采集电路的ADC多通道采集程序
    时间复杂度与空间复杂度
    RS232串口通信详解
    实现扫码登录
    TCP/UDP区别与联系
    Tcp三次握手/四次挥手
    浅谈CSRF攻击方式
    图片淡入淡出
  • 原文地址:https://www.cnblogs.com/huangpeng1990/p/4364352.html
Copyright © 2020-2023  润新知