Apache POI解析excel文件
这里需要用到poi.jar和poi-ooxml.jar 没有的可以去http://mvnrepository.com/下载
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
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;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Created by Donge on 2017/1/3.
*/
public class ReadExcel {
static private Workbook wb;
static private Sheet sheet;
static private Row row;
/**
* 读取 Excel 标题
* @param fileName
* @return
*/
public static String[] readExcelTitle(String fileName) {
try {
wb = createWorkbook(new FileInputStream(fileName));
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);// 获取第一行(约定第一行是标题行)
int colNum = row.getLastCellNum();// 获取行的列数
String[] titles = new String[colNum];
for (int i = 0; i < titles.length; i++) {
titles[i] = getCellFormatValue(row.getCell(i));
}
return titles;
}
/**
* 读取 Excel 内容
* @param fileName
* @return
*/
public static List<Map<String, String>> readExcelContent(String fileName) {
List<Map<String, String>> list = new ArrayList<>();
Map<String, String> content;
try {
wb = createWorkbook(new FileInputStream(fileName));
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum()+1;// 得到总行数
row = sheet.getRow(0);
int colNum = row.getLastCellNum();// 得到总列数
String titles[] = readExcelTitle(fileName);
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i < rowNum; i++) {
int j = 0;
row = sheet.getRow(i);
content = new LinkedHashMap<>();
do {
content.put(titles[j], getCellFormatValue(row.getCell(j)).trim());
j++;
} while (j < colNum);
list.add(content);
}
return list;
}
/**
* 根据Cell类型设置数据
* @param cell
* @return
*/
private static String getCellFormatValue(Cell cell) {
String cellValue = " ";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case Cell.CELL_TYPE_NUMERIC:
case Cell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
cellValue = new SimpleDateFormat("yyyy-MM-dd").format(date);// 时间格式化显示:2012-12-31
} else {
// 如果是纯数字取得当前Cell的数值
cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
}
// 如果当前Cell的Type为STRIN
case Cell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString();
break;
default:
// 默认的Cell值
cellValue = " ";
}
}
return cellValue;
}
/**
* 创建 Workbook
* @param is
* @return
* @throws IOException
* @throws InvalidFormatException
*/
public static Workbook createWorkbook(InputStream is) throws IOException,InvalidFormatException {
if (!is.markSupported()) {
is = new PushbackInputStream(is, 8);
}
if (POIFSFileSystem.hasPOIFSHeader(is)) {
return new HSSFWorkbook(is);
}
if (POIXMLDocument.hasOOXMLHeader(is)) {
return new XSSFWorkbook(OPCPackage.open(is));
}
throw new IllegalArgumentException("POI解析不了您当前的Excel版本");
}
/**
* 测试
* @param args
*/
public static void main(String args[]) {
String filePath = "D:\\Test.xls";
List<Map<String, String>> list = readExcelContent(filePath);
Map<String, String> map;
for (int i = 0; i < list.size(); i++) {
map = list.get(i);
System.out.println("**************THE START OF ROW("+(i+1)+")**************");
for (String key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
}
}
}
}
Apache POI解析excel文件的更多相关文章
- 使用apache POI解析Excel文件
1. Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 2. POI结构 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- poi解析Excel文件版本问题
poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xls)的文件 XSSFWorkbook格式用来解析Excel2007(xlsx)的文件 如果用HSSF ...
- Jquery的一键上传组件OCUpload及POI解析Excel文件
第一步:将js文件引入页面 <script type="text/javascript" src="${pageContext.request.contextPat ...
- java使用jxl,poi解析excel文件
public interface JavaExcel { /** * 使用jxl写excel文件 */ public void writeJxlExcel(); /** * 使用jxl读excel文件 ...
- 关于POI解析Excel文件(03和07版本不同)的问题
问题描述:在使用poi包进行excel解析时,发现对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:org.apache.poi.poifs.filesy ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?
在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...
- 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
有的时候,我们需要Excel中的数据,通过一个图画,可视化的表现出来. 那么这个时候,应该如何做呢?现在就借花献佛,以Apache POI自己提供的一个例子为例,给大家演示一下POI的API 如何画图 ...
随机推荐
- PHP: 使用CURL访问FTP
今天要做FTP上传.本想用PHP自带的FTP函数来实现,结果发现这个模块没有编译进来,重新编译PHP太麻烦,改用其他方式实现吧 FTP上传 if (isset($_POST['Submit'])) ...
- How to solve "The specified service has been marked for deletion" error
There may be several causes which lead to the service being stuck in “marked for deletion”. Microsof ...
- Java吸收换行符
今天做题遇到的-- 由于读入的字符串可能包含空格,所以采用nextLine. int n = sc.nextInt(); for(int i=0; i<n; i+ ...
- iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装
一个简单的利用UIScrollView 实现的无线滚动banner,下面的代码实现,因为封装问题,对两个及一下的view 支持出了一点问题(view是传参进来的,不可以生成两份),但是原理是正确的,智 ...
- C++学习之容器的摸索
初学容器,容易犯错的地方 1.vector,list和deque都是顺序容器.其中vector和deque都可以通过下标访问,而list不能 2. 容器的begin和end操作 c.begin()返回 ...
- 5451 HDU Best Solver
链接: Best Solver 题目分析: 这个题目的关键点是需知道“共轭”. 如 :(A√B + C√D) 和 (A√B - C√D) 是共轭的 这个有一个规律 (A√B + C√D)^n + ( ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏
[题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...
- 固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗?
固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗? 这跟我们单位一样.很简单:首先要占一个 IP/MAC ,能上外网的,这首先要有,谁要肯给地址,我们这儿领导才有呢.我是网管,当然 ...
- selenium grid java 资料
Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml