package cn.com.css.common.util;

import java.io.IOException;

import java.io.InputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

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;

public class ExcelReader {

 

 private POIFSFileSystem fs;

 private HSSFWorkbook wb;

 private HSSFSheet sheet;

 private HSSFRow row;

/**

  * 读取Excel表格表头的内容

  *

  * @param InputStream

  * @return String 表头内容的数组

  */

 public String[] readExcelTitle(InputStream is) {

  try {

   fs = new POIFSFileSystem(is);

   wb = new HSSFWorkbook(fs);

  } catch (IOException e) {

   e.printStackTrace();

  }

  sheet = wb.getSheetAt(0);

  row = sheet.getRow(0);

  // 标题总列数

  int colNum = row.getPhysicalNumberOfCells();

  String[] title = new String[colNum];

  for (int i = 0; i < colNum; i++) {

   title[i] = getCellFormatValue(row.getCell((short) i));

  }

  return title;

 }

/**

  * 读取Excel数据内容

  *

  * @param InputStream

  * @return Map 包括单元格数据内容的Map对象

  */

 public Map<Integer, String> readExcelContent(InputStream is) {

  Map<Integer, String> content = new HashMap<Integer, String>();

  String str = "";

  try {

   fs = new POIFSFileSystem(is);

   wb = new HSSFWorkbook(fs);

  } catch (IOException e) {

   e.printStackTrace();

  }

  sheet = wb.getSheetAt(0);

  // 得到总行数

  int rowNum = sheet.getLastRowNum();

  row = sheet.getRow(0);

  int colNum1 = row.getPhysicalNumberOfCells(); // 获取有数据的列的个数

  int colNum = 15;

  // 正文内容应该从第二行開始,第一行为表头的标题

  for (int i = 1; i <= rowNum; i++) {

   row = sheet.getRow(i);

   int j = 0;

while (j < colNum) {

    String cell = getCellFormatValue(row.getCell((short) j)).trim();

    if (cell == "") {

     j++;

     continue;

    }

    str += cell + " ";

    j++;

   }

   str.trim();

   // System.out.println(str);

   content.put(i, str);

   str = "";

  }

  return content;

 }

/**

  * 获取单元格数据内容为字符串类型的数据

  *

  * @param cell

  *            Excel单元格

  * @return String 单元格数据内容

  */

 /*

  * private String getStringCellValue(HSSFCell cell) { String strCell = "";

  * switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: strCell =

  * cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC:

  * strCell = String.valueOf(cell.getNumericCellValue()); break; case

  * HSSFCell.CELL_TYPE_BOOLEAN: strCell =

  * String.valueOf(cell.getBooleanCellValue()); break; case

  * HSSFCell.CELL_TYPE_BLANK: strCell = ""; break; default: strCell = "";

  * break; } if (strCell.equals("") || strCell == null) { return ""; } if

  * (cell == null) { return ""; } return strCell; }

  */

/**

  * 获取单元格数据内容为日期类型的数据

  *

  * @param cell

  *            Excel单元格

  * @return String 单元格数据内容

  */

 // private String getDateCellValue(HSSFCell cell) {

 // String result = "";

 // try {

 // int cellType = cell.getCellType();

 // if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {

 // Date date = cell.getDateCellValue();

 // result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)

 // + "-" + date.getDate();

 // } else if (cellType == HSSFCell.CELL_TYPE_STRING) {

 // String date = getStringCellValue(cell);

 // result = date.replaceAll("[年月]", "-").replace("日", "").trim();

 // } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {

 // result = "";

 // }

 // } catch (Exception e) {

 // //System.out.println("日期格式不对!");

 // e.printStackTrace();

 // }

 // return result;

 // }

/**

  * 依据HSSFCell类型设置数据

  *

  * @param cell

  * @return

  */

