场景:将错误描述文件内容导入到Excel的指定列;
在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * 将错误码的描述信息导入到表格中 */ public class ErrorsToExcel { //错误码文件的默认编码格式 private String defaultEncoding = "gb2312"; private String errorsXls = "errorMessage_batch_template.xls"; private String errorsSrcFile = "error-messages.properties"; //写入错误码的列 private int errorCodeIndex = 1; //要写入错误描述的表格的列 private int[] errorDescIndexs = {5,6}; /** * 将错误码的相关数据写入到给定的Excel中 */ public boolean appendErrorsToXls(){ boolean flag = true; Workbook book = null; WritableWorkbook writableWorkbook = null; try{ File excelFile = new File(errorsXls); if(!excelFile.exists()){ System.out.println("要导入的Excel模板不存在"); return false; } //获取可写入的Excel对象 book = Workbook.getWorkbook(excelFile); writableWorkbook = Workbook.createWorkbook(excelFile, book); //获取可写入的表格对象 WritableSheet targetSheet = writableWorkbook.getSheet(0); //添加数据 if(!appendDataToSheet(targetSheet)) flag = false; //将表格中的数据写入Excel中 writableWorkbook.write(); }catch(Exception e){ System.out.println("将错误码放到Excel时出错"); flag = false; }finally{ if(book!=null){ book.close(); } if(writableWorkbook!=null){ try { writableWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } } } return flag; } /** * 将数据写入到表格Sheet中 * * @param targetSheet 要写入数据的表格 * @return true表示写入成功 false表示失败 * @throws IOException */ private boolean appendDataToSheet(WritableSheet targetSheet) throws IOException{ boolean flag = true; File file = null; file = new File(errorsSrcFile); if(!file.exists()){ System.out.println("错误码源文件不存在"); return false; } //进行编码格式的转换 InputStreamReader streamReader = new InputStreamReader(new FileInputStream(file), defaultEncoding); BufferedReader reader = new BufferedReader(streamReader); String nextLine = ""; int row = 1; //处理格式 while((nextLine=reader.readLine())!=null){ String[] codeDescs = nextLine.split("="); if(codeDescs.length<=1){ //非错误码内容行 continue; } try{ //插入错误码单元格 Label codeLabel = generateLabel(errorCodeIndex-1, row, codeDescs[0]); targetSheet.addCell(codeLabel); //插入描述信息单元格 for(int j=0; j<errorDescIndexs.length; ++j ){ Label descLabel = generateLabel(errorDescIndexs[j]-1, row, codeDescs[1]); targetSheet.addCell(descLabel); } }catch(Exception e){ System.out.println("插入单元格信息出错"); } row++; } return flag; } private Label generateLabel(int col, int row, String contents){ //Label的构造函数中是列序号在前,行序号在后 return new Label(col, row, contents); } public String getErrorsXls() { return errorsXls; } public void setErrorsXls(String errorsXls) { this.errorsXls = errorsXls; } public String getErrorsSrcFile() { return errorsSrcFile; } public void setErrorsSrcFile(String errorsSrcFile) { this.errorsSrcFile = errorsSrcFile; } public static void main(String[] args){ ErrorsToExcel transformer = new ErrorsToExcel(); if(transformer.appendErrorsToXls()){ System.out.println("导入Excel成功"); }else{ System.out.println("导入Excel失败"); } } }
遇到的奇葩问题:
在Java工程中使用jxl时,一切正常。但是,日后将相应文件迁移到Spring MVC环境中使用时(且将jxl.jar加到了工程的build path中),但是加载工程时,每次调用到使用jxl的类时,都会报错jxl/write/writableCell类不存在;
解决方式:将jxl.jar放到WEB-INF/lib下解决;