Java操作Excel文件之使用JXL 学习笔记
百科上对于JXL的说明:
|
通过java操作excel表格的工具类库
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 |
前几天学习了下,总结备忘下:贴个关于Excel操作类的代码:(需要加入jxl.jar包)
/**
*
* <pre>
* MS Office Excel 文件操作对象
* 注:利用第三方包jxl.jar进行操作
* 注:暂不支持excel2007版本新格式xlsx后缀名
* 提供操作内容:
* 1.创建Excel文件
* 2.读取Excel文件
* 3.导出(写入)Excel文件
* 4.判断是否为Excel文件
* </pre>
*
* @author 陈书挺
* @create 2010-6-12
* @version v1.0
*
* <pre>
* 修改时间 修改人 修改原因
* 2010-6-12 陈书挺 新建类
* 2010-6-13 陈书挺 修改createExcel(String)方法 | 增加createExcel(String, String...)方法
* </pre>
*
*/
public class ExcelOperator {
/*
* Excel文件后缀名
*/
private static final String EXCEL_POSTFIX = ".xls";
/**
* 创建指定的文件路径的一个Excel文件<br>
* 默认创建3个工作表分别为:Sheet1|Sheet2|Sheet3<br>
* 注:只支持xls格式的文件
* @param filePath 文件路径
* @throws Exception
*/
public void createExcel(String filePath) throws Exception{
this.createExcel(filePath, "Sheet1" , "Sheet2" , "Sheet3");
}
/**
* 创建指定的文件路径的一个Excel文件,并指定工作表名<br>
* 注:只支持xls格式的文件
* @param filePath 文件路径
* @param sheetNames 工作表名数组
* @throws Exception
*/
public void createExcel(String filePath , String...sheetNames) throws Exception{
if(!this.isExcel(filePath)){
throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件");
}
File file = new File(filePath);
//工厂方法创建一个可写入的工作薄(WorkBook)
WritableWorkbook workBook = Workbook.createWorkbook(file);
//创建一个可写入的工作表(Sheet) 得到的对象为WritableSheet对象
//工作表名 工作表在工作簿中的位置
for (int i = 0; i < sheetNames.length; i++) {
workBook.createSheet(sheetNames[i], i);
}
workBook.write();
workBook.close();
}
/**
* 读取指定文件路径的Excel文件,以集合方式返回<br>
* 说明:读取所有工作表的内容
* @param filePath 文件路径
* @return List集合,List集合中的元素表示一个工作表
* List中存储String[][]数组,一个数组表示存储工作表的内容
* 返回文件中的所有内容
* @throws Exception
*/
public List<String [][]> readExcel(String filePath) throws Exception{
if(!this.isExcel(filePath)){
throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件");
}
List<String [][]> contents = new ArrayList<String[][]>();
File file = new File(filePath);
//创建工作薄
Workbook workBook = Workbook.getWorkbook(file);
//获取工作表
Sheet [] sheets = workBook.getSheets();
if(sheets!=null && sheets.length>0){
for (int i = 0; i < sheets.length; i++) {
String[][] content = this.readExcel(filePath, i);
contents.add(content);
}
}
workBook.close();
return contents;
}
/**
* 将指定内容写入指定的Excel文件,并指定相应的工作表名
* @param filePath 文件路径
* @param contents 数据内容
* @param sheetName 工作表名
* @throws Exception
*/
public void writeExcel(String filePath , String [][] contents ,String sheetName) throws Exception{
if(!this.isExcel(filePath)){
throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件");
}
File file = new File(filePath);
//工厂方法创建一个可写入的工作薄(WorkBook)
WritableWorkbook workBook = Workbook.createWorkbook(file);
WritableSheet sheet = workBook.createSheet(sheetName, 0);
for (int i = 0; i < contents.length; i++) {
for (int j = 0; j < contents[i].length; j++) {
sheet.addCell(new Label(j,i,contents[i][j]));
}
}
workBook.write();
workBook.close();
}
/**
* 将指定内容写入指定的Excel文件,并指定相应的工作表名
* @param filePath 文件路径
* @param contents 数据内容
* @param sheetName 工作表名
* @throws Exception
*/
public void writeExcel(String filePath , Vector<Vector<String>> contents , String sheetName) throws Exception{
this.writeExcel(filePath, StringUtils.toStringArray(contents), sheetName);
}
/**
* 读取指定文件路径、指定工作表索引的Excel文件
*
* @param filePath Excel文件路径
* @param sheetIndex 工作表索引 从0开始
* @return 与Excel结构相似的二维数组,二维数组中存储的是表格中的内容
* @throws Exception
*/
public String [][] readExcel(String filePath , int sheetIndex) throws Exception{
if(!this.isExcel(filePath)){
throw new Exception("文件必须是Excel文件,必须是xls格式的文件");
}
File file = new File(filePath);
//创建工作薄
Workbook workBook = Workbook.getWorkbook(file);
//获取工作表
Sheet [] sheets = workBook.getSheets();
if(sheetIndex>sheets.length-1){
throw new Exception("工作表索引["+sheetIndex+"]超出范围");
}
//获取指定工作表
Sheet sheet = sheets[sheetIndex];
//获取当前工作薄的行数
int rows = sheet.getRows();
//获取当前工作薄的列数
int columns = sheet.getColumns();
//存储Excel中的数据
String [][] content = new String[rows][columns];
this.initArrays(content);
for (int i = 0; i < rows; i++) {
//得到当前行的所有单元格
Cell [] cells = sheet.getRow(i);
if(cells!=null && cells.length>0){
for (int j= 0; j < cells.length; j++) {
String cellContent = cells[j].getContents();
content[i][j]=cellContent;
}
}
}
workBook.close();
return content;
}
/**
* 判断指定文件的路径是否是Excel文件
* @param filePath 文件的路径
* @return 是否是Excel文件
* true:是Excel文件
* false:不是Excel文件
*/
public boolean isExcel(String filePath){
//获取文件后缀名
String postfix = FileUtils.getPostfix(filePath);
if(!postfix.equals(ExcelOperator.EXCEL_POSTFIX)){
return false;
}
return true;
}
/*
* 初始化二维数组内容为""
* @param arrays 要初始化二维数组
*/
private void initArrays(String [][] arrays){
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
arrays[i][j]="";
}
}
}
}
评论 (0)