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

java导出Excel工具类

2016-01-15 00:00 218 查看




1 package com.excel;  2
3 import java.io.FileOutputStream;  4 import java.io.IOException;  5 import java.io.OutputStream;  6 import java.util.HashSet;  7 import java.util.Map;  8 import java.util.Set;  9 import java.util.regex.Pattern;  10
11 import jxl.Workbook;  12 import jxl.write.Label;  13 import jxl.write.Number;  14 import jxl.write.NumberFormat;  15 import jxl.write.WritableCellFormat;  16 import jxl.write.WritableSheet;  17 import jxl.write.WritableWorkbook;  18 import jxl.write.WriteException;  19 import jxl.write.biff.RowsExceededException;  20
21 /**
22  * 生成excel表格  23  *  24  * @author
25  *  26  */
27 public class ExcelExportUtil {  28     /**
29  * 构造器  30  *  31      */
32     public ExcelExportUtil() {  33
34  }  35
36     /**
37  * 生成具有一定格式excel  38  *  39  * @param sheetName  40  * sheet名称,默认为sheet1  41  * @param nf  42  * 数字类型的格式 如:jxl.write.NumberFormat nf = new  43  * jxl.write.NumberFormat("#.##");默认无格式  44  * @param content  45  * 二维数组,要生成excel的数据来源  46  * @param 合并项  47  * 每一项的数据格式为0,1,0,2 即:把(0,1)和(0,2)合并--->第1列的第一、二个元素合并  48  * @param os  49  * excel输出流  50  * @param row  51  * 需要水平居中的行,默认居左。以逗号分隔的字符串  52  * @param col  53  * 需要水平居中的列,默认居左。以逗号分隔的字符串  54      */
55     public void export(String sheetName, NumberFormat nf, String[][] content,  56  String[] mergeInfo, OutputStream os, String row, String col) {  57
58         if (VerifyUtil.isNullObject(content, os) || VerifyUtil.isNull2DArray(content)) {  59             return;  60  }  61         // 默认名称
62         if (VerifyUtil.isNullObject(sheetName)) {  63             sheetName = "sheet1";  64  }  65         Set<Integer> rows = this.getInfo(row);  66         Set<Integer> cols = this.getInfo(col);  67         WritableWorkbook workbook = null;  68         try {  69             workbook = Workbook.createWorkbook(os);  70             WritableSheet sheet = workbook.createSheet(sheetName, 0);  71             for (int i = 0; i < content.length; i++) {  72                 for (int j = 0; j < content[i].length; j++) {  73                     if (content[i][j] == null) {  74                         content[i][j] = "";  75  }  76                     if (isNumber(content[i][j]) && !rows.contains(i)  77                             && !cols.contains(j)) {// 处理数字
78                         Number number = null;  79                         if (VerifyUtil.isNullObject(nf)) {// 数字无格式
80                             number = new Number(j, i,  81  Double.valueOf(content[i][j]));  82                         } else {// 如果有格式,按格式生成
83                             jxl.write.WritableCellFormat wcfn = new jxl.write.WritableCellFormat(  84  nf);  85                             number = new Number(j, i,  86  Double.valueOf(content[i][j]), wcfn);  87  }  88  sheet.addCell(number);  89                     } else {// 处理非数字
90                         WritableCellFormat format = new WritableCellFormat();  91                         if (rows.contains(i) || cols.contains(j)) {  92  format.setAlignment(jxl.format.Alignment.CENTRE);  93                         } else {  94  format.setAlignment(jxl.format.Alignment.LEFT);  95  }  96  format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  97                         Label label = new Label(j, i, content[i][j], format);  98  sheet.addCell(label);  99  } 100  } 101  } 102             this.merge(sheet, mergeInfo); 103  workbook.write(); 104         } catch (Exception e) { 105  e.printStackTrace(); 106
107         } finally { 108             try { 109  workbook.close(); 110  os.close(); 111             } catch (WriteException e) { 112                 // TODO Auto-generated catch block
113  e.printStackTrace(); 114             } catch (IOException e) { 115                 // TODO Auto-generated catch block
116  e.printStackTrace(); 117  } 118  } 119  } 120
121     /**
122  * 生成固定格式的excel,表格都为文本,水平居左,垂直居中 123  * 124  * @param sheetName 125  * sheet名称,默认为sheet1 126  * @param content 127  * 二维数组,要生成excel的数据来源 128  * @param os 129  * excel输出流 130      */
131     public void exportFormatExcel(String[][] content, String sheetName, 132  OutputStream os) { 133         if (VerifyUtil.isNullObject(content, os) || VerifyUtil.isNull2DArray(content)) { 134             return; 135  } 136         // 默认名称
137         if (VerifyUtil.isNullObject(sheetName)) { 138             sheetName = "sheet1"; 139  } 140         WritableWorkbook workbook = null; 141         try { 142             workbook = Workbook.createWorkbook(os); 143             WritableSheet sheet = workbook.createSheet(sheetName, 0); 144
145             for (int i = 0; i < content.length; i++) { 146                 for (int j = 0; j < content[i].length; j++) { 147                     if (content[i][j] == null) { 148                         content[i][j] = ""; 149  } 150                     WritableCellFormat format = new WritableCellFormat(); 151  format.setAlignment(jxl.format.Alignment.LEFT); 152  format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 153                     Label label = new Label(j, i, content[i][j], format); 154  sheet.addCell(label); 155  } 156  } 157
158  workbook.write(); 159         } catch (Exception e) { 160  e.printStackTrace(); 161
162         } finally { 163             try { 164  workbook.close(); 165             } catch (WriteException e) { 166                 // TODO Auto-generated catch block
167  e.printStackTrace(); 168             } catch (IOException e) { 169                 // TODO Auto-generated catch block
170  e.printStackTrace(); 171  } 172  } 173  } 174
175     /**
176  * 生成固定格式的excel,表格都为文本,水平居左,垂直居中 177  * 178  * @param sheetName 179  * sheet名称,默认为sheet1 180  * @param content 181  * Map,要生成excel的数据来源 182  * @param os 183  * excel输出流 184      */
185     public void exportFormatExcel(Map<String, String[][]> content, 186  String[] salary_name_array, String sheetName, OutputStream os) 187  { 188         if (VerifyUtil.isNullObject(content, os) || content.size() == 0) { 189             return; 190  } 191         // 默认名称
192         if (VerifyUtil.isNullObject(sheetName)) { 193             sheetName = "sheet1"; 194  } 195         WritableWorkbook workbook = null; 196         try { 197             workbook = Workbook.createWorkbook(os); 198             WritableSheet sheet = workbook.createSheet(sheetName, 0); 199             int index = 0; 200             for (int k = 0; k < salary_name_array.length; k++) { 201                 String[][] value = (String[][]) content 202  .get(salary_name_array[k]); 203                 if (value != null && value.length > 0) { 204                     if (index != 0) { 205                         index++; 206  } 207                     WritableCellFormat format1 = new WritableCellFormat(); 208  format1.setAlignment(jxl.format.Alignment.LEFT); 209  format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 210                     Label label1 = new Label(0, index, salary_name_array[k], 211  format1); 212  sheet.addCell(label1); 213                     for (int i = 0; i < value.length; i++) { 214                         index++; 215                         for (int j = 0; j < value[i].length; j++) { 216                             if (value[i][j] == null) { 217                                 value[i][j] = ""; 218  } 219                             WritableCellFormat format = new WritableCellFormat(); 220  format.setAlignment(jxl.format.Alignment.LEFT); 221  format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 222
223                             Label label = new Label(j, index, value[i][j], 224  format); 225  sheet.addCell(label); 226  } 227  } 228  } 229  } 230  workbook.write(); 231         } catch (Exception e) { 232  e.printStackTrace(); 233         } finally { 234             try { 235  workbook.close(); 236             } catch (WriteException e) { 237                 // TODO Auto-generated catch block
238  e.printStackTrace(); 239             } catch (IOException e) { 240                 // TODO Auto-generated catch block
241  e.printStackTrace(); 242  } 243  } 244  } 245
246     /**
247  * 合并表格 248  * @param sheet 249  * 工作表 250  * @param mergeInfo 251  * 要合并的表格的信息 252  * @throws RowsExceededException 253  * @throws NumberFormatException 254  * @throws WriteException 255      */
256     private void merge(WritableSheet sheet, String[] mergeInfo) 257             throws RowsExceededException, NumberFormatException, WriteException { 258         if (VerifyUtil.isNullObject(sheet) || VerifyUtil.isNull1DArray(mergeInfo)) { 259             return; 260         } else if (!this.isMergeInfo(mergeInfo)) { 261             return; 262         } else { 263             for (String str : mergeInfo) { 264                 String[] temp = str.split(","); 265                 sheet.mergeCells(Integer.parseInt(temp[1]), 266                         Integer.parseInt(temp[0]), Integer.parseInt(temp[3]), 267                         Integer.parseInt(temp[2])); 268  } 269  } 270  } 271
272     /**
273  * 处理要居中的行或列的数据 274  * 275  * @param indexes 276  * 行标或列标 277  * @return 行坐标或列坐标组成的集合 278      */
279     private Set<Integer> getInfo(String indexes) { 280         Set<Integer> set = new HashSet<Integer>(); 281         if (VerifyUtil.isNullObject(indexes)) { 282             return set; 283  } 284         String[] temp = indexes.split(",", 0); 285         for (String str : temp) { 286             if (isNumeric(str)) { 287  set.add(Integer.parseInt(str)); 288  } 289  } 290         return set; 291  } 292
293     /**
294  * 判断字符串是否由纯数字组成 295  * 296  * @param str 297  * 源字符串 298  * @return true是,false否 299      */
300     private boolean isNumeric(String str) { 301         if (VerifyUtil.isNullObject(str)) { 302             return false; 303  } 304         Pattern pattern = Pattern.compile("[0-9]*"); 305         return pattern.matcher(str).matches(); 306  } 307
308     /**
309  * 判断字符串是否是数字 310  * 311  * @param str 312  * 源字符串 313  * @return true是,false否 314      */
315     private boolean isNumber(String number) { 316         // 判断参数
317         if (VerifyUtil.isNullObject(number)) { 318             return false; 319  } 320         // 查看是否有小数点
321         int index = number.indexOf("."); 322         if (index < 0) { 323             return isNumeric(number); 324         } else { 325             // 如果有多个".",则不是数字
326             if (number.indexOf(".") != number.lastIndexOf(".")) { 327                 return false; 328  } 329             String num1 = number.substring(0, index); 330             String num2 = number.substring(index + 1); 331             return isNumeric(num1) && isNumeric(num2); 332  } 333  } 334
335     /**
336  * 判断合并项内容是否合法 337  * 338  * @param mergeInfo 339  * 合并项 每一项的数据格式为0,1,0,2即把(0,1)和(0,2)合并 340  * @return true合法,false非法 341      */
342     private boolean isMergeInfo(String[] mergeInfo) { 343         if (VerifyUtil.isNull1DArray(mergeInfo)) { 344             return false; 345         } else { 346             for (String str : mergeInfo) { 347                 String[] temp = str.split(","); 348                 if (VerifyUtil.isNull1DArray(temp) || temp.length != 4) { 349                     return false; 350                 } else { 351                     for (String s : temp) { 352                         if (!isNumeric(s)) { 353                             return false; 354  } 355  } 356  } 357  } 358  } 359         return true; 360  } 361
362     public static void main(String[] args) { 363         ExcelExportUtil ee = new ExcelExportUtil(); 364         String[][] content = new String[][] { { "", "第一列", null, "第三列" }, 365                 { "第一行", "aa", "2.00", "22" }, { "第二行", "bb", "3.01", "32" }, 366                 { "第三行", "cc", "4.00", "41" } }; 367         try { 368             OutputStream os = new FileOutputStream("D:/test2.xls"); 369             // ee.export(null,null, content,null, os);
370             ee.export(null, null, content, 371                     new String[] { "0,1,0,2", "1,0,3,0" }, os, "0,1", "0"); 372         } catch (Exception e) { 373             // TODO Auto-generated catch block
374  e.printStackTrace(); 375  } 376  } 377 }


