`
guoqingcun
  • 浏览: 53483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

poi 处理excel文件时的问题,及解决方案

 
阅读更多

本文中要解决两个问题

1:读取cell数据时,NullPointerException异常问题和获取不同类型数据的问题

2:保存数值类型数据到excel文件时注意的问题

第一个问题描述:

在取出cell数据时,如果cell本身没有数据,常常抛出NullPointerException异常。原因是当cell中没有数据时,获取cell对象本身就是等于NUll,内存不会为这个Cell new出对象,所以在调用cell方法时,无疑会抛出NullPointerException异常。

解决方案:

写个工具类处理这个问题.

public class POIUtil {
public static String getStringCell(Cell cell) {
String str = null;
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
case HSSFCell.CELL_TYPE_FORMULA:
str = new Long((long) cell.getNumericCellValue()).toString();
break;
case HSSFCell.CELL_TYPE_STRING:
str = cell.getStringCellValue().trim();
break;
default:
break;
}
}

return str;
}

public static double getNumericCell(Cell cell) {
double doub = 0;
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
case HSSFCell.CELL_TYPE_FORMULA:
doub = cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
doub = Double.parseDouble(cell.getStringCellValue().trim());
break;
default:
break;
}
}

return doub;
}
public static float getFloatCell(Cell cell) {
float f = 0;
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
case HSSFCell.CELL_TYPE_FORMULA:
f = (float)cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
f = Float.parseFloat(cell.getStringCellValue().trim());
break;
default:
break;
}
}

return f;
}
public static long getLongCell(HSSFCell cell) {

return (long) getNumericCell(cell);
}

public static int getIntCell(Cell cell) {

return (int) getNumericCell(cell);
}

public static Date getDateCell(Cell cell) {
Date date = null;
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
date = new Date(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
case HSSFCell.CELL_TYPE_BOOLEAN:
case HSSFCell.CELL_TYPE_ERROR:
break;
default: date = cell.getDateCellValue();
}
}

return date;
}

}

第二种问题描述:

在保存数值类型数据到excel文件时,excel中的数值只认识HSSFCell.CELL_TYPE_NUMERIC类型,此类型对应java中的double类型。比如把float值存入cell时,cell会自动处理成double值.

举个例子,我希望把float值保留两位小数的形式存入cell中,但打开excel文件发现cell中的数值并非两位小数。在float值存入之前,数值本身已经是两位小数,但在文件中并非如此表现。原因就是数值自动转为了double类型。现在我们知道问题的原因,解决办法也就很简单。我们写个方法,把float转为double类型,不劳它自己费心。自己转。哈哈

解决方案:

//double值保留俩位小数

public double twoPointD(double d){
BigDecimal bd = new BigDecimal(d);
bd = bd.setScale(2,4);
d = bd.doubleValue();
return d;
}

分享到:
评论

相关推荐

    poi:适合解析小的excel文件,文件稍微大一点就出现OOM。

    事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 <groupId>org.apache.poi <artifactId>poi <version>3.15 ...

    通用的POI导入Excel解决方案

    在项目中,经常免不了要导入、导出Excel,导出Excel稍微简单点,制作一张模板,然后将查询之后的数据写入到模板中即可,导出程序可以做到一次写好,基本上就可以通用。 ExcelData excelData =...POI3.0 : 读取Excel文件

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取...此解决方案可支持千万数据的传输不报错

    POI读写海量Excel(详细解读)

    目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本。另外一种是Apache的Jakarta POI,相比于...目前还没有好的解决方案,建议对于海量数据写入操作,尽量使用Excel2007。

    poi导出excel的使用

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。...Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。

    java Excel文件转PDF文件

    java将Excel文件转换未pdf文件。依赖itext和poi。附件是一个完整的工程。

    Excel报表完美解决方案

    java中输出到excel各种操作接口 如何用POI来读取/写入完整的Excel文件

    poi教程,用于java解析,excel文件转换

    poi教程,用于java解析,excel文件转换,在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中,常常有客户这样子要求:你要把我们的报表...

    poi3.9 jar包下载

    Apache官网对poi的解释: Apache POI项目的任务是根据Office Open XML标准(OOXML)和Microsoft的... Apache POI是您的Java Excel解决方案(适用于Excel 97-2008)。我们有一个完整的API用于移植其他OOXML和OLE2格式。

    Linux POI easyExcel解决方案.zip

    解决在Linux系统下,POI、easyExcel 报错 java.lang.IllegalArgumentException: The workbook already contains a sheet named。原因是缺少了字体文件,如果是Docker部署使用本资源即可。内部提供字体资源以及代码...

    POI导入测试用数据users.xls

    Apache POI项目的任务是创建和维护Java API,以便根据Office Open XML标准...Apache POI是您的Java Excel解决方案(适用于Excel 97-2008)。我们有一个完整的API用于移植其他OOXML和OLE2格式,并欢迎其他人参与。

    poi最新版本及收集的帮助资料

    java的POI操作Excel文件.doc POI_API帮助文档.chm poi-bin-3.9-20121203.tar.gz poi帮助.docx POI中文帮助文档.pdf poi中文教程.doc第一章 POI简介 实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为...

    POI操作WORD 官方测试案例 DEMO.zip

    Apache POI 提供 Java 操作 Excel 解决方案(适用于 Excel97-2008)。 2 Apache POI的组件 Apache POI包含用于MS-Office的所有OLE2复合文档的类和方法。 此API的组件列表如下: POIFS:此组件是所有其他POI元素的...

    java多线程导出excel(千万级别)优化

    轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着

    apache poi-3.15包

    Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件....Apache POI 提供Java操作Excel解决方案。

    (ApachePOIHSSFandXSSF快速指南帮助文档

    Apache POI 提供Java操作Excel解决方案。 HSSF - 提供读写Microsoft Excel XLS格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。 HWPF - 提供读写Microsoft Word DOC格式档案的功能。...

    Spring-Excel-to-Object-Binding-Validation:Spring Excel 上传文件到对象绑定

    Spring-Excel 到对象绑定Spring Excel 上传文件到对象集合绑定这是所有想要实现解决方案的程序员的事情上传文件(此处为 Excel) 使用 Apache POI 解析文件将 excel 行绑定到 POJO 的集合(重新)在动态绑定中使用 ...

    poi

    Apache POI是您的Java Excel,Word和PowerPoint解决方案。 我们拥有用于移植其他OOXML和OLE 2复合文档格式的完整API,并欢迎其他人参与。https://mirrors.tuna.tsinghua.edu.cn/apache/poi/dev/

Global site tag (gtag.js) - Google Analytics