java的poi 读取exc 文件

package lizikj.bigwheel.shop.util.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import lizikj.bigwheel.common.vo.agent.Agent;

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;

public class ReadExcelUtils {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 错误信息 */
private String errorInfo;
/**
* 验证excel文件
* @param filePath
* @return
*/
public boolean validateExcel(String filePath) {
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (filePath == null || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath))) {
errorInfo = "文件名不是excel格式";
return false;
}

/** 检查文件是否存在 */
File file = new File(filePath);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;

}
/**
* 根据文件名读取excel文件
* @param filePath
* @return
*/
public List<Agent> read(String filePath){

List<Agent> dataLst = new ArrayList<Agent>();

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 = new File(filePath);

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文件
* @param inputStream
* @param isExcel2003
* @return
*/
public List<Agent> read(InputStream inputStream, boolean isExcel2003){
List<Agent> dataLst = null;
try{

/** 根据版本选择创建Workbook的方式 */
Workbook wb = null;
if (isExcel2003){
wb = new HSSFWorkbook(inputStream);
}else{
wb = new XSSFWorkbook(inputStream);
}
dataLst = read(wb);
}catch (IOException e){
e.printStackTrace();
}
return dataLst;
}

/**
* 读取数据
* @param wb
* @return
*/
private List<Agent> read(Workbook wb){
List<Agent> dataLst = new ArrayList<Agent>();

/** 得到第一个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();
}
Agent agent = null;
/** 循环Excel的行 */
for (int r = 1; r < this.totalRows; r++) {
Row hssfRow = sheet.getRow(r);
if (hssfRow == null){
continue;
}
agent = new Agent();
Cell name = hssfRow.getCell(0);
Cell pname = hssfRow.getCell(1);
Cell cname = hssfRow.getCell(2);
Cell rname = hssfRow.getCell(3);
Cell address = hssfRow.getCell(4);
Cell contact = hssfRow.getCell(5);
Cell mobile = hssfRow.getCell(6);
Cell companyName = hssfRow.getCell(7);
agent.setParentAgentId(0);
agent.setAgentName(getValue(name));
agent.setAgentRole("K1");
agent.setProvinceId(getValue(pname));
agent.setCityId(getValue(cname));
agent.setRegionId(getValue(rname));
agent.setContact(getValue(contact));
agent.setAddress(getValue(address));
agent.setMobile(getValue(mobile));
agent.setContactName(getValue(contact));
agent.setCompanyName(getValue(companyName));
dataLst.add(agent);
}

return dataLst;

}

@SuppressWarnings("static-access")
private String getValue(Cell hssfCell) {
DecimalFormat df = new DecimalFormat("#");
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
// 返回布尔类型的值
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
// 返回数值类型的值
return String.valueOf(df.format(hssfCell.getNumericCellValue()));
} else {
// 返回字符串类型的值
return String.valueOf(hssfCell.getStringCellValue());
}
}
}

class WDWUtil {

/**
* 是否是2003的excel,返回true是2003
* @param filePath
* @return
*/
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}

/**
* 是否是2007的excel,返回true是2007
* @param filePath
* @return
*/
public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}

}

来自:http://blog.csdn.net/maxu12345/article/details/47977811

http://blog.csdn.net/mmm333zzz/article/details/7962377

http://www.cnblogs.com/hongten/p/java_poi_excel.html

时间: 2024-10-04 14:53:37

java的poi 读取exc 文件的相关文章

java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell.一.实例代码: 只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的.说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印.当然也可以返回三维数组(包含该单元格的位置坐标)

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work

通过POI读取word文件

POI读取word只能读取内容不能读取格式 tm-extractors-0.4.jar import java.io.FileInputStream; import org.textmining.text.extraction.WordExtractor; public class Test { public static void main(String[] args) { try { FileInputStream in = new FileInputStream("d:\\a.doc&qu

Java使用POI读取和写入Excel指南

Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作 1.1 在项目中引入Apache POI相关类库 引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: <depe

Java-Servlet--《12-WEB应用中的普通Java程序如何读取资源文件.mp4》 有疑问

\第五天-servlet开发和ServletConfig与ServletContext对象\12-WEB应用中的普通Java程序如何读取资源文件.mp4; 多层时,DAO为了得到资源文件中的配置参数: servlet 中的 doGet方法中获得ServletcontextServletcontext context = this.getServletContext();然后将context 对象传到 DAO中使用,这样的话耦合就高了,不合理. 所以:要通过类加载器的方式 这个Properties

WEB应用中的普通Java程序如何读取资源文件

1 package cn.itcast; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpSer

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu] 不显示删除回复             显示所有回复             显示星级回复             显示得分回复             只显示楼主           收藏 关注 xieyongqiu maobingxixi 本版等级: 结帖率:71.43% 楼主发表于: 2010-09-13 17:33:03 使用POI 读取 Excel 

java提供的读取properties文件方法,应对编码问题

Properties prop=new Properties(); prop.load(Client.class.getClassLoader().getResourceAsStream("config.properties")); java提供的读取properties文件方法,应对编码问题