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 进行了格式化 结果为:
随机推荐
- NPOI通过DataTable导出和读取Excel
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...
- Kernel Regression from Nando's Deep Learning lecture 5
require 'torch' require 'gnuplot' , , nData) ) print(xTrain) print(yTrain) local yTrain = yTrain + t ...
- 实现div中图片的滚动
今日闲来无事自己写了个图片滚动: 源码: <html><head> <meta charset="utf-8"/> <script typ ...
- 为什么在CSS中不要再使用@import
http://www.stevesouders.com/blog/2009/04/09/dont-use-import/为什么在CSS中不要再使用@import
- html file选中图片后 不经过服务器 立刻显示在页面
html结构中 file类型加上 onchange事件 ,用FileReader读取图片的data:/images,然后显示在img标签中, 代码如下: <img class="pre ...
- 解决pip安装时 UnicodeDecodeError 问题
在装django的时候用pip安装就出现了问题,一大堆的红字,然后联想到很多次用pip安装都以失败告终,于是今天抽空看了看出现问题的原因. 情况如下图:
- maven Spring MVC项目
IntelliJ IDEA上创建maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...
- C#基础之------进制转换
/************************ File:控制台进制类型转换实现 Time:2014年8月12日 Author:小X ****************************/ 代 ...
- hdu 2489 Minimal Ratio Tree
http://acm.hdu.edu.cn/showproblem.php?pid=2489 这道题就是n个点中选择m个点形成一个生成树使得生成树的ratio最小.暴力枚举+最小生成树. #inclu ...
- [置顶] 玩转Eclipse — 自动注释插件JAutodoc
代码注释是一种良好的编程习惯.不管对于他人还是自己,注释都有助于代码的阅读和理解.手动添加注释,是一个非常费时和繁琐的工作,严重影响软件开发效率,这也是绝大多数程序员不愿添加注释的主要原因.JAuto ...