在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/
1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import jxl.Workbook; 7 import jxl.write.Label; 8 import jxl.write.WritableSheet; 9 import jxl.write.WritableWorkbook; 10 11 /** 12 * 将错误码的描述信息导入到表格中 13 */ 14 public class ErrorsToExcel { 15 //错误码文件的默认编码格式 16 private String defaultEncoding = "gb2312"; 17 18 private String errorsXls = "errorMessage_batch_template.xls"; 19 private String errorsSrcFile = "error-messages.properties"; 20 21 //写入错误码的列 22 private int errorCodeIndex = 1; 23 //要写入错误描述的表格的列 24 private int[] errorDescIndexs = {5,6}; 25 26 /** 27 * 将错误码的相关数据写入到给定的Excel中 28 */ 29 public boolean appendErrorsToXls(){ 30 boolean flag = true; 31 32 Workbook book = null; 33 WritableWorkbook writableWorkbook = null; 34 35 try{ 36 File excelFile = new File(errorsXls); 37 if(!excelFile.exists()){ 38 System.out.println("要导入的Excel模板不存在"); 39 return false; 40 } 41 42 //获取可写入的Excel对象 43 book = Workbook.getWorkbook(excelFile); 44 writableWorkbook = Workbook.createWorkbook(excelFile, book); 45 46 //获取可写入的表格对象 47 WritableSheet targetSheet = writableWorkbook.getSheet(0); 48 49 //添加数据 50 if(!appendDataToSheet(targetSheet)) 51 flag = false; 52 53 //将表格中的数据写入Excel中 54 writableWorkbook.write(); 55 56 }catch(Exception e){ 57 System.out.println("将错误码放到Excel时出错"); 58 flag = false; 59 }finally{ 60 if(book!=null){ 61 book.close(); 62 } 63 if(writableWorkbook!=null){ 64 try { 65 writableWorkbook.close(); 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } 69 } 70 } 71 72 return flag; 73 } 74 75 /** 76 * 将数据写入到表格Sheet中 77 * 78 * @param targetSheet 要写入数据的表格 79 * @return true表示写入成功 false表示失败 80 * @throws IOException 81 */ 82 private boolean appendDataToSheet(WritableSheet targetSheet) throws IOException{ 83 boolean flag = true; 84 File file = null; 85 86 file = new File(errorsSrcFile); 87 88 if(!file.exists()){ 89 System.out.println("错误码源文件不存在"); 90 return false; 91 } 92 93 //进行编码格式的转换 94 InputStreamReader streamReader = new InputStreamReader(new FileInputStream(file), defaultEncoding); 95 BufferedReader reader = new BufferedReader(streamReader); 96 String nextLine = ""; 97 98 int row = 1; 99 100 //处理格式 101 while((nextLine=reader.readLine())!=null){ 102 String[] codeDescs = nextLine.split("="); 103 if(codeDescs.length<=1){ //非错误码内容行 104 continue; 105 } 106 107 try{ 108 //插入错误码单元格 109 Label codeLabel = generateLabel(errorCodeIndex-1, row, codeDescs[0]); 110 targetSheet.addCell(codeLabel); 111 112 //插入描述信息单元格 113 for(int j=0; j<errorDescIndexs.length; ++j ){ 114 Label descLabel = generateLabel(errorDescIndexs[j]-1, row, codeDescs[1]); 115 targetSheet.addCell(descLabel); 116 } 117 }catch(Exception e){ 118 System.out.println("插入单元格信息出错"); 119 } 120 121 row++; 122 } 123 124 return flag; 125 } 126 127 private Label generateLabel(int col, int row, String contents){ 128 //Label的构造函数中是列序号在前,行序号在后 129 return new Label(col, row, contents); 130 } 131 132 public String getErrorsXls() { 133 return errorsXls; 134 } 135 public void setErrorsXls(String errorsXls) { 136 this.errorsXls = errorsXls; 137 } 138 public String getErrorsSrcFile() { 139 return errorsSrcFile; 140 } 141 public void setErrorsSrcFile(String errorsSrcFile) { 142 this.errorsSrcFile = errorsSrcFile; 143 } 144 145 public static void main(String[] args){ 146 ErrorsToExcel transformer = new ErrorsToExcel(); 147 148 if(transformer.appendErrorsToXls()){ 149 System.out.println("导入Excel成功"); 150 }else{ 151 System.out.println("导入Excel失败"); 152 } 153 } 154 }
遇到的奇葩问题:
在Java工程中使用jxl时,一切正常。但是,日后将相应文件迁移到Spring MVC环境中使用时(且将jxl.jar加到了工程的build path中),但是加载工程时,每次调用到使用jxl的类时,都会报错jxl/write/writableCell类不存在;
解决方式:将jxl.jar放到WEB-INF/lib下解决;