Java Excel API——jxl常用类

简介


Java Excel API提供了对Excel读、写、修改的方法。只要你的电脑上有Java虚拟机,就可以使用jxl。

部分特性


总的来说,jxl可以从Excel 95、97、2000、XP、2003中读取数据,可以用Excel 97或更老的版本读写,可以生成
Excel 2000格式的表格。支持多种内容格式和单元格样式,也支持很多语言。能够复制图表、插入、复制图片等。

常用类


WorkBook

· Represents a Workbook. Contains the various factory methods and provides a variety of accessors which provide access to the work sheets.

· 创建一个Workbook对象
Workbook根据传入参数不同,提供了四种类方法来返回一个WorkBook类型的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1、传入java.io.File file类型参数
File file = new File(filePath);
Workbook wb = WorkBook.getWorkbook(file);

//2、传入java.io.File file和WorkbookSettings
//WorkbookSettings是用来设置workbook的属性的,不使用它时则会使用默认的设置
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("ISO-8859-1");
Workbook wb = WorkBook.getWorkbook(file, ws);

//3、传入InputStream
InputStream is = new FileInputStream(file);
Workbook wb1 = Workbook.getWorkbook(is);

//4、传入InputStream和WorkbookSettings

Sheet

· Represents a sheet within a workbook. Provides a handle to the individual cells, or lines of cells (grouped by Row or Column)

· 创建Sheet对象,假设已经实例化了一个Workbook对象wb

1
2
3
4
5
//1、传入sheet的名字
Sheet sheet = wb.getSheet("sheet1");

//2、传入sheet的序号,从0开始
Sheet sheet = wb.getSheet(0);

· 对Sheet对象可进行的一些操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//获取sheet的行数和列数
int numberOfRow = sheet.getRows();
int numberOfCol = sheet.getColumns();

//获取某一列的CellView
CellView cv = sheet.getColumnView(0);

//CellView是用来设置或者获取Cell某些属性的,比如format和size
String backgroudColor = cv.getFormat().getBackgroundColour().getDescription();
int size = cv.getSize();

//获取sheet的名字
String sheetName = sheet.getName();

//获取sheet中图片的数量
int picNum = sheet.getNumberOfImages();

//获取某一行的CellView
CellView cv = sheet.getRowView(0);

//获取sheet的设置
SheetSettings ss = sheet.getSettings();

//SheetSettings是用来设置或者获取sheet某些属性的
//返回水平冻结的行序号,没有就是0
int frozenRowNum = ss.getHorizontalFreeze();

Cell

· Represents an individual Cell within a Sheet. May be queried for its type and its content

· 创建Cell对象,假设已经有了Sheet对象sheet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//1、根据cell内容
Cell cell1 = sheet.findCell("test");

//2、根据所给的内容、查找范围和查找的顺序(正着找还是倒着找)
Cell cell2 = sheet.findCell("test", 0, 0, 10, 1, true);

//3、根据所给的pattern、查找范围和查找的顺序
Cell cell3 = sheet.findCell(Pattern.compile("Key.*"), 0, 0, 12, 1, false);

//4、根据行、列序号
Cell cell4 = sheet.getCell(column, row);

//5、根据单元格的位置
Cell cell5 = sheet.getCell("B2");

//6、根据列号/行号,获得一列/行的单元格,得到一个Cell[]
Cell[] cells = sheet.getColumn(0);
Cell[] cells = sheet.getRow(0);

· 对Cell对象可进行的一些操作,假设已经有了Cell对象cell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//获取cell的特性
CellFeatures cf = cell.getCellFeatures();

//CellFeatures is container for any additional cell features
String cellComment = cf.getComment();
String dataValidation = cf.getDataValidationList();

//获取cell的format
CellFormat cf = cell.getCellFormat();

//format里可以获取背景色、字体等
String backgroundColor = cf.getBackgroundColour().getDescription();
String font = cf.getFont().getName();

//获取行号和列号
int colNumber = cell.getColumn();
int rowNumber = cell.getRow();

//获取单元格的内容
String contents = cell.getContents();

