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 org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.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
* @时间:2011-8-9 下午03:15:15
*/
public class WDWExcelTest {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 错误信息 */
private String errorInfo;
/** 构造方法 */
public WDWExcelTest() {
}
/**
* @描述:得到总行数
* @时间:2011-8-9 下午04:27:34
* @参数:@return
* @返回值:int
*/
public int getTotalRows() {
return totalRows;
}
/**
* @描述:得到总列数
* @时间:2011-8-9 下午04:27:45
* @参数:@return
* @返回值:int
*/
public int getTotalCells() {
return totalCells;
}
/**
* @描述:得到错误信息
* @时间:2011-8-9 下午04:28:17
* @参数:@return
* @返回值:String
*/
public String getErrorInfo() {
return errorInfo;
}
/**
* @描述:验证excel文件
* @时间:2011-8-9 下午04:06:47
* @参数:@param fileName
* @参数:@return
* @返回值:boolean
*/
public boolean validateExcel(String fileName){
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (fileName == null || !( WDWUtil.isExcel2003(fileName) || WDWUtil.isExcel2007(fileName) ) ) {
errorInfo = "文件名不是excel格式";
return false;
}
/** 检查文件是否存在 */
File file = new File(fileName);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;
}
/**
* @描述:根据文件名读取excel文件
* @时间:2011-8-9 下午03:17:45
* @参数:@param fileName
* @参数:@return
* @返回值:List
*/
public List<List<String>> read(String fileName) {
List<List<String>> dataLst = new ArrayList<List<String>>();
InputStream is = null;
try {
/** 验证文件是否合法 */
if(!validateExcel(fileName)){
System.out.println(errorInfo);
return null;
}
/** 判断文件的类型,是2003还是2007 */
boolean isExcel2003 = true;
if (WDWUtil.isExcel2007(fileName)) {
isExcel2003 = false;
}
/** 调用本类提供的根据流读取的方法 */
File file = new File(fileName);
is = new FileInputStream(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();
}
}
}
/** 返回最后读取的结果 */
return dataLst;
}
/**
* @描述:根据流读取Excel文件
* @时间:2011-8-9 下午04:12:41
* @参数:@param inputStream
* @参数:@param isExcel2003
* @参数:@return
* @返回值:List
*/
public List<List<String>> read(InputStream inputStream, boolean isExcel2003) {
List<List<String>> dataLst = null;
try {
/** 根据版本选择创建Workbook的方式 */
Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream);
dataLst = read(wb);
} catch (IOException e) {
e.printStackTrace();
}
return dataLst;
}
/**
* @描述:读取数据
* @时间:2011-8-9 下午04:37:25
* @参数:@param wb
* @参数:@return
* @返回值:List<List<String>>
*/
private List<List<String>> read(Workbook wb) {
List<List<String>> dataLst = new ArrayList<List<String>>();
/** 得到第一个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<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (short c = 0; c < this.getTotalCells(); c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (cell == null) {
rowLst.add(cellValue);
continue;
}
/** 处理Excel的字符串 */
cellValue = cell.getStringCellValue();
rowLst.add(cellValue);
}
/** 保存第r行的第c列 */
dataLst.add(rowLst);
}
return dataLst;
}
/**
* @描述:main测试方法
* @时间:2011-8-9 下午04:31:35
* @参数:@param args
* @参数:@throws Exception
* @返回值:void
*/
public static void main(String[] args) throws Exception {
WDWExcelTest poi = new WDWExcelTest();
//List<List<String>> list = poi.read("d:/aaa.xls");
List<List<String>> list = poi.read("d:/aab.xlsx");
if(list != null){
for(int i = 0, ilen = list.size(); i < ilen; i++){
System.out.println("第" + (i + 1) + "行");
List<String> cellList = list.get(i);
for(int j = 0, jlen = cellList.size(); j < jlen; j++){
System.out.print(" 第" + (j + 1) + "列值:");
System.out.println(cellList.get(j));
}
}
}
}
}
/**
* @描述:工具类
* @时间:2011-8-9 下午04:28:43
*/
class WDWUtil{
/**
* @描述:是否是2003的excel,返回true是2003
* @时间:2011-8-9 下午03:20:49
* @参数:@param fileName
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2003(String fileName){
return fileName.matches("^.+\\.(?i)(xls)$");
}
/**
* @描述:是否是2007的excel,返回true是2007
* @时间:2011-8-9 下午03:21:37
* @参数:@param fileName
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2007(String fileName){
return fileName.matches("^.+\\.(?i)(xlsx)$");
}
}
分享到:
相关推荐
通过以上步骤,你可以用Java有效地读取Excel文件,无论它们是2003的.xls格式还是2007及以后的.xlsx格式。Apache POI提供了丰富的API,允许你进行复杂的操作,如样式设置、公式计算、图表处理等,满足各种业务需求。
通过以上知识点的学习和实践,你可以掌握在Java中读取Excel文件,包括对Excel 2003和2007格式的兼容性处理。在实际应用中,可以根据需求进一步扩展功能,如写入Excel、合并单元格、格式化数据等。
【Java读取Excel兼容2003和2007】 在Java中处理Excel文件时,我们需要确保代码能够兼容Microsoft Office的两个主要版本:2003和2007。这两个版本的Excel文件格式有所不同,2003使用的是.BIFF8格式(HSSF),而2007及...
在Java编程中,读取Excel文件是一项常见的任务,特别是在数据处理和分析的场景下。Excel文件格式有多种,包括早期的.XLS(Excel 2003及更早版本)和后来的.XLSX(Excel 2007及更高版本)。为了在Java中兼容这两种...
在Java编程中,读取Excel文件是一项常见的任务,特别是在数据处理和分析的场景下。Excel文件格式有两种主要版本,即2003年的.xls格式和2007年及以后的.xlsx格式。为了兼容这两种格式,Java引入了Apache POI库,这是...
以下将详细介绍如何使用Java来读取Excel文件,同时兼容2003和2007版。 1. Apache POI 库 Apache POI 是一个开源项目,它为Microsoft Office格式提供了一个强大的API。对于Excel文件,POI提供了HSSF(Horrible ...
总结,Java读取Excel并进行数据库建库建表及生成Java实体的过程涉及了Apache POI库的使用、数据库操作和源代码生成。理解这些步骤可以帮助你有效地处理类似的任务,提高开发效率。在实际应用中,你还需要考虑错误...
在本项目中,我们关注的是“java编写的兼容2003、2007Excel文件读取工程”。这个工程的目标是实现一个Java程序,能够读取Microsoft Excel的两种主要格式:.xls(用于2003及更早版本)和.xlsx(用于2007及更高版本)...
在Java编程环境中,读取Excel文件是一项常见的任务,特别是在数据处理和分析的场景下。Excel文件格式有两种主要版本,即2003的.xls(基于BIFF格式)和2007及以后版本的.xlsx(基于OpenXML标准)。为了确保程序能够...
2. **读取Excel文件**: 使用HSSFWorkbook处理.xls文件,XSSFWorkbook处理.xlsx文件。以下是一个简单的读取示例: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss....
本篇将详细介绍如何使用Java读取Excel所有页的数据,以及可能出现的问题和解决策略。 首先,我们需要引入能够处理Excel文件的库。Apache POI 是一个广泛使用的Java API,它允许程序员创建、修改和显示Microsoft ...
在这个"poi读取excel2007和2003兼容工具例子"中,我们将探讨如何使用POI来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...
/*** * 读取Excel文件里数据... * 读取Excel的兼容性/03/07以上 * 参数一读取所需的文件对象 * 参数二自定义需要对应实体对象相关的属性 * 参数三将数据转化成对应的class实体对象 * 参数四从文档的第几行读取 */
### Java读取Excel POI方法详解 #### 一、POI简介及背景 Apache POI 是一个用于处理 Microsoft Office 格式文件的开源库,它提供了读取、写入和修改这些文件的功能。POI 项目中最常用的部分是 HSSF 和 XSSF,分别...
要读取Excel到DataTable,首先需要创建一个DataTable实例,然后遍历Excel文件中的每个工作表。对于Excel 2003,使用HSSFWorkbook,对于Excel 2007及以上,使用XSSFWorkbook。这里的关键在于,可以通过文件扩展名或...
它不仅支持旧版的Excel文件格式(.xls,用于Office 2003及更早版本),还支持新版本的Excel文件格式(.xlsx,自Office 2007起)。以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍...
本文档介绍如何使用Java语言读取Excel文件中的数据。由于文档中部分内容是通过OCR扫描而来,可能存在一些技术性识别错误和不完整情况,以下是根据提供的内容提炼的知识点整理。 首先,文档提到了读取Excel文件所需...
总结起来,Java读取Excel数据涉及的主要知识点有:Apache POI库的使用,包括`.xls`和`.xlsx`格式的处理;Android环境下的兼容性考虑,可能需要使用`jxl`库;以及如何通过Java代码遍历Excel文件的行和单元格,获取并...
综上所述,Java读取大型Excel文件涉及的关键点在于选择合适的API,采用分块读取、迭代器、错误处理、性能优化和可能的数据库集成。理解并应用这些技术将帮助你在处理大数据量的Excel文件时更加得心应手。
在本文中,我们将深入探讨如何使用Java来解析并获取Excel中的数据,同时确保兼容2003版(.xls)和2007版及以上(.xlsx)的文件格式。这两个版本的文件格式不同,因此处理方式也会有所差异。 首先,对于2003版的...