本篇文章主要讲的是jxl 操作Excel的三个简单的实例,一个是读取Excel表格数据,一个是 写一个新的Excel表格,最后是更新现有的Excel表格。在开始全面学习 jxl 之前,我们先看几个例子,让大家大概整体的了解一下jxl 是怎么操作Excel表的,以使之后更有兴趣,更好地学习jxl。
读Excel表格数据:
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
*
* @author yrs
*/
public class TRead {
public static void read (Workbook book) {
int rows;
//得到Excel中工作表数
int sheetNumber = book.getNumberOfSheets();
//得到每个表的名称
String [] sheetNameList = book.getSheetNames();
//得到每个工作表
Sheet [] sheetList = book.getSheets();
//遍历每个单元格,得到单元格的内容,并输出。注意得到单元格的内容是以字符串形式返回的。
for(int i = 0;i < sheetNumber;i++) {
System.out.println("############## " + sheetNameList[i] + " ##############");
//得到该工作表中数据的行数
rows = sheetList[i].getRows();
for(int j = 0;j < rows;j++) {
//得到每一行的单元格
Cell [] cellList = sheetList[i].getRow(j);
for (Cell cell : cellList) {
System.out.print(cell.getContents() + " ");
}
System.out.println();
}
}
}
public static void main(String [] args) throws IOException, BiffException {
try {
//文件D://JEtest//read.xls 要存在,并且含有数据。
File file = new File("D://JEtest//read.xls");
//得到工作簿
Workbook book = Workbook.getWorkbook(file);
TRead.read(book);
book.close();
}catch (IOException | BiffException e) {
System.out.println("Exception: " + e);
throw e;
}
}
}
读Excel表格的步奏是:工作簿--》工作表--》单元格。 当然有时候对数据经行处理要知道数据的格式,这个要在取得单元格的时候对它进行数据类型的判断,然后再转化成相应的类型,从而得到原数据类型的值。关于数据类型会在之后的文章中介绍。
生成一个新的Excel表格,并向里面写数据:
import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.Boolean;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
*
* @author yrs
*/
public class TWrite {
public static void write(WritableWorkbook wb) throws WriteException {
WritableSheet wSheet = wb.createSheet("sheet1", 0);
//添加Label对象
Label labelC = new Label(0, 0, "Label cell");
wSheet.addCell(labelC);
//添加Number对象
Number numberC = new Number(0, 1, 3.1415926);
wSheet.addCell(numberC);
// 3.添加Boolean对象
Boolean booleanC = new Boolean(0, 2, true);
wSheet.addCell(booleanC);
// 4.添加DateTime对象
DateTime dateTimeC = new DateTime(0, 3, new java.util.Date());
wSheet.addCell(dateTimeC);
// 添加带有字型Formatting的对象
WritableFont wFont = new WritableFont(
WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableCellFormat wCellFormatC = new WritableCellFormat(wFont);
Label labelCF = new Label(1, 0, "Label Cell", wCellFormatC);
wSheet.addCell(labelCF);
// 添加带有formatting的Number对象
NumberFormat nFormat = new NumberFormat("#.##");
WritableCellFormat wCellFormatN = new WritableCellFormat(nFormat);
Number numberNF = new Number(1, 1, 3.1415926, wCellFormatN);
wSheet.addCell(numberNF);
// 添加带有formatting的DateFormat对象
DateFormat dFormat = new DateFormat(
"yyyy MM dd hh:mm:ss");
WritableCellFormat wCellFormatD = new WritableCellFormat(dFormat);
DateTime dateTimeDF = new DateTime(1, 3, new java.util.Date(), wCellFormatD);
wSheet.addCell(dateTimeDF);
}
public static void main(String [] args) throws IOException, BiffException, WriteException {
try {
//文件D://JEtest//read.xls 不存在,若存在数据将会丢失
File file = new File("D://JEtest//write.xls");
//创建一个新的可写工作簿
WritableWorkbook wb = Workbook.createWorkbook(file);
TWrite.write(wb);
// 写入Exel工作表
wb.write();
// 关闭Excel工作薄对象
wb.close();
}catch (IOException | WriteException e) {
System.out.println("Exception: " + e);
throw e;
}
}
}
生成一个新的Excel表格,并向里面写入数据的顺序也是 工作簿 -- 工作表 -- 单元格。但是写入数据的顺序是反过来的,先向单元格中添加数据,然后添加到工作表上,最后写入工作簿中。这里需要注意的是,以 WritableWorkbook wb = Workbook.createWorkbook(file); 方式创建工作簿是创建了一个新的工作簿,如果file文件原来存在,那么它的数据将会失去,下一个例子将会讲解怎样更新一个Excel表格。 还有就是在工作簿关闭之前要把数据写入工作簿中,也就是 wb.write();。
更新Excel表格数据:
import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
*
* @author yrs
*/
public class TUpdate {
public static void update (WritableWorkbook wb) throws WriteException {
WritableSheet sheet = wb.createSheet("第二页", 1);
sheet.addCell(new Label(0,0,"第二页更新数据"));
}
public static void main(String [] args) throws IOException, BiffException, WriteException {
try {
//文件D://JEtest//read.xls 要存在,并且含有数据。
File file = new File("D://JEtest//update.xls");
//得到工作簿
Workbook book = Workbook.getWorkbook(file);
//创建一个可写工作簿
WritableWorkbook wb = Workbook.createWorkbook(file, book);
TUpdate.update(wb);
wb.write();
wb.close();
book.close();
}catch (IOException | BiffException | WriteException e) {
System.out.println("Exception: " + e);
throw e;
}
}
}
这里需要注意的是,创建可写工作簿的方式,你也可以把 file 文件换成其他的,这样会实现复制的效果。可以自己实现一下。
好了,有了这些例子大家是不是更有兴趣学习jxl了,那就让我们一起来学吧。