jxl是一个韩国人写的java操作excel的工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
要使用jxl,需要到jxl官网地址下载jxl的jar包,现在的jxl最新版是2.6.12,下载地址:
一、写excel
拟生成一个名为"jxl.xls"的Excel文件,其中第一个工作表被命名为"sheet1",大致效果如下:
package com.jxl;
//生成Excel的类
import java.io.File;
import jxl.Cell;
import jxl.CellType;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class JxlWriteExcel {
public static void main(String args[]) {
writeExcel();
}
public static void writeExcel(){
try {
// 打开文件
WritableWorkbook workbook = Workbook.createWorkbook(
new File("e:/jxl.xls"));
// 生成名为"sheet1"的工作表,参数0表示这是第一页
WritableSheet sheet = workbook.createSheet("sheet1", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为jxl第一个标签第一行第一列
Label label = new Label(0, 0, "jxl第一个标签第一行第一列");
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
// 使用 jxl.write.Number输出数字
// 否则有语法歧义单元格位置是第二列,第一行,值为07.12
Number number = new Number(1, 0,07.12);
sheet.addCell(number);
// 写入数据并关闭文件
workbook.write();
workbook.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
二、读取excel文件
用刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:
package com.jxl;
import java.io.File;
import jxl.Cell;
import jxl.CellType;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class JxlReadExcel {
public static void main(String args[]) {
readExcel();
}
public static void readExcel(){
try{
Workbook book=Workbook.getWorkbook(new File("e:/jxl.xls"));
//获得第一个工作表对象
Sheet sheet=book.getSheet(0);
//得到列数
int colNum=sheet.getColumns();
//得到行数
int rowNum=sheet.getRows();
//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
cell1=sheet.getCell(1,0);
double numberb2 = 0;
if (cell1.getType() == CellType.LABEL)
{
LabelCell lc = (LabelCell) cell1;
result = lc.getString();
}
if (cell1.getType() == CellType.NUMBER)
{
NumberCell nc = (NumberCell) cell1;
numberb2 = nc.getValue();
}
System.out.println(numberb2);
book.close();
}catch (Exception ex) {
ex.printStackTrace();
}
}
}
三、字串格式化,设置字体、粗细、字号
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句, 为方便叙述,我们为每一行命令加了编号:
//指定了字串格式:字体为ARIAL,字号12,正常显示
WritableFont font1=new WritableFont(WritableFont.ARIAL,
12,WritableFont.NO_BOLD);
WritableCellFormat format1=new WritableCellFormat(font1);
Label label = new Label(0, 0, "jxl第一个标签第一行第一列",format1);
在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:
//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、单元格操作,设置行高,列宽,合并单元格
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、合并单元格
WritableSheet.mergeCells(intm,intn,intp,intq);
//作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheetsheet=book.createSheet("第一页",0);
//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
2、行高和列宽
WritableSheet.setRowView(int i,int height);
//作用是指定第i+1行的高度,比如:
//将第一行的高度设为100
sheet.setRowView(0,100);
WritableSheet.setColumnView(int i,int width);
//作用是指定第i+1列的宽度,比如:
//将第一列的宽度设为20
sheet.setColumnView(0,30);