importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importorg.apache.poi.hssf.usermodel.HSSFCell;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;/***
* @描述:测试excel读取
*
* 导入的jar包
*
* poi-3.8-beta3-20110606.jar
*
* poi-ooxml-3.8-beta3-20110606.jar
*
* poi-examples-3.8-beta3-20110606.jar
*
* poi-excelant-3.8-beta3-20110606.jar
*
* poi-ooxml-schemas-3.8-beta3-20110606.jar
*
* poi-scratchpad-3.8-beta3-20110606.jar
*
* xmlbeans-2.3.0.jar
*
* dom4j-1.6.1.jar
*
* jar包官网下载地址:http://poi.apache.org/download.html*
* 下载poi-bin-3.8-beta3-20110606.zipp
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15*/
public classreadExcel
{/**总行数*/
private int totalRows = 0;/**总列数*/
private int totalCells = 0;/**错误信息*/
privateString errorInfo;/**构造方法*/
publicreadExcel()
{
}/***
* @描述:得到总行数
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15
*
* @参数:@return*
* @返回值:int*/
public intgetTotalRows()
{returntotalRows;
}/***
* @描述:得到总列数
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15
*
* @参数:@return*
* @返回值:int*/
public intgetTotalCells()
{returntotalCells;
}/***
* @描述:得到错误信息
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15
*
* @参数:@return*
* @返回值:String*/
publicString getErrorInfo()
{returnerrorInfo;
}/***
* @描述:验证excel文件
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15
*
* @参数:@paramfilePath 文件完整路径
*
* @参数:@return*
* @返回值:boolean*/
public booleanvalidateExcel(String filePath)
{/**检查文件名是否为空或者是否是Excel格式的文件*/
if (filePath == null || !(WDWUtil.isExcel2003(filePath) ||WDWUtil.isExcel2007(filePath)))
{
errorInfo= "文件名不是excel格式";return false;
}/**检查文件是否存在*/File file= newFile(filePath);if (file == null || !file.exists())
{
errorInfo= "文件不存在";return false;
}return true;
}/***
* @描述:根据文件名读取excel文件
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:27:15
*
* @参数:@paramfilePath 文件完整路径
*
* @参数:@return*
* @返回值:List*/
public List>read(String filePath)
{
List> dataLst = new ArrayList>();
InputStream is= null;try{/**验证文件是否合法*/
if (!validateExcel(filePath))
{
System.out.println(errorInfo);return null;
}/**判断文件的类型,是2003还是2007*/
boolean isExcel2003 = true;if(WDWUtil.isExcel2007(filePath))
{
isExcel2003= false;
}/**调用本类提供的根据流读取的方法*/File file= newFile(filePath);
is= newFileInputStream(file);
dataLst=read(is, isExcel2003);
is.close();
}catch(Exception ex)
{
ex.printStackTrace();
}finally{if (is != null)
{try{
is.close();
}catch(IOException e)
{
is= null;
e.printStackTrace();
}
}
}/**返回最后读取的结果*/
returndataLst;
}/***
* @描述:根据流读取Excel文件
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:40:15
*
* @参数:@paraminputStream
*
* @参数:@paramisExcel2003
*
* @参数:@return*
* @返回值:List*/
public List> read(InputStream inputStream, booleanisExcel2003)
{
List> dataLst = null;try{/**根据版本选择创建Workbook的方式*/Workbook wb= null;if(isExcel2003)
{
wb= newHSSFWorkbook(inputStream);
}else{
wb= newXSSFWorkbook(inputStream);
}
dataLst=read(wb);
}catch(IOException e)
{
e.printStackTrace();
}returndataLst;
}/***
* @描述:读取数据
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:50:15
*
* @参数:@paramWorkbook
*
* @参数:@return*
* @返回值:List>*/
private List>read(Workbook wb)
{
List> dataLst = new ArrayList>();/**得到第一个shell*/Sheet sheet= wb.getSheetAt(0);/**得到Excel的行数*/
this.totalRows =sheet.getPhysicalNumberOfRows();/**得到Excel的列数*/
if (this.totalRows >= 1 && sheet.getRow(0) != null)
{this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}/**循环Excel的行*/
for (int r = 0; r < this.totalRows; r++)
{
Row row=sheet.getRow(r);if (row == null)
{continue;
}
List rowLst = new ArrayList();/**循环Excel的列*/
for (int c = 0; c < this.getTotalCells(); c++)
{
Cell cell=row.getCell(c);
String cellValue= "";if (null !=cell)
{//以下是判断数据的类型
switch(cell.getCellType())
{case HSSFCell.CELL_TYPE_NUMERIC: //数字
cellValue = cell.getNumericCellValue() + "";break;case HSSFCell.CELL_TYPE_STRING: //字符串
cellValue =cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_BOOLEAN: //Boolean
cellValue = cell.getBooleanCellValue() + "";break;case HSSFCell.CELL_TYPE_FORMULA: //公式
cellValue = cell.getCellFormula() + "";break;case HSSFCell.CELL_TYPE_BLANK: //空值
cellValue = "";break;case HSSFCell.CELL_TYPE_ERROR: //故障
cellValue = "非法字符";break;default:
cellValue= "未知类型";break;
}
}
rowLst.add(cellValue);
}/**保存第r行的第c列*/dataLst.add(rowLst);
}returndataLst;
}/***
* @描述:main测试方法
*
* @时间:2012-08-29 下午17:12:15
*
* @参数:@paramargs
*
* @参数:@throwsException
*
* @返回值:void*/
public static void main(String[] args) throwsException
{
readExcel poi= newreadExcel();//List> list = poi.read("d:/aaa.xls");
List> list = poi.read("d:/1.xlsx");if (list != null)
{for (int i = 0; i < list.size(); i++)
{
System.out.print("第" + (i) + "行");
List cellList =list.get(i);for (int j = 0; j < cellList.size(); j++)
{//System.out.print(" 第" + (j + 1) + "列值:");
System.out.print(" " +cellList.get(j));
}
System.out.println();
}
}
}
}/***
* @描述:工具类
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:30:40*/
classWDWUtil
{/***
* @描述:是否是2003的excel,返回true是2003
*
* @作者:建宁
*
* @时间:2012-08-29 下午16:29:11
*
* @参数:@paramfilePath 文件完整路径
*
* @参数:@return*
* @返回值:boolean*/
public static booleanisExcel2003(String filePath)
{return filePath.matches("^.+\\.(?i)(xls)$");
}/***
* @描述:是否是2007的excel,返回true是2007
*
*
*
* @参数:@paramfilePath 文件完整路径
*
* @参数:@return*
* @返回值:boolean*/
public static booleanisExcel2007(String filePath)
{return filePath.matches("^.+\\.(?i)(xlsx)$");
}
}