将List<JavaBean>中所有记录导入指定的Excel文件中
源代码:
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) {
100 if(file == null) {
101 throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
102 }
103
104 if(keySortArray == null){
105 throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
106 }
107
108 if(titleMap == null){
109 throw new IllegalArgumentException("titleMap 为 null,无法创建。");
110 }
111
112 WritableWorkbook book = null;
113 try {
114 book = Workbook.createWorkbook(file);
115 // 生成名为“第一页”的工作表,参数0表示这是第一页
116 WritableSheet sheet1 = book.createSheet("sheet1", 0);
117
118 int n = 0;
119 // 添加标题行
120 Label label = null;
121 for(Object keyObj:keySortArray) {
122 if(titleMap.containsKey(keyObj)) {
123 label = new Label(n++, 0, titleMap.get(keyObj).toString());
124 sheet1.addCell(label);
125 }
126 }
127 } catch (IOException e) {
128 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
129 + e.getMessage());
130 } catch (RowsExceededException e) {
131 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
132 + e.getMessage());
133 } catch (WriteException e) {
134 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
135 + e.getMessage());
136 }finally{
137 try{
138 book.write();
139 book.close();
140 book = null;
141 }catch (Exception e) {
142 throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
143 + e.getMessage());
144 }
145 }
146 }
147
148 /**
149 * 生成Excel内容
150 * 2010年12月21日11:01:41
151 * @param file 文件
152 * @param keySortArray 字段顺序数组
153 * @param list 数据列表
154 * @param cls 指定的Class
155 */
156 protected static void createExcelContent(File file, Object[] keySortArray,
157 Map fieldMap, List list, Class cls) {
158 if (file == null) {
159 throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
160 }
161
162 if (keySortArray == null) {
163 throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
164 }
165
166 if (fieldMap == null) {
167 throw new IllegalArgumentException("fieldMap 为 null,无法生成。");
168 }
169 if (list == null) {
170 throw new IllegalArgumentException("数据列表 为 null,无法读取数据。");
171 }
172 if (cls == null) {
173 throw new IllegalArgumentException("Class 为 null,无法进行类的映射关系。");
174 }
175
176 WritableWorkbook book = null;
177 try {
178 // Excel获得文件
179 Workbook wb = Workbook.getWorkbook(file);
180 // 打开一个文件的副本,并且指定数据写回到原文件
181 book = Workbook.createWorkbook(file,wb);
182 // 生成名为“第一页”的工作表,参数0表示这是第一页
183 WritableSheet sheet1 = book.getSheet("sheet1");
184
185 int cols = 0;
186 int rows = 1;
187 BeanWrapper bw = null;
188 Label label = null;
189 for (Object obj : list) {
190 bw = new BeanWrapperImpl(cls.cast(obj));
191 for (Object keyObj : keySortArray) {
192 if (fieldMap.containsKey(keyObj)) {
193 try{
194 label = new Label(cols++, rows, obj2Str(bw.getPropertyValue(
195 fieldMap.get(keyObj).toString())));
196 sheet1.addCell(label);
197 }catch(org.springframework.beans.NotReadablePropertyException ex) {
198 label = new Label(cols, rows, "找不到属性为'" + fieldMap.get(keyObj) + "'的方法");
199 sheet1.addCell(label);
200 }
201 }
202 }
203 cols = 0;
204 rows++;
205 }
206 } catch (IOException e) {
207 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败1:"
208 + e.getMessage());
209 } catch (RowsExceededException e) {
210 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败2:"
211 + e.getMessage());
212 } catch (WriteException e) {
213 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败3:"
214 + e.getMessage());
215 } catch (BiffException e) {
216 throw new IllegalArgumentException("源Excel文件读取失败4:"
217 + e.getMessage());
218 } finally {
219 try {
220 book.write();
221 book.close();
222 book = null;
223 } catch (Exception e) {
224 throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
225 + e.getMessage());
226 }
227 }
228 }
229
230 private static String obj2Str(Object o) {
231 if (o== null){
232 return "";
233 }
234 return o.toString();
235 }
236 }
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) {
100 if(file == null) {
101 throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
102 }
103
104 if(keySortArray == null){
105 throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
106 }
107
108 if(titleMap == null){
109 throw new IllegalArgumentException("titleMap 为 null,无法创建。");
110 }
111
112 WritableWorkbook book = null;
113 try {
114 book = Workbook.createWorkbook(file);
115 // 生成名为“第一页”的工作表,参数0表示这是第一页
116 WritableSheet sheet1 = book.createSheet("sheet1", 0);
117
118 int n = 0;
119 // 添加标题行
120 Label label = null;
121 for(Object keyObj:keySortArray) {
122 if(titleMap.containsKey(keyObj)) {
123 label = new Label(n++, 0, titleMap.get(keyObj).toString());
124 sheet1.addCell(label);
125 }
126 }
127 } catch (IOException e) {
128 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
129 + e.getMessage());
130 } catch (RowsExceededException e) {
131 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
132 + e.getMessage());
133 } catch (WriteException e) {
134 throw new IllegalArgumentException("Excel的Sheet工作簿标题写入失败:"
135 + e.getMessage());
136 }finally{
137 try{
138 book.write();
139 book.close();
140 book = null;
141 }catch (Exception e) {
142 throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
143 + e.getMessage());
144 }
145 }
146 }
147
148 /**
149 * 生成Excel内容
150 * 2010年12月21日11:01:41
151 * @param file 文件
152 * @param keySortArray 字段顺序数组
153 * @param list 数据列表
154 * @param cls 指定的Class
155 */
156 protected static void createExcelContent(File file, Object[] keySortArray,
157 Map fieldMap, List list, Class cls) {
158 if (file == null) {
159 throw new IllegalArgumentException("文件不存在,无法创建Excel表格。");
160 }
161
162 if (keySortArray == null) {
163 throw new IllegalArgumentException("keySortArray 为null,请初始化后在操作。");
164 }
165
166 if (fieldMap == null) {
167 throw new IllegalArgumentException("fieldMap 为 null,无法生成。");
168 }
169 if (list == null) {
170 throw new IllegalArgumentException("数据列表 为 null,无法读取数据。");
171 }
172 if (cls == null) {
173 throw new IllegalArgumentException("Class 为 null,无法进行类的映射关系。");
174 }
175
176 WritableWorkbook book = null;
177 try {
178 // Excel获得文件
179 Workbook wb = Workbook.getWorkbook(file);
180 // 打开一个文件的副本,并且指定数据写回到原文件
181 book = Workbook.createWorkbook(file,wb);
182 // 生成名为“第一页”的工作表,参数0表示这是第一页
183 WritableSheet sheet1 = book.getSheet("sheet1");
184
185 int cols = 0;
186 int rows = 1;
187 BeanWrapper bw = null;
188 Label label = null;
189 for (Object obj : list) {
190 bw = new BeanWrapperImpl(cls.cast(obj));
191 for (Object keyObj : keySortArray) {
192 if (fieldMap.containsKey(keyObj)) {
193 try{
194 label = new Label(cols++, rows, obj2Str(bw.getPropertyValue(
195 fieldMap.get(keyObj).toString())));
196 sheet1.addCell(label);
197 }catch(org.springframework.beans.NotReadablePropertyException ex) {
198 label = new Label(cols, rows, "找不到属性为'" + fieldMap.get(keyObj) + "'的方法");
199 sheet1.addCell(label);
200 }
201 }
202 }
203 cols = 0;
204 rows++;
205 }
206 } catch (IOException e) {
207 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败1:"
208 + e.getMessage());
209 } catch (RowsExceededException e) {
210 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败2:"
211 + e.getMessage());
212 } catch (WriteException e) {
213 throw new IllegalArgumentException("Excel的Sheet工作簿内容写入失败3:"
214 + e.getMessage());
215 } catch (BiffException e) {
216 throw new IllegalArgumentException("源Excel文件读取失败4:"
217 + e.getMessage());
218 } finally {
219 try {
220 book.write();
221 book.close();
222 book = null;
223 } catch (Exception e) {
224 throw new IllegalArgumentException("Excel文件写入失败,可能因为该文件正在被打开中:"
225 + e.getMessage());
226 }
227 }
228 }
229
230 private static String obj2Str(Object o) {
231 if (o== null){
232 return "";
233 }
234 return o.toString();
235 }
236 }
调用方法:
...
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);
....
返回结果: