1 /**
2 * @function 文件写入: EXCEL文件3 *4 *@authorAaron.ffp5 *@versionV1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java excelWrite, 2014-11-25 16:03:35 Exp $6 *7 *@paramfilename : EXCEL文件名称8 *@paramsheetname : EXCEL文件sheet名字9 *@paramexcelData : EXCEL文件内容, 二维数组10 *11 *@returnboolean12 */
13 public boolean excelWrite(String filename, String sheetname, ArrayListexcelData){14 FileOutputStream fos; //文件输出流
15 WritableWorkbook excel; //Excel 工作薄
16 WritableSheet sheet; //Excel 工作表
17 Label label; //Excel 工作表单元格 Lable(col, row, content)
18 String[] colname; //Excel 工作表列头
19 String[] rowdata; //Excel 工作表行数据20 //long start;21 //long mid;22 //long end;
23 boolean success = false;24
25 //start = System.currentTimeMillis();
26
27 /*参数校验: 为null或空字符串时, 抛出参数非法异常*/
28 if (filename == null || "".equals(filename) || !assertFileType(filename, "EXCEL")) {29 throw newIllegalArgumentException();30 }31
32 /*若工作表名称为null或空, 则默认工作表名与工作薄名相同*/
33 if (sheetname == null || "".equals(sheetname)) {34 sheetname =filename;35 }36
37 /*Excel 最大行列校验: xls 最大行列:65536, 256; XLSX 最大行列:1048576, 16384*/
38 if (filename.endsWith(".xls") && ((excelData.size() > 65536) || (excelData.get(0).length > 256))) {39 this.message = "数据超过 " + filename + " 文件的最大行列【65536, 256】, 数据行列为【" + excelData.size() + ", " + excelData.get(0).length + "】";40 this.logger.warn(this.message);41
42 returnsuccess;43 } else if (filename.endsWith(".xlsx") && ((excelData.size() > 1048576) || (excelData.get(0).length > 16384))) {44 this.message = "数据超过 " + filename + " 文件的最大行列【1048576, 16384】, 数据行列为【" + excelData.size() + ", " + excelData.get(0).length + "】";45 this.logger.warn(this.message);46
47 returnsuccess;48 }49
50 try{51 fos = new FileOutputStream(filename); //创建文件输出流
52 excel = Workbook.createWorkbook(fos); //创建 Excel 工作薄
53 sheet = excel.createSheet(sheetname, 0); //创建 Excel 工作表
54
55 /*若数据为空, 则仅创建 Excel 文件*/
56 if (excelData.isEmpty() || excelData.size() == 0) {57 excel.write();58 excel.close();59 fos.close();60
61 success = true;62 returnsuccess;63 }64
65 /*数据不为空, 则将数据第一行默认视作列头*/
66 colname = excelData.get(0);67
68 /*写入工作表列头*/
69 for (int i = 0; i < colname.length; i++) {70 label = new Label(i, 0, colname[i], this.excelSetCellCssForColname());71 sheet.addCell(label);72 }73
74 /*遍历数组, 写入数据*/
75 for (int i = 1; i < excelData.size(); i++) { //行处理
76 rowdata =excelData.get(i);77
78 for (int j = 0; j < colname.length; j++) {//列处理
79 label = new Label(j, i, rowdata[j], this.excelSetCellCss());80 sheet.addCell(label);81 }82 }83
84 //mid = System.currentTimeMillis();
85
86 excel.write();87 excel.close();88 fos.close();89
90 //end = System.currentTimeMillis();91
92 //System.out.println("Excel {" + filename + "} 数据解析共耗时 " + (mid - start) + " s");93 //System.out.println("Excel {" + filename + "} 数据写入共耗时 " + (end - mid) + " s");94 //System.out.println("Excel {" + filename + "} 数据写入共耗时 " + (end - start) + " s");
95
96 success = true;97 } catch(FileNotFoundException fnfe) {98 this.message = "文件 {" + filename + "} 不存在!";99 this.logger.error(this.message, fnfe);100 } catch(RowsExceededException ree) {101 this.message = "文件 {" + filename + "} 写入失败!";102 this.logger.error(this.message, ree);103 } catch(WriteException we) {104 this.message = "文件 {" + filename + "} 写入失败!";105 this.logger.error(this.message, we);106 } catch(IOException ioe) {107 this.message = "文件 {" + filename + "} 写入失败!";108 this.logger.error(this.message, ioe);109 }110
111 returnsuccess;112 }
本文介绍了一个用于向EXCEL文件中写入数据的Java工具方法。该方法能够处理.xls和.xlsx两种格式,并具备基本的数据验证功能。文章详细展示了如何通过此方法创建Excel工作簿、工作表,并填充数据。

被折叠的 条评论
为什么被折叠?