 private String getCellFormatValue(HSSFCell cell) {

  String cellvalue = "";

  if (cell != null) {

   // 推断当前Cell的Type

   switch (cell.getCellType()) {

   // 假设当前Cell的Type为NUMERIC

   case HSSFCell.CELL_TYPE_NUMERIC: {

    cellvalue = String.valueOf(cell.getNumericCellValue());

    break;

   }

   case HSSFCell.CELL_TYPE_FORMULA: {

    // 推断当前的cell是否为Date

    if (HSSFDateUtil.isCellDateFormatted(cell)) {

     // 假设是Date类型则,转化为Data格式

// 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00

     // cellvalue = cell.getDateCellValue().toLocaleString();

// 方法2:这样子的data格式是不带带时分秒的:2011-10-12

     Date date = cell.getDateCellValue();

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

     cellvalue = sdf.format(date);

}

    // 假设是纯数字

    else {

     // 取得当前Cell的数值

     cellvalue = String.valueOf(cell.getNumericCellValue());

    }

    break;

   }

    // 假设当前Cell的Type为STRIN

   case HSSFCell.CELL_TYPE_STRING:

    // 取得当前的Cell字符串

    cellvalue = cell.getRichStringCellValue().getString();

    break;

   // 默认的Cell值

   default:

    cellvalue = " ";

   }

  } else {

   cellvalue = "";

  }

  return cellvalue;

}

}

ExcelReader(解析Excel的工具类)的更多相关文章

  1. Excel导入工具类兼容xls和xlsx

    package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...

  2. 基于jdk1.7实现的excel导出工具类

    通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...

  3. excel读取 工具类

    package cn.yongche.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...

  4. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  5. EXCEL导出工具类及调用

    一.Excel导出工具类代码 package com.qiyuan.util; import java.io.OutputStream; import java.io.UnsupportedEncod ...

  6. 下载数据到Excel,工具类

    使用反射将model数据下载到Excel中 package test.upload.utils; import java.lang.reflect.Method; import java.math.B ...

  7. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  8. 使用Apache poi来编写导出excel的工具类

    在JavaWeb开发的需求中,我们会经常看到导出excel的功能需求,然后java并没有提供操作office文档的功能,这个时候我们就需要使用额外的组件来帮助我们完成这项功能了. 很高兴Apache基 ...

  9. 使用POI做的一个生成Excel的工具类。包含了导出Excel和解析Excel方法

    PoiExcelUtils.java /** * */ package com.common.office; import java.io.File; import java.io.FileInput ...

随机推荐

  1. [BZOJ5287][HNOI2018]毒瘤(虚树DP)

    暴力枚举非树边取值做DP可得75. 注意到每次枚举出一个容斥状态的时候,都要做大量重复操作. 建立虚树,预处理出虚树上两点间的转移系数.也可动态DP解决. 树上倍增.动态DP.虚树DP似乎是这种问题的 ...

  2. Android优化之软引用和弱引用

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用.这里重点介绍一下软引用和弱引用. 如果一 ...

  3. Linux免密登录

    ssh连接上服务器 ssh -p 端口 用户名@ip地址 获取本地的pub ssh key cd ~/.ssh vi id_rsa.pub 拷贝里面的内容 将拷贝的内容放到服务器的authorized ...

  4. bzoj 3653

    每个点维护一颗以深度为下标,size-1为值的线段树,保存整颗子树的信息,这样就可以查询了,但是如果为每个节点都建立这么一颗树,显然会MLE,所以考虑在DFS序上建立主席树,然后每个节点原来对应的线段 ...

  5. 【JavaScript代码实现三】JS对象的深度克隆

    function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; // 创建一个空的数组 var i = Obj.length; ...

  6. python开发_tkinter_单选按钮

    这篇blog主要是描述python中tkinter的单选按钮操作 下面是我做的demo 运行效果: ====================================== 代码部分: ===== ...

  7. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题

    A. Bear and Game 题目连接: http://www.codeforces.com/contest/673/problem/A Description Bear Limak likes ...

  8. python 爬虫学习<将某一页的所有图片下载下来>

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  9. 装了wamp之后,80端口被占用解决办法

    1.如果装了IIS,那么把IIS停掉. 2.如果装了sqlserver,那么在cmd里面执行命令:services.msc,进入服务里面,把SQL Server Reporting Services ...

  10. Map:HashMap和TreeMap

    一.Map集合     特点:将键映射到值得对象 Map集合和Collection集合的区别? Collection:是单列集合,存储的是单独出现的元素    Map: 是双列集合,存储的是键值对形式 ...