首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java施用JXL创建Excel文件

2012-09-03 
Java使用JXL创建Excel文件?????? 以前写过用jxl读取excel的,但是一直没有写出用jxl生成excel,项目中用来生

Java使用JXL创建Excel文件

?????? 以前写过用jxl读取excel的,但是一直没有写出用jxl生成excel,项目中用来生产报表的也是一个一个的赋值,然后循环的方式去生成,感觉不适用,也不方便。

?????? 这里用Java的反射机制,在生成报表文件的时候动态获取对象的属性,然后生成相应的报表文件。我这里是将要写入excel的数据信息存放在一个List中,然后通过反射机制获取与excel表头标题的的属性,与之匹配,然后写入到文件中。

?

下面就是我的具体的实现方法:

package com.lzb.common;import java.io.FileOutputStream;import java.io.OutputStream;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class JxlCreateExcel {/** * 单例模式  */private static JxlCreateExcel instance = null;public JxlCreateExcel() {};public static synchronized JxlCreateExcel getInstance() {if(instance==null)instance = new JxlCreateExcel();return instance;}/** *  * 功能描述:将生成报表文件, 单线程5w条没问题 * * @author  lizhenbin * <p>创建日期 :May 7, 2012 5:50:58 PM</p> * * @param dataList POJO要打印的数据,在list中 * @param obj POJO,属性和dataList的Object属性一致 * @param fileUrl 产生Excel文件的目录位置和名字(C:\test.xls) * @param sheetName 表页的名称 * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */public static boolean create(List<Object> dataList, Object obj, String fileUrl, String sheetName) {WritableWorkbook wwb = null;OutputStream outs = null; try {Class clazz = obj.getClass();// 构建报表POJO,必须设置都是public属性/** * 表头属性 */Field[] fields = clazz.getFields();List<Map<Object, Object>> exelist = new ArrayList<Map<Object, Object>>();Map<Object, Object> map = new HashMap<Object, Object>();for(Field f : fields) {Object key = f.getName();Object value = f.get(obj);map.put(key, value);}exelist.add(map); outs = new FileOutputStream(fileUrl);        wwb = Workbook.createWorkbook(outs);         WritableSheet sheet = wwb.createSheet(sheetName, 0);        Label label = null;;                 List<Object> titles = new ArrayList<Object>();        /**         * 构建excel表头         */        for(Iterator<Map<Object, Object>> itor = exelist.iterator(); itor.hasNext();){           Map<Object, Object> tempMap = itor.next();        Set<Object> keySet = tempMap.keySet();        int cols = 0;        for(Object s : keySet) {        label = new Label(cols, 0, (String) tempMap.get(s));        titles.add(s);        sheet.addCell(label);         cols++;        }         }                /**         * 输出的文件内容         */                int row = 1;        for(Object data : dataList) {        int col = 0;        Class dataClazz = data.getClass();        for(Object key : titles) {        Field fd = dataClazz.getField((String) key);        label = new Label(col, row, (String) fd.get(data));        sheet.addCell(label);        col++;        }        row++;                }        wwb.write();   // 写入数据         return true;} catch (Exception e) { e.printStackTrace();return false;} finally {try {              wwb.close();    // 关闭文件         outs.close();} catch (Exception e) {e.printStackTrace();return false;}}}}

?闲暇之余,自己写了一下,欢迎交流。

?

热点排行