`
guoqingcun
  • 浏览: 55838 次
  • 性别: 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;
}

分享到:
评论

相关推荐

    java poi处理excel数据

    首先,`问题.docx`可能是你在使用POI过程中遇到的问题汇总,它可能包含了错误信息、解决步骤或常见问题的解决方案。通过阅读这份文档,你可以避免或解决类似的问题,提升开发效率。 其次,`统计年鉴示例.xlsx`是一...

    poi读取excel文件实例(兼容excel2007)

    在Java世界里,当你需要处理Excel 2007及以上版本(即XLSX格式)的文件时,Apache POI是一个非常实用的库。由于JXL库不支持XLSX格式,所以Apache POI成为了首选解决方案。 在“poi读取excel文件实例”中,我们将...

    POI解析excel文件

    总之,Apache POI 是Java开发中处理Excel文件的强大工具,无论是读取用户上传的数据还是创建可下载的报表,都能提供高效且灵活的解决方案。通过熟练掌握POI,开发者可以轻松地将Excel集成到Web应用中,实现数据的...

    POI 导入Excel 提醒LeftoverDataException求帮助

    总之,`LeftoverDataException`是POI在处理Excel文件时遇到的一种错误,通常需要从文件本身、编码、单元格格式、代码逻辑以及内存分配等多个角度进行排查。通过以上建议,开发者应该能够找到解决问题的途径。如果...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,...无论是简单的数据导出还是复杂的报表生成,POI都能够提供相应的解决方案。希望本文能够帮助大家更好地理解和使用Apache POI。

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

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

    导入poi jar包实现使用Beanshell读写Excel文件

    在Java编程环境中,Apache POI库是一个非常实用的工具,它允许我们操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。...不过,使用时要考虑性能和资源消耗,选择最适合的解决方案。

    POI实现Excel导入导出并附带加载进度条

    总之,这个项目是一个完整的Java解决方案,用于处理Excel文件的导入导出,同时具备用户友好的进度条显示。它利用了Apache POI的强大功能,结合maven的依赖管理,以及可能的GUI组件,提供了高效且直观的数据操作体验...

    POI导入excel大数据处理,支持excel2003,2007

    在Java开发中,当需要处理大量的Excel数据时,POI库提供了高效且灵活的解决方案。标题提到的“POI导入excel大数据处理”是指利用Apache POI进行大量Excel数据的导入操作,同时它兼容Excel 2003(.xls格式)和2007...

    android POI 读取excel 精简jar

    在Android平台上,使用Apache POI库来读取Excel文件是一种常见的解决方案。Apache POI是一个流行的开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在这个“android ...

    通用的POI导入Excel解决方案

    在IT行业中,处理Excel文件是常见的任务,尤其是在数据处理、报表生成和数据分析等领域。Apache POI 是一个流行的Java库,专门用于读写Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。本教程将深入探讨如何...

    Springboot+Poi实现Excel的导入导出

    5. **安全考虑**:在处理用户上传的Excel文件时,需要防止SQL注入等安全问题。对输入数据进行验证和过滤,确保数据的合法性。 总之,"Springboot+Poi实现Excel的导入导出"项目结合了多种强大的工具,提供了一种高效...

    poi.zip java读取excel文件

    对于 Excel 文件,POI 使用 HSSF(Horizontally Stored Spreadsheet Format)来处理 .xls 文件(Excel 97-2007 格式),而 XSSF(XML Spreadsheet Format)则用于处理 .xlsx 文件(Excel 2007 及以后版本的格式)。...

    poi生成excel实例

    总的来说,这些文档和资源将帮助开发者深入理解如何使用Apache POI在Java环境中生成、编辑和格式化Excel文件,特别关注了中文字符处理和自动调整列宽等实际问题,提供了多种实用的解决方案。对于那些需要处理Excel...

    java的POI操作Excel文件.docx

    为解决这一问题,POI引入了SXSSF(Streaming Usermodel API),它允许在内存有限的情况下处理大型Excel文件,通过写入磁盘的临时文件来分批处理数据。 总结来说,Java的POI库是企业级开发中处理Excel文件的重要工具...

    解决poi读取excel2007出现内存溢出问题代码参

    以下是一些关键知识点和解决方案: 1. **内存管理策略**: - **SXSSF**:SXSSF是POI提供的一个内存效率更高的API,它允许以流式处理数据,只保留最近使用的行在内存中,其余的写入磁盘。默认情况下,它会保留100行...

    POI实现大数据量的excel文件解析

    标题中的“POI实现大数据量的excel文件解析”是指使用Apache POI库来处理大量数据的Excel文件。...在实际应用中,可能还需要考虑性能优化、错误处理和并发处理等方面的问题,以实现更高效的解决方案。

    SpringBoot +Mybatis +POI导入、导出Excel文件

    在现代企业级应用开发中,数据的导入与导出功能是非常常见且重要的。SpringBoot结合Mybatis框架提供了高效...通过理解SpringBoot的自动配置、Mybatis的SQL映射以及POI的Excel操作,我们可以轻松地构建类似的解决方案。

Global site tag (gtag.js) - Google Analytics