利用java操作Excel,有个开源的东东-jxl.jar,可以到 http://sourceforge.net/project/showfiles.php?group_id=79926下载。
下面列出他的一些编程接口:
类 | 作用 |
Workbook | 表示只读的Excel工作簿和构造Workbook的工厂类 |
WritableWorkbook | 可写的Excel工作簿 |
Sheet | 工作簿内的只读工作表 |
WritableSheet | 工作簿内的可写工作表 |
Cell | 单元格的接口,读出单元格的信息 |
WritableCell | 可写单元格的接口 |
Label | 内容为字符类型的Cell,可读可写 |
Number | 内容为数字类型的Cell,可读可写 |
DateTime | 内容为日期类型的Cell,可读可写 |
Boolean | 内容为布尔量的Cell,可读可写 |
Formula | 内容为公式类型的Cell,可读可写 |
CellFormat | 读出单元格格式化信息 |
WritableCellFormat | 设定单元格的格式化信息 |
Font | 字体的接口,读出字体的信息 |
WritableFont | 可以设定字体信息 |
一.读取Excel文件内容
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Workbook wb = Workbook.getWorkbook(File file);
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0 ,0);
// 获得第所以工作表对象
Sheet[] sheet = wb.getSheets();
//得到当前工作表的行数
int rowNum = sheet[0-sheet.length].getRows();
//得到当前行的所有单元格
Cell[] cells = sheet[0-sheet.length].getRow(0-rowNum);
//读取当前单元格的值
String cellValue = cells[0-cells.length].getContents();
//最后关闭资源,释放内存
wb.close();
二.写入Excel文件
提示
不仅可以将workbook写入到文件中,也可以将workbook写入到一个输出流中,这样就可以通过web方式来让用户下载Excel文件。写入到输出流,要调用工厂方法Workbook.createWorkbook(OutputStream os)
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
WritableWorkbook wwb = Workbook.createWorkbook(new File(String fileName));
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工
作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
//下面开始添加单元格
for(int i=0;i<10;i++){
for(int j=0;j<5;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
try {
//将生成的单元格添加到工作表中
ws.addCell(labelC);
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
三.修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,
其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
// Excel获得文件
Workbook wb = Workbook.getWorkbook( new File( " test.xls " ));
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb);
// 添加一个工作表
WritableSheet sheet = book.createSheet( " 第二页 " , 1 );
sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " ));
book.write();
book.close();
四.添加页眉页脚
/**
* 向Excel中加入页眉页脚
*
* @param dataSheet
* 待加入页眉的工作表
* @param left
* @param center
* @param right
*/
public static void setHeader(WritableSheet dataSheet, String left,
String center, String right)
{
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(left);
hf.getCentre().append(center);
hf.getRight().append(right);
// 加入页眉
dataSheet.getSettings().setHeader(hf);
// 加入页脚
dataSheet.getSettings().setFooter(hf);
}
五.往Excel中插入图片图标
/**
* 往Excel中插入图片
*
* @param dataSheet
* 待插入的工作表
* @param col
* 图片从该列开始
* @param row
* 图片从该行开始
* @param width
* 图片所占的列数
* @param height
* 图片所占的行数
* @param imgFile
* 要插入的图片文件
*/
public static void insertImg(WritableSheet dataSheet, int col, int row,
int width, int height, File imgFile)
{
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
六.格式化
//指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出
WritableFont font1 = new WritableFont(WritableFont.TIMES, 16,WritableFont.BOLD);
//使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述
WritableCellFormat format1 = new WritableCellFormat(font1);
// 把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
// 把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//使用了Label类的构造子,指定了字串被赋予那种格式
Label label = new Label(0, 0, "data 4 test", format1);
//合并单元格
//(m,n)到(p,q)的单元格全部合并
WritableSheet.mergeCells(int m,int n,int p,int q);
//行高和列宽
//指定第i+1行的高度
WritableSheet.setRowView(int i,int height);
//指定第i+1列的宽度
WritableSheet.setColumnView(int i,int width);
//格式化数字
//NumberFormats表示数字格式,预定了几种格式,象NumberFormats.INTEGER表示取整,NumberFormats.FLOAT表示小数去两位。也可以自己定义数字格式。
WritableCellFormat integerFormat = new WritableCellFormat (NumberFormats.INTEGER);
Number number2 = new Number(0, 4, 3.141519, integerFormat);
sheet.addCell(number2);
WritableCellFormat floatFormat = new WritableCellFormat (NumberFormats.FLOAT);
Number number3 = new Number(1, 4, 3.141519, floatFormat);
sheet.addCell(number3);
NumberFormat fivedps = new NumberFormat("#.#####");
WritableCellFormat fivedpsFormat = new WritableCellFormat(fivedps);
Number number4 = new Number(2, 4, 3.141519, fivedpsFormat);
sheet.addCell(number4);
//也可以定义具有某种字体的数值格式:
WritableCellFormat fivedpsFontFormat = new WritableCellFormat(times16font, fivedps);
Number number5 = new Number(3, 4, 3.141519, fivedpsFontFormat);
sheet.addCell(number5);
//格式化日期
//DateFormat表示日期格式。
Date now = Calendar.getInstance().getTime();
DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat);
DateTime dateCell = new DateTime(0, 6, now, dateFormat);
sheet.addCell(dateCell);