java poi 导入excel
最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能。
所需jar包 http://pan.baidu.com/s/1sjPuWDR
package example.poi;
import java.io.*;
import java.text.DecimalFormat;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class ImportExcel { private Workbook wb = null;
private Sheet sheet = null;
private Row row = null;
private int sheetNum = 0;
private int rowNum = 0;
private FileInputStream fis = null;
private File file = null;
private DecimalFormat df = new DecimalFormat("0");
public ImportExcel() {
super();
}
public void setSheetNum(int sheetNum) {
this.sheetNum = sheetNum;
}
public void setRowNum(int rowNum) {
this.rowNum = rowNum;
}
public void setFile(File file) {
this.file = file;
}
/**
* 读取excel文件获得HSSFWorkbook对象
* @throws IOException
*/
public void open(String filePath) throws IOException {
if(validateExcel(filePath)) {
file = new File(filePath);
fis = new FileInputStream(file);
if(isExcel2003(filePath)) {
wb = new HSSFWorkbook(fis);
} else {
wb = new XSSFWorkbook(fis);
}
fis.close();
}
} /**
* 获取sheet表数目
* @return sheet表数目
*/
public int getSheetCount() {
int sheetCount = -1;
sheetCount = wb.getNumberOfSheets();
return sheetCount;
} /**
* 获取sheetNum下的记录行数
* @return 记录行数
*/
public int getRowCount() {
if(wb == null) {
System.err.println("----------->WorkBook为空");
}
Sheet sheet = wb.getSheetAt(this.sheetNum);
int rowCount = -1;
rowCount = sheet.getLastRowNum();
return rowCount;
} /**
* 获取指定sheetNum的记录行数
* @param sheetNum 表编号
* @return 记录行数
*/
public int getRowCount(int sheetNum) {
Sheet sheet = wb.getSheetAt(sheetNum);
int rowCount = -1;
rowCount = sheet.getLastRowNum();
return rowCount;
} /**
* 得到指定行的内容
* @param lineNum 行数
* @return 内容
*/
public String[] readExcelLine(int lineNum) {
return readExcelLine(this.sheetNum, lineNum);
} /**
* 获取指定工作表和行数的内容
* @param sheetNum 表编号
* @param lineNum 行数
* @return 内容
*/
public String[] readExcelLine(int sheetNum, int lineNum) {
if(sheetNum < 0 || lineNum < 0) {
return null;
}
String[] strExcelLine = null;
try {
sheet = wb.getSheetAt(sheetNum);
row = sheet.getRow(lineNum); int cellCount = row.getLastCellNum();
strExcelLine = new String[cellCount + 1];
for(int i = 0; i <= cellCount; i++) {
strExcelLine[i] = readStringExcelCell(lineNum, i);
}
} catch (Exception e) {
e.printStackTrace();
}
return strExcelLine;
} /**
* 获取指定列的内容
* @param cellNum 列编号
* @return 内容
*/
public String readStringExcelCell(int cellNum) {
return readStringExcelCell(this.rowNum, cellNum);
} /**
* 获取指定行和列编号的内容
* @param rowNum 行编号
* @param cellNum 列编号
* @return 内容
*/
public String readStringExcelCell(int rowNum, int cellNum) {
return readStringExcelCell(this.sheetNum, rowNum, cellNum);
} /**
* 获取指定工作表、行、列的内容
* @param sheetNum 表编号
* @param rowNum 行编号
* @param cellNum 列编号
* @return 内容
*/
public String readStringExcelCell(int sheetNum, int rowNum, int cellNum) {
if(sheetNum < 0 || rowNum < 0) {
return "";
}
String strExcelCell = "";
try {
sheet = wb.getSheetAt(sheetNum);
row = sheet.getRow(rowNum); if(row.getCell(cellNum) != null) {
switch(row.getCell(cellNum).getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
strExcelCell = "FORMULA";
break;
case HSSFCell.CELL_TYPE_NUMERIC:
//strExcelCell = String.valueOf(row.getCell(cellNum).getNumericCellValue());
//防止科学计数,不需要的话可以用上一行
strExcelCell = decimalFormat(row.getCell(cellNum).getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
strExcelCell = row.getCell(cellNum).getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
strExcelCell = "";
break;
default:
strExcelCell = "";
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return strExcelCell;
} /**
* 测试
* @param args
*/
public static void main(String[] args) {
String filePath = "C:\\Users\\Administrator\\Desktop\\工作簿1.xlsx";
ImportExcel ie = new ImportExcel();
try {
ie.open(filePath);
} catch (IOException e) {
e.printStackTrace();
}
ie.setSheetNum(0);
int count = ie.getRowCount();
for (int i = 0; i <= count; i++) {
String[] rows = ie.readExcelLine(i);
for (int j = 0; j < rows.length; j++) {
System.out.print(rows[j] + " ");
}
System.out.print("\n");
}
} /**
* 验证文件是否存在以及是否是excel文件
* @param filePath
* @return 结果
*/
public boolean validateExcel(String filePath) {
if(filePath == null || ! (isExcel2003(filePath) || isExcel2007(filePath))) {
System.err.println("文件不是excel文件!");
return false;
}
File file = new File(filePath);
if(file == null || ! file.exists()) {
System.err.println("文件不存在!");
return false;
}
return true;
} /**
* 判断是否是2003版excel
* @param filePath 文件路径
* @return 结果
*/
public boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
} /**
* 判断是否是2007版excel
* @param filePath 文件路径
* @return 结果
*/
public boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
} /**
* 将获取到的数据类型转换成String防止科学计数法
* @param decimal 数据
* @return 结果
*/
public String decimalFormat(Double decimal) {
return df.format(decimal);
}
}
内容借鉴:
http://download.csdn.net/detail/wangquanzheng/3526296
http://blog.csdn.net/mmm333zzz/article/details/7962377
java poi 导入excel的更多相关文章
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- Java POI导入Excel文件
今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...
- java poi导入Excel(个人代码)
案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...
- 解决java POI导入Excel超时问题
由于要导入大量数据,后台会耗费很长时间,导致超时. 本项目前端request.js中设定的超时时间为150s. const service = axios.create({ baseURL: base ...
- java poi导入EXCEL xls文件代码
/** * */ package com.bn.car.common.report.excel; import java.io.FileInputStream; import java.io.IOEx ...
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- java POI创建Excel示例(xslx和xsl区别 )
Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...
- java如何导入Excel文件
Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...
- poi导入Excel,数字科学记数法转换
在这里分享一下使用poi 导入Excel时 把数字转换为科学记数法的解决方法: 就是使用DecimalFormat对 i 进行了格式化 结果为:
随机推荐
- mysql中函数DISTINCT,group by,CONCAT及GROUP_CONCAT的使用
一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是 ...
- js继承模式
组合继承是js常用的继承模式,指的是将原型链和借用构造函数的技术结合在一起.其中的思想是使用原型链实现原型属性和方法的继承, 而通过借用构造函数实现对属性的继承. 例子: <script> ...
- 【转】Redis安装整理(window平台和Linux平台)
原文连接:http://zheng12tian.iteye.com/blog/1471726 原文作者:zheng12tian 转载注明以上信息! window平台Redis安装 redis wind ...
- c++基础五个题(一)
一.深拷贝和浅拷贝? 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了 ...
- BZOJ 1458 士兵占领
http://www.lydsy.com/JudgeOnline/problem.php?id=1458 题意:n x m的棋盘,k个位置不能放,每行和每列都有要求至少的士兵,求能否有最少的满足条件的 ...
- USB匹配电阻
做过USB的人都或许有一个纠结,那就是D+和D-上到底要串多大的电阻,串在源端还是终端. 我想说:网络上的说法都不完全正确,首先USB有低速.全速和高速之分,在低速和全速模式下是电压驱动的,驱动电压为 ...
- [ArcGIS Engine]栅格数据处理 RasterDataset RasterLayer Raster RasterBandCollection
原文 http://www.cnblogs.com/zoe-j/archive/2012/03/22/2412403.html 1.由RasterLayer 得到RasterDataset IRast ...
- ysql+heartbeat+DRBD+LVS实现mysql高可用
在企业应用中,mysql+heartbeat+DRBD+LVS是一套成熟的集群解决方案,通过heart+DRBD实现mysql的主 节点写操作的高可用性,而通过mysql+LVS实现数据库的主从复制和 ...
- EMMA: 免费java代码测试覆盖工具
From:http://emma.sourceforge.net/ EMMA: a free Java code coverage tool Code coverage for free: a b ...
- EasyUI的下拉选择框控件方法被屏蔽处理方式
1.html标签如下 <div id="selectMap" style="top: 1px;left: 80px;position: absolute;" ...