//获取CellType
CellType ct = cell1.getType();
String type = ct.toString();

写入Excel


· 主要是jxl.write下的一些类

WritableWorkbook

· 创建一个WritableWorkbook对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1、根据File文件创建
WritableWorkbook wwb = Workbook.createWorkbook(file);

//2、根据File的名字,和Workbook生成一份复制的对象
WritableWorkbook wwb = Workbook.createWorkbook(file, wb);

//3、根据File和WorkbookSettings
WritableWorkbook wwb = Workbook.createWorkbook(file, ws);

//4、根据File、Workbook和WorkbookSettings
WritableWorkbook wwb = Workbook.createWorkbook(file, wb, ws);

//5、根据OutputStream
WritableWorkbook wwb = Workbook.createWorkbook(os);

//还有三种是OutputStream + Workbook、OutputStream + WorkbookSettings、OutputStream + Workbook + WorkbookSettings,不再一一举例

· 对WritableWorkbook对象可进行的一些操作,假设已经有了WritableWorkbook对象wwb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//复制sheet,三个参数分别代表:要拷贝的sheet的序号/名字、新sheet的名字、新sheet的序号
wwb.copySheet(1, "test", 1);
wwb.copySheet("test", "test1", 1);

//创建sheet,传入名字和序号
wwb.createSheet(name, index);

//获取表中的sheet数量
int sheetNumber = wwb.getNumberOfSheets();

//获取表中所有sheet的名字
String[] namesOfAllSheets = wwb.getSheetNames();

//根据位置,获取特定的WritableCell
WritableCell wc = wwb.getWritableCell("Sheet1!A4");

//从另一个sheet复制一个新sheet,三个参数是:新sheet的名字、新sheet的序号、copy的sheet
WritableSheet ws = wwb.importSheet(name, index, s);

//移动一个sheet的位置,返回移动后的sheet
WritableSheet ws = wwb.moveSheet(int fromIndex, int toIndex);

//移除一个sheet
wwb.removeSheet(int index);

//设置一个新的输出文件
wwb.setOutputFile(java.io.File fileName);

//写
wwb.write();

//关
wwb.close();

WritableSheet

· 创建WritableSheet,假设有个WritableWorkbook的对象wwb

1
2
3
4
//根据序号或名字来创建,或者直接获取所有的sheet,得到一个sheet数组
WritableSheet ws = wwb.getSheet(index);
WritableSheet ws = wwb.getSheet(name);
WritableSheet[] ws = wwb.getSheets();

· 对WritableSheet的操作,假设有一个WritableSheet的对象ws

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//向sheet中添加一个WritableCell
ws.addCell(cell);

//向sheet中添加一个WritableImage
ws.addImage(image);

//获得WritableImage
WritableImage wi = ws.getImage(i);

//获取图片数量
int picNumber = ws.getNumberOfImages();

//插入一列/行
ws.insertColumn(col);
ws.insertRow(row);

//移除一列/行
ws.removeColumn(col);
ws.removeRow(row);

//移除图片
ws.removeImage(wi);

//设置列/行的格式,需要传入CellView
ws.setColumnView(col, view);
ws.setRowView(col, view);

//设置列宽、行高
ws.setColumnView(col, width);
ws.setRowView(col, height);

//设置sheet的名字
ws.setName(name);

WritableCell

· 创建WritableCell,假设已有WritableSheet对象ws

1
2
3
//根据位置或者行、列序号
WritableCell wc1 = ws.getWritableCell(loc);
WritableCell wc2 = ws.getWritableCell(column, row);

· 对WritableCell的操作,假设已有WritableCell对象wc

1
2
3
4
5
6
7
8
//深度copy一个WritableCell,得到一个新WritableCell,但是这个新cell还未被加入sheet中,col,row代表要拷贝到的位置
WritableCell wcNew = wc.copyTo(col, row);
ws.addCell(wcNew);

//设置cell的特性
WritableCellFeatures wcf = new WritableCellFeatures();
wcf.setComment("评论");
wc.setCellFeatures(wcf);

参考


上面简单列举jxl中的一些类和方法,更多请参考jxl API