这里需要用到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. 枚举宏(Adopting Modern Objective-C)

    使用NS_ENUM 和 NS_OPTIONS宏定义枚举.Adopting Modern Objective-C 使用NS_ENUM宏定义一组互斥的枚举值: typedef NS_ENUM(NSInte ...

  2. Oracle 精简绿色版客户端的配置

    在项目开发中常常用到Oracle.但Oracle 客户端体积很大.安装后,主要用的就1个功能:TNS配置服务名,偶尔用到SqlPlus.在开发过程中,大量使用Navicate和PL/SQL Devel ...

  3. 求助:对话框下OnInitDialog中使用SetTimer无效

    原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdial ...

  4. [BZOJ 1070] [SCOI2007] 修车 【费用流】

    题目链接:BZOJ - 1070 题目分析 首先想到拆点,把每个技术人员拆成 n 个点,从某个技术人员拆出的第 i 个点,向某辆车连边,表示这是这个技术人员修的倒数第 i 辆车.那么这一次修车对整个答 ...

  5. js弹出新窗口居中

    方式1: <script language="javascript"> var newUrl = <%=newUrl % > //window.locati ...

  6. java 线程​基本概念 可见性 同步

    开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于J ...

  7. nodejs--book

    https://github.com/0xlen/nodejs-wiki-book http://www.nodebeginner.org/index-zh-cn.html http://book.n ...

  8. Best Pratices——Make the Web Faster

    https://developers.google.com/speed/ PageSpeed Rules Optimizing caching — keeping your application's ...

  9. 掌握 Linux 调试技术

    掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着 ...

  10. 字符串(后缀自动机):USACO Dec10 恐吓信

    [题目描述] FJ刚刚和邻居发生了一场可怕的争吵,他咽不下这口气,决定佚名发给他的邻居一封脏话连篇的信.他有无限张完全相同的已经打印好的信件,都包含 N个字母(1<=N<=50,000). ...