<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    由于目前項(xiàng)目多個(gè)地方需要導(dǎo)出excel功能,  而之前別人寫的代碼可重用性很低, 重復(fù)代碼太多, 上周六閑著沒事, 就寫了一個(gè)通用的導(dǎo)出代碼. 只需要一個(gè)properties配置文件, 然后直接調(diào)用就可以了. 代碼如下:

    package com.founder.cms.core.util;

    import Java.io.Serializable;
    import Java.lang.reflect.Field;

    public class FieldTitle implements Serializable {

     private static final long serialVersionUID = 8641298907642008247L;
     
     private Field field; //對(duì)象屬性
     
     private String title; //excel中的列標(biāo)題

     public FieldTitle(Field field, String title) {
      this.field = field;
      this.title = title;
     }

     public Field getField() {
      return field;
     }
     
     public void setField(Field field) {
      this.field = field;
     }
     
     public String getTitle() {
      return title;
     }
     
     public void setTitle(String title) {
      this.title = title;
     }
    }
    FieldTitle類用作記錄需要導(dǎo)出的列對(duì)應(yīng)與java對(duì)象中的屬性和excel中的列標(biāo)題信息

    package com.founder.cms.core.util;

    import Java.io.IOException;
    import Java.io.InputStream;
    import Java.lang.reflect.Field;
    import Java.util.ArrayList;
    import Java.util.List;
    import Java.util.Properties;

    import org.apache.commons.lang.StringUtils;
    import org.apache.log4j.Logger;

    public class ExportConfigHelper {
     private static Logger logger = Logger.getLogger(ExportConfigHelper.class);
     
     private static final String CONFIGURATION_FILE_PREFIX = "export/";
     
     /**
      * 根據(jù)配置文件獲取需要導(dǎo)出的字段名以及列標(biāo)題
      * @param clz
      * @param configFile
      * @return
      */
     public List<FieldTitle> getFieldTitles(Class clz, String configFile) {
      String url = CONFIGURATION_FILE_PREFIX + configFile + ".properties";
      List<FieldTitle> result = new ArrayList<FieldTitle>();
      InputStream is = ExportConfigHelper.class.getClassLoader().getResourceAsStream(url);
      if (is == null) {
       throw new RuntimeException("Cannot find Configuration file " + url);
      }
      
      Properties properties = new Properties();
      Field[] fields = clz.getDeclaredFields();
      try {
       properties.load(is);
       for (Field field : fields) {
        String title = properties.getProperty(field.getName());
        if (StringUtils.isNotEmpty(title)) {
         result.add(new FieldTitle(field, title));
        }
       }
      } catch (IOException e) {
       logger.error("Read configuration file " + url, e);
       throw new RuntimeException("Read configuration file " + url, e);
      }
      
      return result;
     }
     
     
    }

    ExportConfigHelper 類用作根據(jù)屬性文件獲取需要導(dǎo)出的字段名以及對(duì)應(yīng)的列標(biāo)題.

    package com.founder.cms.core.util;

    import Java.io.IOException;
    import Java.io.OutputStream;
    import Java.io.UnsupportedEncodingException;
    import Java.text.SimpleDateFormat;
    import Java.util.List;

    import javax.servlet.http.HttpServletResponse;

    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;

    public class ExcelUtil {

     private ExcelUtil() {}
     
     /**
         * 設(shè)置頭信息
         *
         * @param response HttpServletResponse
         * @param fileName 默認(rèn)的文件名稱
         */
        public static void setExcelContentType(HttpServletResponse response, String fileName) {
            try {
                fileName = new String(fileName.getBytes("MS932"), "ISO-8859-1");
            } catch (UnsupportedEncodingException e) {
                // should no happen
            }
            response.reset();
            response.setContentType("application/msexcel;charset=MS932");
            response.setHeader("Content-disposition", "attachment;filename= " + fileName);
        }
     

        public static void write(HttpServletResponse response, List<Object> objects, Class clz, String propertiesFileName) {
         setExcelContentType(response, getFileName());
         ExportConfigHelper helper = new ExportConfigHelper();
         
         //根據(jù)properties文件獲取需要導(dǎo)出的字段名以及在excel中的標(biāo)題名稱
      List<FieldTitle> result = helper.getFieldTitles(clz, propertiesFileName);
      
      WritableWorkbook wwbook =  null;
      OutputStream os = null;
      try {
       os = response.getOutputStream();
       wwbook = jxl.Workbook.createWorkbook(os);
       WritableSheet wsheet = wwbook.createSheet("sheet1", 0);// set sheet
       for (int i = 0; i < result.size(); i++) { //set header title
        jxl.write.Label titleCell = new jxl.write.Label(i, 0, result.get(i).getTitle());
        wsheet.addCell(titleCell);
       }
       for (int i = 1; i <= objects.size(); i++) { // set value
        Object obj = objects.get(i-1);
        for(int j = 0; j < result.size(); j++) {
         result.get(j).getField().setAccessible(true);
         Object value = result.get(j).getField().get(obj);
         jxl.write.Label valueCell = new jxl.write.Label(j, i, ( value != null)? value.toString() : "");
         wsheet.addCell(valueCell);
        }
       }
       wwbook.write();
      } catch (IOException e) {
       e.printStackTrace();
      } catch (RowsExceededException e) {
       e.printStackTrace();
      } catch (WriteException e) {
       e.printStackTrace();
      } catch (IllegalArgumentException e) {
       e.printStackTrace();
      } catch (IllegalAccessException e) {
       e.printStackTrace();
      }finally {
       try {
        wwbook.close();
        os.close();
       } catch (IOException ie) {
        ie.printStackTrace();
       } catch (WriteException e) {
        e.printStackTrace();
       }
      }
        }
       
        public static String getFileName() {
         SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmm");
            StringBuilder sb = new StringBuilder();
            sb.append(sf.format(System.currentTimeMillis()));
            sb.append(".xls");
            return sb.toString();
        }
    }


    ExcelUtil 類是最終實(shí)現(xiàn)寫excel文件功能.

    屬性文件配置如下:
    id=ID
    name=Name
    age=Age
    #email=Email
    posted on 2009-06-22 15:16 周銳 閱讀(2547) 評(píng)論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲精品成人片在线观看精品字幕 | 久久亚洲国产成人精品性色| h视频免费高清在线观看| 国产成人精品男人免费| 亚洲高清视频在线| 成人免费毛片观看| 亚洲人成未满十八禁网站| 女人被免费视频网站| 国产成人精品日本亚洲语音| 国产一级做a爱免费视频| 日韩在线视精品在亚洲| 亚洲成a人片在线观看老师| 免费人妻精品一区二区三区| 亚洲真人日本在线| a级毛片免费全部播放无码| 亚洲天堂一区二区| 91精品国产免费久久久久久青草| 亚洲三级视频在线观看| 成人激情免费视频| 韩国亚洲伊人久久综合影院| 亚洲另类少妇17p| 精品在线免费观看| 亚洲国产成人99精品激情在线| 免费精品一区二区三区在线观看| 国产亚洲男人的天堂在线观看 | 亚洲一区二区三区丝袜| 国产麻豆剧传媒精品国产免费| 大片免费观看92在线视频线视频 | 亚洲婷婷在线视频| 日韩一区二区在线免费观看| 四虎影视久久久免费| 亚洲av丰满熟妇在线播放| 黄页网站在线观看免费高清| 春暖花开亚洲性无区一区二区| 久久青青草原亚洲AV无码麻豆 | 在线A级毛片无码免费真人| 免费人成大片在线观看播放| 无码久久精品国产亚洲Av影片| 24小时日本在线www免费的| 国产精品高清免费网站| 亚洲欧洲尹人香蕉综合|