/**
* 根据不同情况获取Java类型值
* <ul><li>空白类型<ul><li>返回空字符串</li></ul></li></ul><ul><li>布尔类型</li><ul><li>返回Boulean类型值</li></ul></ul><ul><li>错误类型</li><ul><li>返回String类型值:Bad value</li></ul></ul><ul><li>数字类型</li><ul><li>日期类型</li><ul><li>返回格式化后的String类型,e.g.2017-03-15 22:22:22</li></ul><li>数字类型</li><ul><li>返回经过处理的java中的数字字符串,e.g.1.23E3==>1230</li></ul></ul> </ul><ul><li>公式类型</li><ul><li>公式正常</li><ul><li>返回计算后的String类型结果</li></ul></ul><ul><li>公式异常</li><ul><li>返回错误码,e.g.#DIV/0!;#NAME?;#VALUE!</li></ul></ul> </ul><ul><li>字符串类型</li><ul><li>返回String类型值</li></ul></ul>
*
* @param cell
* XSSFCell类型单元格
* @return 返回Object类型值
* @since 2017-03-26 00:05:36{@link #getValueOfNumericCell()}
*/
public static Object getJavaValue(XSSFCell cell) {
Object o = null;
int cellType = cell.getCellType();
switch (cellType) {
case XSSFCell.CELL_TYPE_BLANK:
o = "";
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
o = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_ERROR:
o = "Bad value!";
break;
case XSSFCell.CELL_TYPE_NUMERIC:
o = getValueOfNumericCell(cell);
break;
case XSSFCell.CELL_TYPE_FORMULA:
try {
o = getValueOfNumericCell(cell);
} catch (IllegalStateException e) {
try {
o = cell.getRichStringCellValue().toString();
} catch (IllegalStateException e2) {
o = cell.getErrorCellString();
}
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
o = cell.getRichStringCellValue().getString();
}
return o;
} // 获取数字类型的cell值
private static Object getValueOfNumericCell(XSSFCell cell) {
Boolean isDate = DateUtil.isCellDateFormatted(cell);
Double d = cell.getNumericCellValue();
Object o = null;
if (isDate) {
o = DateFormat.getDateTimeInstance()
.format(cell.getDateCellValue());
} else {
o = getRealStringValueOfDouble(d);
}
return o;
} // 处理科学计数法与普通计数法的字符串显示,尽最大努力保持精度
private static String getRealStringValueOfDouble(Double d) {
String doubleStr = d.toString();
boolean b = doubleStr.contains("E");
int indexOfPoint = doubleStr.indexOf('.');
if (b) {
int indexOfE = doubleStr.indexOf('E');
// 小数部分
BigInteger xs = new BigInteger(doubleStr.substring(indexOfPoint
+ BigInteger.ONE.intValue(), indexOfE));
// 指数
int pow = Integer.valueOf(doubleStr.substring(indexOfE
+ BigInteger.ONE.intValue()));
int xsLen = xs.toByteArray().length;
int scale = xsLen - pow > 0 ? xsLen - pow : 0;
doubleStr = String.format("%." + scale + "f", d);
} else {
java.util.regex.Pattern p = Pattern.compile(".0$");
java.util.regex.Matcher m = p.matcher(doubleStr);
if (m.find()) {
doubleStr = doubleStr.replace(".0", "");
}
}
return doubleStr;
}

POI-根据Cell获取对应的String类型值的更多相关文章

  1. visual studio中如何将string类型值转为BYTE(unsigned char)类型

    昨天困惑一件事,就是手里有个string类型的字符串,像01 23 45 67 89 AB CD EF,根据空格拆分为一个个的子字符串后(如EF),需要放到一个BYTE(typedef unsigne ...

  2. Java基础String类

    String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...

  3. 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类

    Object类的概述:* A:Object类概述    * 类层次结构的根类    * 所有类都直接或者间接的继承自该类* B:构造方法    * public Object()    * 子类的构造 ...

  4. [Java初探04]__字符串(String类)相关

    前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...

  5. 8.3 String 类的方法 使用分类

    String类的判断功能.获取功能. * String类的判断功能: * boolean equals(Object obj):比较字符串的内容是否相同 * boolean equalsIgnoreC ...

  6. IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法

    IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...

  7. java11-3 String类的获取功能

    String类的获取功能 int length():获取字符串的长度. char charAt(int index):获取指定索引位置的字符 int indexOf(int ch):返回指定字符在此字 ...

  8. Java基础知识强化33:String类之String类的获取功能

    1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...

  9. 关于String类和String[]数组的获取长度方法细节

    一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";     ...

随机推荐

  1. jquery data方法获取某个元素上事件

    获取某个元素上的事件,jquery的给元素绑定的事件可以用data方法取出来. 通过$(element).data("events")来获取 // 比如给一个button绑定两个c ...

  2. 网站的PV UV IP---网站常见软件性能

    IP,衡量不同时间段的上网人数.00:00-24:00内相同的地址被计算一次.例:日300W IP,至少300W人访问PV,衡量页面受欢迎程度.每刷新一次,被记录一次(刷pv),网站被访问的页面的数量 ...

  3. 【Android】17.1 Bound Services基本概念

    分类:C#.Android.VS2015: 创建日期:2016-03-03 一.Bound Services—被绑定的服务 1.什么是Bound Service Bound Service是指通过接口 ...

  4. android笔记---AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...

  5. Django视图之URLconfs

    对于一个web程序而言,接收和处理用户的请求并返回响应是一个最基本的.也是最重要的功能. Django为这个功能取了一个好听的名字——“视图”. 而具体的代码实现往往是通过一个个函数,Django中也 ...

  6. python+xpath+requests爬取维基百科历史上的今天

    import requests import urllib.parse import datetime from lxml import etree fhout = open("result ...

  7. LeetCode: Linked List Cycle 解题报告

    Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it ...

  8. java 多线程3:Thread类中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  9. setTimeout解读

    看一个简单的例子: for(var i=0; i<4; i++){ setTimeout(function(){console.log(i)}, 0); } 请问下这段代码会输出什么呢? 如果你 ...

  10. postgres入门介绍

    mysql被oricle公司收购以后,PG就成了比较流行的开源数据库的首选,而且heroku上面不支持mysql,但是却大力支持PG,所以说,不得不学学PG,并非迫不得已的样子,至少以后PG会比较流行 ...