这里需要用到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文件的更多相关文章

  1. 使用apache POI解析Excel文件

    1. Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 2. POI结构 ...

  2. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  3. poi解析Excel文件版本问题

    poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xls)的文件 XSSFWorkbook格式用来解析Excel2007(xlsx)的文件 如果用HSSF ...

  4. Jquery的一键上传组件OCUpload及POI解析Excel文件

    第一步:将js文件引入页面 <script type="text/javascript" src="${pageContext.request.contextPat ...

  5. java使用jxl,poi解析excel文件

    public interface JavaExcel { /** * 使用jxl写excel文件 */ public void writeJxlExcel(); /** * 使用jxl读excel文件 ...

  6. 关于POI解析Excel文件(03和07版本不同)的问题

    问题描述:在使用poi包进行excel解析时,发现对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:org.apache.poi.poifs.filesy ...

  7. 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

    有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...

  8. 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

    在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...

  9. 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图

    有的时候,我们需要Excel中的数据,通过一个图画,可视化的表现出来. 那么这个时候,应该如何做呢?现在就借花献佛,以Apache POI自己提供的一个例子为例,给大家演示一下POI的API 如何画图 ...

随机推荐

  1. PHP: 使用CURL访问FTP

    今天要做FTP上传.本想用PHP自带的FTP函数来实现,结果发现这个模块没有编译进来,重新编译PHP太麻烦,改用其他方式实现吧  FTP上传 if (isset($_POST['Submit'])) ...

  2. 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 ...

  3. Java吸收换行符

            今天做题遇到的--         由于读入的字符串可能包含空格,所以采用nextLine. int n = sc.nextInt(); for(int i=0; i<n; i+ ...

  4. iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装

    一个简单的利用UIScrollView 实现的无线滚动banner,下面的代码实现,因为封装问题,对两个及一下的view 支持出了一点问题(view是传参进来的,不可以生成两份),但是原理是正确的,智 ...

  5. C++学习之容器的摸索

    初学容器,容易犯错的地方 1.vector,list和deque都是顺序容器.其中vector和deque都可以通过下标访问,而list不能 2. 容器的begin和end操作 c.begin()返回 ...

  6. 5451 HDU Best Solver

    链接: Best Solver 题目分析: 这个题目的关键点是需知道“共轭”. 如 :(A√B + C√D)  和 (A√B - C√D) 是共轭的 这个有一个规律 (A√B + C√D)^n + ( ...

  7. 【转】Java 枚举7常见种用法

    原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu  原创地址:http://blog.li ...

  8. 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏

    [题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...

  9. 固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗?

    固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗? 这跟我们单位一样.很简单:首先要占一个 IP/MAC ,能上外网的,这首先要有,谁要肯给地址,我们这儿领导才有呢.我是网管,当然 ...

  10. selenium grid java 资料

    Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml