本篇文章主要讲的是jxl 操作Excel的三个简单的实例,一个是读取Excel表格数据,一个是 写一个新的Excel表格,最后是更新现有的Excel表格。在开始全面学习 jxl 之前,我们先看几个例子,让大家大概整体的了解一下jxl 是怎么操作Excel表的,以使之后更有兴趣,更好地学习jxl。
生成一个新的Excel表格,并向里面写入数据的顺序也是 工作簿 -- 工作表 -- 单元格。但是写入数据的顺序是反过来的,先向单元格中添加数据,然后添加到工作表上,最后写入工作簿中。这里需要注意的是,以 WritableWorkbook wb = Workbook.createWorkbook(file); 方式创建工作簿是创建了一个新的工作簿,如果file文件原来存在,那么它的数据将会失去,下一个例子将会讲解怎样更新一个Excel表格。 还有就是在工作簿关闭之前要把数据写入工作簿中,也就是 wb.write();。
读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;
- }
- }
- }