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. mysql 通过cmd 在命令行创建数据库

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...

  2. 【WIN10】程序內文件讀取與保存

    DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH  访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...

  3. Codeforces.739E.Gosha is hunting(DP 带权二分)

    题目链接 \(Description\) 有\(n\)只精灵,两种精灵球(高级和低级),每种球能捕捉到第\(i\)只精灵的概率已知.求用\(A\)个低级球和\(B\)个高级球能捕捉到精灵数的最大期望. ...

  4. 2018-2019-2 20162318《网络对抗技术》Exp3 免杀原理与实践

    一.实验内容 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion),加壳工具),使用shellcode编程 2.通过组合应用各种技术实现恶意代码免杀(如果成 ...

  5. python调用matlab

    官网链接: https://ww2.mathworks.cn/help/matlab/matlab_external/call-user-script-and-function-from-python ...

  6. Windows Phone background Audio 后台音频

    Windows Phone 后台音频的确不是什么新鲜的话题了,但发现目前在WP平台的音频播放应用多多少少会有一些瑕疵,所以在此给大家在此介绍下这个功能给有需要的朋友们. 首先介绍下我们的应用在后台播放 ...

  7. jmeter-分布式部署之负载机的设置

    本文分三个部分: 1.windows下负载机的配置 2.Linux下负载机的配置 3.遇到的问题 *************************************************** ...

  8. php中赋值和引用真真的理解

    php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...

  9. [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

    相信如果用谷歌浏览器做移动端页面的时候 用touch事件的时候应该遇到过这个东东吧 documet.addEventListener("touchstart",function() ...

  10. eclipse鼠标变成十字架

    不知道按到什么或者点到什么button了,在eclipse里面鼠标就变成了十字架形式.解决的方法是按:alt+shift+a 原来alt+shift+a是框选代码的.长见识了!