`

使用jxl.jar操作Excel

阅读更多

场景:将错误描述文件内容导入到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下解决;

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics