Java Excel API简介
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。
现在发布的稳定版本是V2.0,提供以下功能:
从Excel 95、97、2000等格式的文件中读取数据;
读取Excel公式(可以读取Excel 97以后的公式);
生成Excel数据表(格式为Excel 97);
支持字体、数字、日期的格式化;
支持单元格的阴影操作,以及颜色操作;
修改已经存在的数据表;
现在还不支持以下功能,但不久就会提供了:
不能够读取图表信息;
可以读,但是不能生成公式,任何类型公式最后的计算值都可以读出;
应用示例
从Excel文件读取数据表
Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelUtil.java)
package com.test.jxl;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.test.model.User;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class ExcelUtil {
private static Workbook wb;
/**
*
* 方法名称:readFile
* 作者:黎青春
* 创建日期:Aug 14, 2009
* 方法描述:
* @param url
* @throws Exception void
*/
public static void readFile(String url) throws Exception{
InputStream inputStream =new FileInputStream(url);
wb = Workbook.getWorkbook(inputStream);
}
/**
*
* 方法名称:writerFile
* 作者:黎青春
* 创建日期:Aug 14, 2009
* 方法描述:
* @param url
* @throws Exception void
*/
@SuppressWarnings("static-access")
public static void writerFile(String url)throws Exception{
@SuppressWarnings("unused")
// 1: 创建Execel文件
WritableWorkbook wwb = Workbook.createWorkbook(new File(url));
// 2: 创建Excel文件 里的工作表 第一参数 是 表名字,第二参数 是 第几张表
@SuppressWarnings("unused")
WritableSheet ws =wwb.createSheet("人员信息表", 0);
// 3: 向Excel工作表里 填充数据 Lable
List<User> list =ExcelUtil.setExcelData();
@SuppressWarnings("unused")
Label [] labels ={new Label(0,0,"员工编号"),new Label(1,0,"员工姓名"),new Label(2,0,"员工Email"),new Label(3,0,"员工地址")};
for (int i = 0; i < labels.length; i++) {
ws.addCell(labels[i]);
}
for (int i = 1; i < list.size(); i++) {
ws.addCell(new Label(0,i,list.get(i-1).getId()));
ws.addCell(new Label(1,i,list.get(i-1).getUsername()));
ws.addCell(new Label(2,i,list.get(i-1).getEmail()));
ws.addCell(new Label(3,i,list.get(i-1).getAddress()));
}
wwb.write();
wwb.close();
}
/**
*
* 方法名称:getExcelData
* 作者:黎青春
* 创建日期:Aug 14, 2009
* 方法描述:
* @return List<User>
*/
public static List<User> getExcelData(){
List<User> list = new ArrayList<User>();
@SuppressWarnings("unused")
Sheet sheet =wb.getSheet(0);
// Excel的存放格式是 (列、行)
for (int i = 1; i < sheet.getRows(); i++) {
User user = new User();
user.setId(sheet.getCell(0, i).getContents());
user.setUsername(sheet.getCell(1, i).getContents());
user.setEmail(sheet.getCell(2, i).getContents());
user.setAddress(sheet.getCell(3, i).getContents());
list.add(user);
}
return list;
}
/**
* 模拟数据
*
* 方法名称:setExcelData
* 作者:黎青春
* 创建日期:Aug 14, 2009
* 方法描述:
* @return List<User>
*/
public static List<User> setExcelData(){
List<User> list = new ArrayList<User>();
for(int i=0;i<50;i++){
User user =new User();
user.setId(i+"");
user.setUsername("li"+i);
user.setEmail(i+"test"+"@163.com");
user.setAddress("北京");
list.add(user);
}
return list;
}
@Test
public static void readerExcelData(){
try {
ExcelUtil.readFile("d:/users.xls");
List<User> list = ExcelUtil.getExcelData();
for (User user : list) {
System.out.println( "username:"+user.getUsername()+" email:"+user.getEmail());
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public static void writerExcelData(){
try {
ExcelUtil.writerFile("d:/user/users.xls");
} catch (Exception e) {
e.printStackTrace();
}
}
}