ExcelExportUtil





1 package com.excel;  2
3 import java.io.OutputStream;  4 import java.util.Map;  5
6 import jxl.write.NumberFormat;  7 import jxl.write.WritableSheet;  8
9 public class VerifyUtil { 10
11     public static boolean isNullObject(String[][] content, OutputStream os) { 12         // TODO Auto-generated method stub
13         if(content != null && content.length > 0 && os != null) 14  { 15             return false; 16  } 17         return true; 18  } 19
20     public static boolean isNull2DArray(String[][] content) { 21         // TODO Auto-generated method stub
22         if(content != null && content.length > 0) 23  { 24             return false; 25  } 26         return true; 27  } 28
29     public static boolean isNullObject(NumberFormat nf) { 30         // TODO Auto-generated method stub
31         if(nf != null) 32  { 33             return false; 34  } 35         return true; 36  } 37
38     public static boolean isNullObject(String sheetName) { 39         if(sheetName != null && !"".equals(sheetName.trim())) 40  { 41             return false; 42  } 43         return true; 44  } 45
46     public static boolean isNullObject(Map<String, String[][]> content, 47  OutputStream os) { 48         // TODO Auto-generated method stub
49         if(content != null && content.size() > 0 && os != null) 50  { 51             return false; 52  } 53         return true; 54  } 55
56     public static boolean isNull1DArray(String[] mergeInfo) { 57         // TODO Auto-generated method stub
58         if(mergeInfo != null && mergeInfo.length > 0) 59  { 60             return false; 61  } 62         return true; 63  } 64
65     public static boolean isNullObject(WritableSheet sheet) { 66         // TODO Auto-generated method stub
67         if(sheet != null) 68  { 69             return false; 70  } 71         return true; 72  } 73
74 }


VerifyUtil

本文旨在学习如何用Java导出Excel,具体细节还需要进一步完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: