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 进行了格式化 结果为:
随机推荐
- AFNetWorking 关于manager.requestSerializer.timeoutInterval 不起作用的问题
之前一直遇到关于AFNetWorking请求时间设置了但是不起作用的情况,现用如下方式设置AF的超市时间即可. [manager.requestSerializer willChangeValueFo ...
- VS2015预览版中的C#6.0 新功能(二)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(三) 自动属性的增强 只读自动属性 以前自动属性必须同时提供setter和getter方法,因而只读属性只能通 ...
- WCF入门教程系列一
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- c#窗体的传值方法
了解了窗体的显示相关知识,接着总结一下窗体的传值方法: .通过构造函数 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 int value1; ...
- OpenCV——Mat,IplImage,CvMat类型转换
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,三者区别如下 Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. 而CvMat和IplImage类型更侧 ...
- 实现div中图片的滚动
今日闲来无事自己写了个图片滚动: 源码: <html><head> <meta charset="utf-8"/> <script typ ...
- Mysql服务启动问题
mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) u ...
- Ultra-QuickSort(树状数组+离散化)
Ultra-QuickSort POJ 2299 Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 50495 Accep ...
- ASP.NET MVC 4.0 学习1-C#基础语法
1,方法多載,相同的方法名稱,不同的參數類型.數量 class Program { static void Main(string[] args) { Program newObject = new ...
- Ubuntu14.04安装PostpreSQL9.3.5记录
安装参考:http://www.postgresql.org/download/linux/ubuntu/ y@y:~$ sudo apt-get install postgresql-9.3 pos ...