操作excel的工具有jxl和poi2种,这里使用jxl,
两种的区别,在操作比较简单的情况下采用jxl速度快一点,(例如只读)。在操作比较复杂的情况下用poi,因为功能更强大
1,首先导入jxl.jar
2,解析工具类
package com.hl.zoneSystem_v01.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import com.hl.zoneSystem_v01.domain.Files;
import com.hl.zoneSystem_v01.domain.User;
/**
* @ClassName: ExcelUtils
* @Description: 解析批量导入用户的excel工具类
* @project: zoneSystem_v01
* @package: com.hl.zoneSystem_v01.utils
* @author: hl
* @version: V1.0
* @since: JDK 1.6.0_21
* @date: 2014-5-4 下午1:05:16
*/
public class ExcelUtils {
//log4j
public static Logger logger = Logger.getLogger(ExcelUtils.class);
//导入用户excel,行、列的起始索引
private static final int ROW_BEGIN_INDEX = 2;//开始行索引
private static final int COLUMN_END_INDEX = 5;//结束列索引
//excel表格索引列对应的user属性值
private static final String [] Propertys = {"name","uid","sex","province","city","email"};
/*
* 将上传的excel文件 解析到装有user集合的list中
*/
public static List<User> analysis2User(File file) {
//
InputStream in = null;
Workbook wb = null;
List<User>users = new ArrayList();
try{
if (file == null) {
throw new Exception("文件为空!");
}
//开始解析
in = new FileInputStream(file);
wb = Workbook.getWorkbook(in);
//获取excel文档中所有工作表
Sheet sheets[] = wb.getSheets();
if (sheets != null) {
//循环解析 循环excel中所有工作表
for (int i = 0; i < sheets.length; i++) {
User user = null;
//循环工作表中的行
for(int j=ROW_BEGIN_INDEX;j<sheets[i].getRows();j++){
user = new User();
boolean tag = true;
//循环行中的列
for(int k=0;k<=COLUMN_END_INDEX;k++){
//取得当前x、y坐标下单元格的数据
Cell cell = sheets[i].getCell(k, j);
String val = cell.getContents();
//判断是否为空,导入的数据必须完整,如行中有一列值为空,则该列数据不导入
if(val==null || "".equals(val)){
tag = false;
}else{
//利用beanutils反射,给对象属性赋值
BeanUtils.setProperty(user,Propertys[k],val);
}
logger.debug("当前单元格的值是= " + val);
}
//列循环完毕,将user放入list中
if(tag==true){
users.add(user);
}
}
}
}
return users;
}catch(Exception e){
logger.error(e);
}finally{
//关闭资源
if (wb != null) {
wb.close();
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
logger.error(e);
}
}
//删除文件
if(file != null){
file.delete();
}
}
//最后返回null
return null;
}
}
--------------------------------------------
解决jxl读取日期格式时间的问题
Cell cell = sheet0.getCell(col,row);
String cellcon="";
if(cell.getType() == CellType.DATE){
DateCell dc = (DateCell)cell;
Date date = dc.getDate();
SimpleDateFormat ds = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
cellcon = ds.format(date);
}
用以上方法,判断是否是日期类型,然后用Date获取并重新格式化 保存为字符串即可