将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 }

 

 

调用方法:

  ...

 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);

.... 

 

 

返回结果:

 


 

 

posted @ 2010-12-21 19:42  易木  阅读(1574)  评论(0编辑  收藏  举报