您的位置:首页 > 其它

使用jxl.jar操作Excel

2014-08-19 21:26 330 查看
在工程的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下解决;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: