您的位置:首页 > 其它

jxl.jar新建读取编辑Excel.xls

2016-12-11 16:39 274 查看
今日工作需要, 用java写了点代码操作excel文件.

通过网上的资源, 有两个开源的插件可用.  jxl.jar(只能操作excel.xls不支持excel.xlsx)和 poi.jar(支持excel.xls和excel.xlsx,  还支持word文件.)

这次我用的是jxl.jar. 简单的使用学起来很快. 附上api传送门http://jexcelapi.sourceforge.net/resources/javadocs/current/docs/

jxl.jar完美体现了面向对象的思想.简单列举几个常用类和接口

Workbook--对应一个excel文件

Sheet--对应一个sheet工作簿

Cell--对应一个cell单元格, 大多数编码工作都是围绕cell进行, 因为cell单元格是excel的最小编辑单位(自认为)嘛~

不说了,下面附上代码.

/**
* @description Jxl.jar操作excel.xls文件
* @author huangjc
* @date 2016年12月11日 16:32:50
*/
package util;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class ExcelUtilByJxl {

public static void main(String[] args) throws Exception {
createXl("F:/javaTraining/newXls01.xls");
readXl("F:/javaTraining/newXls01.xls");
editXl("F:/javaTraining/newXls01.xls");
}

// 新建excel
public static void createXl(String xlPath) {
System.out.println("--------------------开始新建并写入一个newXls01.xls--------------------");
File file = new File(xlPath);
WritableWorkbook workbook = null;
WritableSheet sheet = null;
try {
workbook = Workbook.createWorkbook(file);// Creates a writable workbook with the given file name,这里会在磁盘上生成一个file文件
sheet = workbook.createSheet("sheet0", 0);// 新建第一个sheet
// 第0行表头, 行规定从第0行开始
sheet.addCell(new Label(0, 0, "plyNo保单号"));// Label(列,行,内容)
sheet.addCell(new Label(1, 0, "payType请款类型"));
// 内容从第1行开始
for (int row = 1; row < 21; row++) {
for (int col = 0; col < 2; col++) {// 每行2列, 列规则是从第0列开始
if (col == 0)
sheet.addCell(new Label(col, row, "plyNo" + row));// 向sheet中添加cell单元格
if (col == 1)
sheet.addCell(new Label(col, row, "payType" + row));
}
}
workbook.write();// Writes out the data held in this workbook in Excel format

} catch (Exception e) {
e.printStackTrace();
} finally {
// 使用完后,记得关闭workbook
if (workbook != null) {
// 漏写的话, excel文件内容为空!!
try {
workbook.close();
} catch (WriteException | IOException e) {
e.printStackTrace();
}// 关闭workbook释放内存,内容才会被写入到磁盘上的excel文件.
}

System.out.println("--------------------结束新建并写入一个newXls01.xls--------------------");
}
}

// 读excel
public static void readXl(String xlPath) {
System.out.println("--------------------开始读excel--------------------");
File file = new File(xlPath);
Workbook workbook = null;
Sheet sheet = null;
Cell cell = null;

try {
workbook = Workbook.getWorkbook(file);
sheet = workbook.getSheet(0);// 根据sheet排序取第0个sheet
// sheet = workbook.getSheet("sheet0");//根据sheet名字取名为"sheet0"的sheet
cell = sheet.getCell(0, 0);// 标题00
String header00 = cell.getContents();// 取标题00位置的内容
cell = sheet.getCell(1, 0);// 标题10
String header10 = cell.getContents();// 取标题00位置的内容
System.out.println("标题为:" + header00 + "----" + header10);
for (int row = 1; row < 21; row++) {
String content0 = null;
String content1 = null;
for (int col = 0; col < 2; col++) {
if (col == 0) {
cell = sheet.getCell(col, row);
content0 = cell.getContents();
} else if (col == 1) {
cell = sheet.getCell(col, row);
content1 = cell.getContents();
}
}
System.out.println("第" + row + "行:" + content0 + "----" + content1);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
workbook.close();// 关闭workbook释放内存
System.out.println("--------------------结束读excel--------------------");
}
}

// 写excel
public static void writeXl(String xlPath) {

}

// 编辑excel
public static void editXl(String xlPath) {
System.out.println("--------------------开始编辑excel--------------------");
File file = new File(xlPath);
Workbook workbook = null;
WritableWorkbook wtbook = null;
WritableSheet wtSheet = null;
WritableCell wtCell = null;
String cellStr = null;
String cellConts = null;
try {
workbook = Workbook.getWorkbook(file);
// jxl.Workbook 对象是只读的,所以如果要修改Excel,需要创建一个可写的副本,副本指向原Excel文件(即下面的new File(excelpath))
wtbook = Workbook.createWorkbook(file, workbook);
wtSheet = wtbook.getSheet(0);
wtCell = wtSheet.getWritableCell(0, 0);
if (wtCell.getType() == CellType.LABEL) {// 文本类型

/*********Label类更新单元格cell内容*********/
cellStr = ((Label) wtCell).getString();// 获取单元格cell内容
System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改前:" + cellStr);
//直接指定更新cell内容
((Label) wtCell).setString("newHeader00");// 修改单元格cell内容
cellStr = ((Label) wtCell).getString();// 获取单元格cell内容
System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改后:" + cellStr);
/*********Label类更新单元格cell内容*********/

/*********sheet.addCell()覆盖添加 以更新单元格cell内容*********/
cellConts = wtCell.getContents();
System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改前:" + cellConts);
CellFormat cf = wtCell.getCellFormat();//获取第一个单元格的格式
Label lbl = new Label(wtCell.getColumn(), wtCell.getRow(), "newHeader00");//新建一个Label,坐标与将要修改的Cell一模一样
lbl.setCellFormat(cf);//将修改后的单元格的格式设定成跟原来一样
//通过覆盖添加实现更新cell内容
wtSheet.addCell(lbl);//把Label覆盖添加到Sheet将要修改的同样坐标位置的Cell
wtCell = wtSheet.getWritableCell(0, 0);//这里要重新获取一下cell对象,否则下面的cellConts = wtCell.getContents(); 还是原来的cell对象
cellConts = wtCell.getContents();// 获取单元格cell内容
System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改后:" + cellConts);
/*********sheet.addCell()覆盖添加 以更新单元格cell内容*********/
}

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
wtbook.write();
} catch (IOException e) {
e.printStackTrace();
}
try {
wtbook.close();
} catch (WriteException | IOException e) {
e.printStackTrace();
}

workbook.close();
System.out.println("--------------------结束编辑excel--------------------");
}
}
}


----------------------下面是控制台打出的日志---------------------------

--------------------开始新建并写入一个newXls01.xls--------------------
--------------------结束新建并写入一个newXls01.xls--------------------
--------------------开始读excel--------------------
标题为:plyNo保单号----payType请款类型
第1行:plyNo1----payType1
第2行:plyNo2----payType2
第3行:plyNo3----payType3
第4行:plyNo4----payType4
第5行:plyNo5----payType5
第6行:plyNo6----payType6
第7行:plyNo7----payType7
第8行:plyNo8----payType8
第9行:plyNo9----payType9
第10行:plyNo10----payType10
第11行:plyNo11----payType11
第12行:plyNo12----payType12
第13行:plyNo13----payType13
第14行:plyNo14----payType14
第15行:plyNo15----payType15
第16行:plyNo16----payType16
第17行:plyNo17----payType17
第18行:plyNo18----payType18
第19行:plyNo19----payType19
第20行:plyNo20----payType20
--------------------结束读excel--------------------
--------------------开始编辑excel--------------------
单元格cell(0,0)修改前:plyNo保单号
单元格cell(0,0)修改后:newHeader00
单元格cell(0,0)修改前:newHeader00
单元格cell(0,0)修改后:newHeader00
--------------------结束编辑excel--------------------


网上很多博客和栗子, 使用过程中, 先看别人的博客, 再参照API, API内容不多,很容易懂.

写博客为自己留个印记, 也为方便同行需要的时间可以搜到我的经验以作参考.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: