java 获取excel文件版本_Java读取Excel 兼容2007以上以及2003版本

这是一个Java程序,用于读取Excel文件,兼容2007和2003版本。通过Apache POI库,程序能识别文件类型并正确读取数据,包括获取总行数和总列数。
摘要由CSDN通过智能技术生成

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)$");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android 使用poi读取版本excel, 解决以下这两个错误 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLEventFactory; at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149) javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.events.XMLEventFactoryImpl not found at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.XMLEventFactory.newInstance(Unknown Source) at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值