您的位置:首页 > 编程语言 > Java开发

将List<JavaBean>中所有记录导入指定的Excel文件中

2010-12-21 19:42 435 查看
源代码:

1 import java.io.File;
2 import java.io.IOException;
3 import java.util.Arrays;
4 import java.util.HashMap;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Map;
8
9 import jxl.Workbook;
10 import jxl.read.biff.BiffException;
11 import jxl.write.Label;
12 import jxl.write.WritableSheet;
13 import jxl.write.WritableWorkbook;
14 import jxl.write.WriteException;
15 import jxl.write.biff.RowsExceededException;
16
17 import org.springframework.beans.BeanWrapper;
18 import org.springframework.beans.BeanWrapperImpl;
19
20 import com.awd.bean.XsjlBean;
21
22 /**
23 * 2010年12月21日17:25:30
24 * @author Administrator
25 *
26 */
27 public class ExcelUtils {
28
29 /**
30 * 将List数据保存到Excel中
31 * 2010年12月21日17:58:22
32 * @param list 记录List
33 * @param field2TitleMap JavaBean变量和表格标题
34 * @param filePath 文件存放路径
35 * @param cls JavaBean
36 */
37 public static void saveAsToExcel(List list,Map field2TitleMap,String filePath,Class cls) {
38 if (list == null) {
39 throw new IllegalArgumentException("ListRange 未被初始化");
40 }
41 if (field2TitleMap == null) {
42 throw new IllegalArgumentException("field2TitleMap 未被初始化");
43 }
44 if (filePath == null) {
45 throw new IllegalArgumentException("filePath 未被初始化");
46 }
47 if (cls == null) {
48 throw new IllegalArgumentException("Class 未被初始化");
49 }
50
51 Object[] keySortArray = field2TitleMap.keySet().toArray();
52 Arrays.sort(keySortArray);
53
54 //javaBean变量名称Map
55 Map<Object,String> fieldMap = new HashMap<Object,String>();
56 //字段中文描述Map
57 Map<Object,String> titleMap = new HashMap<Object,String>();
58
59 //初始化字段名称与字段描述信息
60 Iterator iter = field2TitleMap.entrySet().iterator();
61 String[] valArr ;
62 Map.Entry entry;
63 Object key;
64 Object val;
65 while (iter.hasNext()) {
66 entry = (Map.Entry) iter.next();
67 key = entry.getKey();
68 val = entry.getValue();
69
70 if (val != null) {
71 valArr = (val.toString()).split("\\|");
72 if (valArr.length == 2) {
73 fieldMap.put(key, valArr[0]);
74 titleMap.put(key, valArr[1]);
75 } else {
76 fieldMap.put(key, val.toString());
77 titleMap.put(key, val.toString());
78 }
79 }
80 }
81
82 //创建Excel文件
83 File file = new File(filePath);
84
85 //创建表头
86 createExcelTitle(file, keySortArray, titleMap);
87 //生成文件内容
88 createExcelContent(file, keySortArray, fieldMap, list, cls);
89
90 }
91
92 /**
93 * 创建Excel标题行
94 * 2010年12月21日11:01:07
95 * @param file 文件
96 * @param keySortArray 字段顺序数组
97 * @param titleMap 标题Map
98 */
99 protected static void createExcelTitle(File file,Object[] keySortArray,Map titleMap) {
if(file == null) {
throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
}

if(keySortArray == null){
throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
}

if(titleMap == null){
throw new IllegalArgumentException("titleMap 为 null,无法创建。");
}

WritableWorkbook book = null;
try {
book = Workbook.createWorkbook(file);
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet1 = book.createSheet("sheet1", 0);

int n = 0;
// 添加标题行
Label label = null;
for(Object keyObj:keySortArray) {
if(titleMap.containsKey(keyObj)) {
label = new Label(n++, 0, titleMap.get(keyObj).toString());
sheet1.addCell(label);
}
}
} catch (IOException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
+ e.getMessage());
} catch (RowsExceededException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
+ e.getMessage());
} catch (WriteException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
+ e.getMessage());
}finally{
try{
book.write();
book.close();
book = null;
}catch (Exception e) {
throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
+ e.getMessage());
}
}
}

/**
* 生成Excel内容
* 2010年12月21日11:01:41
* @param file 文件
* @param keySortArray 字段顺序数组
* @param list 数据列表
* @param cls 指定的Class
*/
protected static void createExcelContent(File file, Object[] keySortArray,
Map fieldMap, List list, Class cls) {
if (file == null) {
throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
}

if (keySortArray == null) {
throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
}

if (fieldMap == null) {
throw new IllegalArgumentException("fieldMap 为 null,无法生成。");
}
if (list == null) {
throw new IllegalArgumentException("数据列表 为 null,无法读取数据。");
}
if (cls == null) {
throw new IllegalArgumentException("Class 为 null,无法进行类的映射关系。");
}

WritableWorkbook book = null;
try {
// Excel获得文件
Workbook wb = Workbook.getWorkbook(file);
// 打开一个文件的副本,并且指定数据写回到原文件
book = Workbook.createWorkbook(file,wb);
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet1 = book.getSheet("sheet1");

int cols = 0;
int rows = 1;
BeanWrapper bw = null;
Label label = null;
for (Object obj : list) {
bw = new BeanWrapperImpl(cls.cast(obj));
for (Object keyObj : keySortArray) {
if (fieldMap.containsKey(keyObj)) {
try{
label = new Label(cols++, rows, obj2Str(bw.getPropertyValue(
fieldMap.get(keyObj).toString())));
sheet1.addCell(label);
}catch(org.springframework.beans.NotReadablePropertyException ex) {
label = new Label(cols, rows, "找不到属性为'" + fieldMap.get(keyObj) + "'的方法");
sheet1.addCell(label);
}
}
}
cols = 0;
rows++;
}
} catch (IOException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败1:"
+ e.getMessage());
} catch (RowsExceededException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败2:"
+ e.getMessage());
} catch (WriteException e) {
throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败3:"
+ e.getMessage());
} catch (BiffException e) {
throw new IllegalArgumentException("源Excel文件读取失败4:"
+ e.getMessage());
} finally {
try {
book.write();
book.close();
book = null;
} catch (Exception e) {
throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
+ e.getMessage());
}
}
}

private static String obj2Str(Object o) {
if (o== null){
return "";
}
return o.toString();
}
}

调用方法:

... 1 List<XsjlBean> xsjlList = (List) page.getResult();//本人使用的Hibernate获取数据库记录的,就没有 单独写测试数据

2 Map map =new HashMap();
3 map.put("01", "xm|姓名");  //Map KEY的“01“、”02“、"03"..代表字段排列显示的顺序 ;Map value”xm|姓名“,”xm“ 表示JavaBean的变量,”姓名“表示Excel显示的标题名称;导出那些字段完全依据Map所指定的

4 map.put("02", "jsh|监室号");
5 map.put("03", "jlsjString|记录时间");
6 map.put("04", "wgqkZH|违规情况");
7 map.put("05", "clr|处理人、");
8 map.put("06", "cljgZH|处理结果");
9//另存为Excel文件

10 ExcelUtils.saveAsToExcel(xsjlList,map,"c:/abc.xls",XsjlBean.class);

....

返回结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