当前位置:首页 > 开发 > 开源软件 > 正文

使用jxl.jar操作Excel

发表于: 2014-07-11   作者:_crazysnail_   来源:转载   浏览次数:
摘要: 场景:将错误描述文件内容导入到Excel的指定列;   在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/   import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import

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

 

 

使用jxl.jar操作Excel

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
JXL组件可从网址http://www.andykhan.com/jexcelapi/下载,下载后,将jxl.jar加入classpath,或者把j
在NPOI中,本身并不支持Chart等高级对象的创建,但通过l模板的方式可以巧妙地利用Excel强大的透视和
  在NPOI中,本身并不支持Chart等高级对象的创建,但通过l模板的方式可以巧妙地利用Excel强大的透
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file form
从官方文档中了解到:POI提供的HSSF包用于操作 Excel '97(-2007)的.xls文件,而XSSF包则用于操作Exc
项目中很多模块需要将数据导出到Excel中,简单的如导出所有的用户信息到Excel,对于导出这种数据,可
Excel Web Services(以后简称EWS)位于整个Excel Services的前端(可以参考我之前的文章)。它提供了开
Apache的POI项目为我们提供了非常方便的操作Excel以及Microsoft的其它办公软件操作. 关于java操作Ex
项目中很多模块需要将数据导出到Excel中,简单的如导出所有的用户信息到Excel,对于导出这种数据,
一、系统性学习 对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址: python操
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号