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

本文介绍了解决Excel操作中常见问题的方法,包括读取空单元格时避免NullPointerException异常的工具类实现,以及如何正确保存数值类型数据到Excel文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文中要解决两个问题

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值