Apache POI是Apache开发的开源的跨平台的 Java API,提供API给Java程序对Microsoft Office格式档案进行各种操作。

POI中Excel操作很简单,主要类有

  • HSSFWorkbook:Excel文件
  • HSSFSheet:Excel文件内的分页sheet
  • HSSHRow:行
  • HSSFCell:单元格

我们想导入读取并验证单元格的数据,如下:

excel内容:

开发实例:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.ParseException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.struts.upload.FormFile; public class POIImport { // 导入并验证文件File_Import.xls public static void main(String[] args) { // 用Struts导入文件:
// FormFile formFile = batchChangeAGForm.getXlsfile();
//
// if (0 == formFile.getFileSize()) {
// this.setPromptMessage(request, "选择的文件有误!");
// return mapping.findForward("batchChangeAGImport");
// }
// InputStream is = formFile.getInputStream(); // 直接读取文件:
String filePath = "D:\\File_Import.xls";
File file = new File(filePath);
InputStream is;
HSSFSheet sheetMain; try {
is = new FileInputStream(file);
POIFSFileSystem fs = new POIFSFileSystem(is);
HSSFWorkbook wb = new HSSFWorkbook(fs);
// 读取第一个Sheet
sheetMain = wb.getSheetAt(0);
is.close(); // 总共的行数
int rowLens = sheetMain.getLastRowNum();
int colLens = 8;
int errCnt = 0;
HSSFRow row = null;
HSSFCell cell = null;
String content = ""; for (int rowCount = 1; rowCount <= rowLens; rowCount++) {
System.out.println("读取行:" + rowCount);
row = sheetMain.getRow(rowCount);
if (row != null) { for (int colCount = 0; colCount < colLens; colCount++) {
System.out.print("行 :" + rowCount + ";列 :" + colCount
+ "的内容:");
cell = row.getCell((short) colCount);
content = getCellValue(cell).trim();
if (content == "") {
System.out.println("### 发现空异常 ###");
} else {
System.out.println(content);
}
}
}
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public static String getCellValue(HSSFCell cell) {
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BLANK:
return "";
case HSSFCell.CELL_TYPE_NUMERIC:
String strValue = String.valueOf(cell.getNumericCellValue());
if (strValue != null && strValue.indexOf(".") != -1
&& strValue.indexOf("E") != -1) {
try {
return new DecimalFormat().parse(strValue).toString();
} catch (ParseException e) {
e.printStackTrace();
}
} else {
if (strValue.endsWith(".0")) {
return strValue.substring(0, strValue.indexOf(".0"));
} else {
return strValue;
}
}
case HSSFCell.CELL_TYPE_STRING:
return (cell.getStringCellValue() + "").trim();
case HSSFCell.CELL_TYPE_FORMULA:
return (cell.getCellFormula() + "").trim();
case HSSFCell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue() + "";
case HSSFCell.CELL_TYPE_ERROR:
return cell.getErrorCellValue() + "";
}
}
return "";
}
}

输出:

读取行:1
行 :1;列 :0的内容:A000079
行 :1;列 :1的内容:000002017106088
行 :1;列 :2的内容:2
行 :1;列 :3的内容:2
行 :1;列 :4的内容:10000
行 :1;列 :5的内容:1000
行 :1;列 :6的内容:20171020
行 :1;列 :7的内容:已发放
读取行:2
行 :2;列 :0的内容:A000080
行 :2;列 :1的内容:000002018107088
行 :2;列 :2的内容:1
行 :2;列 :3的内容:1
行 :2;列 :4的内容:20000
行 :2;列 :5的内容:2000
行 :2;列 :6的内容:20181020
行 :2;列 :7的内容:待发
读取行:3
行 :3;列 :0的内容:A000081
行 :3;列 :1的内容:000002018107099
行 :3;列 :2的内容:1
行 :3;列 :3的内容:1
行 :3;列 :4的内容:### 发现空异常 ###
行 :3;列 :5的内容:3000
行 :3;列 :6的内容:20181020
行 :3;列 :7的内容:待发

Java入门开发POI读取导入Excel文件的更多相关文章

  1. POI读取/写入Excel文件

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  2. poi批量导入excel文件

    package com.practice.util; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  3. Java POI导入Excel文件

    今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...

  4. java如何导入Excel文件

    Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...

  5. java后端导入excel模板和导入excel文件去读数据

    模板转载地址:https://www.cnblogs.com/zhangyangtao/p/9802948.html 直接上代码(我是基于ssm写的demo,导入文件目前只能读取.xls后缀的exce ...

  6. Java解析导入Excel文件后台代码实现

    使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...

  7. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  8. Apache POI 一键上传(导入excel文件到数据库)

    import cn.XXXX.bos.utils.PinYin4jUtils; import org.apache.commons.lang3.StringUtils; // HSSF:操作07版本之 ...

  9. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...

随机推荐

  1. 2019.01.21 NOIP训练 可持久化序列【模板】(可持久化treap)

    传送门 题意简述:支持在把某个数插入到某版本的第k个位置,删除某版本第k个数,询问第k个数. 思路:用可持久化treaptreaptreap维护区间第kkk个位置的数是啥就可以了. 代码

  2. Firefox table 不居中解决办法 解决火狐层或 table 不居中

    Firefox table 不居中解决办法: table 使用 align="center" ,IE正常,Firefox 却是居左了,网上有各种解决的办法,比如在table外面再套 ...

  3. poj-3928(树状数组)

    题目链接:传送门 题意:n个乒乓球运动员要互相练习,都去一个运动员那里比赛,举办训练的运动员不能水平最高或最低. 现在给出n个运动员的水平,求出最终有多少种组合. 思路:先对运动员进行离散化,然后进行 ...

  4. Jersey RESTful WebService框架学习(一)

    介绍:RESTful (Representation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fielding 的博士 ...

  5. Gym-101102-K-Topological Sort

    K. Topological Sort 题面 Consider a directed graph G of N nodes and all edges (u→v) such that u < v ...

  6. (转)JDK安装配置教程

    转自:http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html JDK作为JAVA开发的环境,不管是做JAVA开发的学生,还是做安卓 ...

  7. day34(注解)

    注解 注解和注释的区别: 注释:是给程序员看的. 注解:是给虚拟机识别的. 注解的作用: 1.代替配置文件 2.标识一个方法,代替一个特殊功能. JDK当中的提供的注解: 标识重写方法 @Overri ...

  8. 第74讲:从Spark源码的角度思考Scala中的模式匹配

    今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,.... ...

  9. Redis中在程序中的应用

    1.导入redis的配置文件,因为要交给web容器管理,所以直接命名为ApplicationContext-redis.xml,具体配置如下: <beans xmlns="http:/ ...

  10. Android中去掉标题栏

    在Android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 记 ...