package excel3;
/**
* ClassName:ExcelReader.java
* Author: wenbin.ji
* CreateTime: Jan 28, 2011 11:16:29 AM
* Description:Excel数据读取工具类,POI实现,兼容Excel2003,及Excel2007
**/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class ExcelReader {
Workbook wb = null;
List<String[]> dataList = new ArrayList<String[]>(100);
public ExcelReader(String path){
try {
InputStream inp = new FileInputStream(path);
wb = WorkbookFactory.create(inp);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 取Excel所有数据,包含header
* List<String[]>
*/
public List<String[]> getAllData(int sheetIndex){
int columnNum = 0;
Sheet sheet = wb.getSheetAt(sheetIndex);
if(sheet.getRow(0)!=null){
columnNum = sheet.getRow(0).getLastCellNum()-sheet.getRow(0).getFirstCellNum();
}
if(columnNum>0){
for(Row row:sheet){
String[] singleRow = new String[columnNum];
int n = 0;
for(int i=0;i<columnNum;i++){
Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
switch(cell.getCellType()){
case Cell.CELL_TYPE_BLANK:
singleRow[n] = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
singleRow[n] = Boolean.toString(cell.getBooleanCellValue());
break;
//数值
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)){
singleRow[n] = String.valueOf(cell.getDateCellValue());
}else{
cell.setCellType(Cell.CELL_TYPE_STRING);
String temp = cell.getStringCellValue();
//判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
if(temp.indexOf(".")>-1){
singleRow[n] = String.valueOf(new Double(temp)).trim();
}else{
singleRow[n] = temp.trim();
}
}
break;
case Cell.CELL_TYPE_STRING:
singleRow[n] = cell.getStringCellValue().trim();
break;
case Cell.CELL_TYPE_ERROR:
singleRow[n] = "";
break;
case Cell.CELL_TYPE_FORMULA:
cell.setCellType(Cell.CELL_TYPE_STRING);
singleRow[n] = cell.getStringCellValue();
if(singleRow[n]!=null){
singleRow[n] = singleRow[n].replaceAll("#N/A","").trim();
}
break;
default:
singleRow[n] = "";
break;
}
n++;
}
if("".equals(singleRow[0])){continue;}//如果第一行为空,跳过
dataList.add(singleRow);
}
}
return dataList;
}
/**
* 返回Excel最大行index值,实际行数要加1
*/
public int getRowNum(int sheetIndex){
Sheet sheet = wb.getSheetAt(sheetIndex);
return sheet.getLastRowNum();
}
/**
* 返回数据的列数
*/
public int getColumnNum(int sheetIndex){
Sheet sheet = wb.getSheetAt(sheetIndex);
Row row = sheet.getRow(0);
if(row!=null&&row.getLastCellNum()>0){
return row.getLastCellNum();
}
return 0;
}
/**
* 获取某一行数据
* rowIndex 计数从0开始,rowIndex为0代表header行
*/
public String[] getRowData(int sheetIndex,int rowIndex){
String[] dataArray = null;
if(rowIndex>this.getColumnNum(sheetIndex)){
return dataArray;
}else{
dataArray = new String[this.getColumnNum(sheetIndex)];
return this.dataList.get(rowIndex);
}
}
/**
* 获取某一列数据
* colIndex
*/
public String[] getColumnData(int sheetIndex,int colIndex){
String[] dataArray = null;
if(colIndex>this.getColumnNum(sheetIndex)){
return dataArray;
}else{
if(this.dataList!=null&&this.dataList.size()>0){
dataArray = new String[this.getRowNum(sheetIndex)+1];
int index = 0;
for(String[] rowData:dataList){
if(rowData!=null){
dataArray[index] = rowData[colIndex];
index++;
}
}
}
}
return dataArray;
}
public static void main(String[] args) {
ExcelReader excelReader=new ExcelReader("D:\\user.xls");
List<String[]> dataList=excelReader.getAllData(0);
for (String[] data : dataList) {
System.out.println(Arrays.toString(data));
}
}
}
注:文章来源:http://blog.csdn.net/jack0511/article/details/6179593
所需jar包:
commons-logging-1.1.jar
dom4j-1.6.1.jar
geronimo-stax-api_1.0_spec-1.0.jar
junit-3.8.1.jar
log4j-1.2.13.jar
poi-3.7-20101029.jar
poi-examples-3.7-20101029.jar
poi-ooxml-3.7-20101029.jar
poi-ooxml-schemas-3.7-20101029.jar
poi-scratchpad-3.7-20101029.jar
xmlbeans-2.3.0.jar
相关推荐
在这个"poi读取excel2007和2003兼容工具例子"中,我们将探讨如何使用POI来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...
在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...
标题提到的"poi读取excel文件",指的是使用Apache POI库来处理Excel数据。在最新的版本中,POI引入了更高效和强大的功能,使得处理Excel文件变得更加方便。 描述中提到了"最新版poi相关的6个jar包",这些jar包是...
在Android平台上,使用Apache POI库来读取Excel文件是一种常见的解决方案。Apache POI是一个流行的开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在这个“android ...
读取Excel文件使用HSSF的usermodel API非常直观。首先,你需要创建一个`InputStream`,然后实例化`HSSFWorkbook`: ```java InputStream myxls = new FileInputStream("workbook.xls"); HSSFWorkbook wb = new ...
这篇博客“通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)”正是介绍了如何使用Apache POI库来处理不同版本的Excel文件。 Apache POI 提供了两个主要的API来处理Excel文件:HSSF(Horrible Spreadsheet ...
兼容03/07版Excel的功能意味着ExcelUtil支持两种主要的Excel文件格式:.xls(97-2003版本)和.xlsx(2007及以上版本)。这得益于Apache POI库的广泛支持。 总的来说,ExcelUtil通过结合反射和Apache POI库,极大地...
标题中的"poi读取excel的jar包"指的是Apache POI库的一个版本,它包含了读取Excel 2007文件所需的类和方法。在Java程序中,引入这个jar包后,开发者可以编写代码来处理.xlsx文件,无论是读取数据、解析工作表还是...
在本文中,我们将深入探讨如何使用Apache POI库来兼容读取Excel2003(.xls)和Excel2007及以上版本(.xlsx)的文件。 首先,Apache POI提供了两个主要的API来处理Excel文件:HSSF(Horrible Spreadsheet Format)...
在本文中,我们将重点讨论如何使用POI库来实现对Excel 2003和2007文件的兼容性操作。Excel 2003使用的是.BIFF(Binary Interchange File Format)格式,而Excel 2007及以上版本则引入了新的.OpenXML(.xlsx)格式,...
- POI 不支持读取 .xls 文件(Excel 97-2003 格式),除非使用 HSSFWorkbook 类,但不推荐,因为 .xlsx 格式更现代且兼容性更好。 - 处理大型文件时,要特别注意内存管理,避免因数据量过大导致 OutOfMemoryError...
"poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...
标题提到的“POI导入excel大数据处理”是指利用Apache POI进行大量Excel数据的导入操作,同时它兼容Excel 2003(.xls格式)和2007以上版本(.xlsx格式)的文件。 POI库的主要优点包括: 1. **多格式支持**:不仅...
综上所述,这个解决方案的核心是使用JSP作为前端交互界面,jspsmart处理文件上传,然后在服务器端使用POI读取Excel 2007以上的.xlsx文件,jxl处理Excel 2003及以下的.xls文件。这种组合方式确保了对不同版本Excel...
它不仅支持旧版的Excel文件格式(.xls,用于Office 2003及更早版本),还支持新版本的Excel文件格式(.xlsx,自Office 2007起)。以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍...
Java POI 是一个开源库,...因此,为了确保Java POI能够顺利读取Excel文件,开发者必须确保项目配置中包含了上述所有必要的库文件。同时,根据项目需求,可能还需要更新到最新版本的POI库,以获得更好的性能和兼容性。
通过以上步骤,你可以用Java有效地读取Excel文件,无论它们是2003的.xls格式还是2007及以后的.xlsx格式。Apache POI提供了丰富的API,允许你进行复杂的操作,如样式设置、公式计算、图表处理等,满足各种业务需求。
下面是如何使用POI读取Excel文件的基本步骤: 1.1 引入依赖 在Maven项目中,需要添加Apache POI依赖到pom.xml文件: ```xml <groupId>org.apache.poi <artifactId>poi <version>4.1.2 <groupId>org.apache....
#### 二、Java中使用POI读取Excel的关键概念 在 Java 中使用 POI 读取 Excel 文件,首先需要理解以下几个关键的概念: - **Workbook**: 表示整个 Excel 文件,可以包含一个或多个 Sheet。 - **Sheet**: 工作表,每...
以下是一个使用Apache POI读取Excel文件的基本步骤: 1. **添加依赖**:首先,在项目中引入Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.poi ...