用POI读取Excel数据:(版本号:POI3.7)

1、读取Excel

  1. private List<String[]> rosolveFile(InputStream is, String suffix,
  2. int startRow) throws IOException, FileNotFoundException {
  3. Workbook xssfWorkbook = null;
  4. if ("xls".equals(suffix)) {
  5. xssfWorkbook = new HSSFWorkbook(is);
  6. } else if ("xlsx".equals(suffix)) {
  7. xssfWorkbook = new XSSFWorkbook(is);
  8. }
  9. Sheet xssfSheet = xssfWorkbook.getSheetAt(0);
  10. if (xssfSheet == null) {
  11. return null;
  12. }
  13. ArrayList<String[]> list = new ArrayList<String[]>();
  14. int lastRowNum = xssfSheet.getLastRowNum();
  15. for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
  16. if (xssfSheet.getRow(rowNum) != null) {
  17. Row xssfRow = xssfSheet.getRow(rowNum);
  18. short firstCellNum = xssfRow.getFirstCellNum();
  19. short lastCellNum = xssfRow.getLastCellNum();
  20. if (firstCellNum != lastCellNum) {
  21. String[] values = new String[lastCellNum];
  22. for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {
  23. Cell xssfCell = xssfRow.getCell(cellNum);
  24. if (xssfCell == null) {
  25. values[cellNum] = "";
  26. } else {
  27. values[cellNum] = parseExcel(xssfCell);
  28. }
  29. }
  30. list.add(values);
  31. }
  32. }
  33. }
  34. return list;
  35. }

2、Excel数据处理:

Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化

1、数值格式(CELL_TYPE_NUMERIC):

1.纯数值格式:getNumericCellValue() 直接获取数据

2.日期格式处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式

1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)

2).判断是日期或者时间

cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")

OR: cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")

3.自定义日期格式处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式

判断cell.getCellStyle().getDataFormat()值,解析数值格式

yyyy年m月d日----->31

m月d日---->58

h时mm分--->32

2、字符格式(CELL_TYPE_STRING):直接获取内容

  1. private String parseExcel(Cell cell) {
  2. String result = new String();
  3. switch (cell.getCellType()) {
  4. case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
  5. if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
  6. SimpleDateFormat sdf = null;
  7. if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
  8. .getBuiltinFormat("h:mm")) {
  9. sdf = new SimpleDateFormat("HH:mm");
  10. } else {// 日期
  11. sdf = new SimpleDateFormat("yyyy-MM-dd");
  12. }
  13. Date date = cell.getDateCellValue();
  14. result = sdf.format(date);
  15. } else if (cell.getCellStyle().getDataFormat() == 58) {
  16. // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
  17. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  18. double value = cell.getNumericCellValue();
  19. Date date = org.apache.poi.ss.usermodel.DateUtil
  20. .getJavaDate(value);
  21. result = sdf.format(date);
  22. } else {
  23. double value = cell.getNumericCellValue();
  24. CellStyle style = cell.getCellStyle();
  25. DecimalFormat format = new DecimalFormat();
  26. String temp = style.getDataFormatString();
  27. // 单元格设置成常规
  28. if (temp.equals("General")) {
  29. format.applyPattern("#");
  30. }
  31. result = format.format(value);
  32. }
  33. break;
  34. case HSSFCell.CELL_TYPE_STRING:// String类型
  35. result = cell.getRichStringCellValue().toString();
  36. break;
  37. case HSSFCell.CELL_TYPE_BLANK:
  38. result = "";
  39. default:
  40. result = "";
  41. break;
  42. }
  43. return result;
  44. }

*万能处理方案

所有日期格式都可以通过getDataFormat()值来判断

yyyy-MM-dd----- 14

yyyy年m月d日--- 31

yyyy年m月------- 57

m月d日  ---------- 58

HH:mm----------- 20

h时mm分  ------- 32

  1. //1、判断是否是数值格式
  2. if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
  3. short format = cell.getCellStyle().getDataFormat();
  4. SimpleDateFormat sdf = null;
  5. if(format == 14 || format == 31 || format == 57 || format == 58){
  6. //日期
  7. sdf = new SimpleDateFormat("yyyy-MM-dd");
  8. }else if (format == 20 || format == 32) {
  9. //时间
  10. sdf = new SimpleDateFormat("HH:mm");
  11. }
  12. double value = cell.getNumericCellValue();
  13. Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
  14. result = sdf.format(date);
  15. }

POI对Excel自定义日期格式的读取的更多相关文章

  1. poi处理excel自定义日期格式

    poi读取excel自定义时间类型时,读取到的是CELL_TYPE_NUMERIC,即数值类型,这个时候如果直接取值的话会发现取到的值和表格中的值不一样,这时应该先判断值是否是时间或者日期类型再进行处 ...

  2. poi中如何自定义日期格式

    1. poi的“Quick Guide”中提供了 “How to create date cells ”例子来说明如何创建日期单元格,代码如下: HSSFCellStyle cellStyle = w ...

  3. 【教程】Tomcat 的catalina.out 日志按照自定义日期格式进行切割

    本文简单介绍在使用cronolog对tomcat的日志进行自定义日期格式的切割,方便日志的整理和遇到问题日志的排查! 安装cronolog 安装cronolog的方法网上有很多,这里也简单的介绍一下. ...

  4. java中使用poi导入导出excel文件_并自定义日期格式

    Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...

  5. (后端)excel设置日期格式的步骤

    在excel中设置日期格式,分直接设置和代码设置. 一.直接设置: 选取日期所在的单元格,单元格右键菜单中--设置单元格格式.在单元格格式窗口中选数字类型为“日期”在右边的列表框中选取相应的日期格式即 ...

  6. springMvc返回Json中自定义日期格式

    (一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annotation-driven 2.在依赖管理中添加ja ...

  7. excel转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法

    源数据日期格式:例如: 20160420 20160422 目标日期格式类型: 2016-4-20 2016-4-22 或 2016/04/20 2016/04/22 方法: 一.选中相应数据的单元格 ...

  8. json-lib date对象转json ,加入自定义日期格式处理

    import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValu ...

  9. .Net Core WebApi返回的json数据,自定义日期格式

    基本上所有的人都在DateTime类型的字段,被序列化成json的时候,遇到过可恨的Date(1294499956278+0800):但是又苦于不能全局格式化设置,比较难受.以往的方式,要么使用全局的 ...

随机推荐

  1. 机器学习实战笔记(Python实现)-04-Logistic回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  2. spool命令

    最近工作中,需对数据进行比对.在此之前,则需将数据导出.想到以前用过的spool命令,实验一番,分享如下: 需建SQL执行脚本,内容如下: set feedback off   --关掉行数显示set ...

  3. spring 事务回滚

    1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: public method() { Dao1.save(Person1); Dao1.save( ...

  4. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  5. OnDraw函数

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6219428.html 方法一.对字符串直接赋值 在View类中定义了OnDraw函数 ...

  6. HTMl5的存储方式sessionStorage和localStorage详解

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...

  7. 最长不下降序列nlogn算法

    显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...

  8. 45分钟带你入门Linux(附:笔者在工作室开讨论班录制的视频讲解)

    第一部分    熟悉Linux基本操作 一.初识Linux 1.Linux特点 ◊  开放性 ◊  多用户 ◊  多任务 ◊  良好的用户界面 ◊  设备独立性 ◊  丰富的网络功能 ◊  可靠的系统 ...

  9. Openfire 集群部署和负载均衡方案

    Openfire 集群部署和负载均衡方案 一.   概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...

  10. 利用HttpWebRequest实现实体对象的上传

    一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...