求助POI操作excel的问题!

wanjianfei 2009-04-13 09:37:46
本人最近做一个数据库的文件导入功能,需要从excel中读取数据代码如下:
/**
* 获取单元格数据内容为字符串类型的数据
*
* @param cell
* Excel单元格
* @return String 单元格数据内容
* @throws ParseException
*/
private String getStringCellValue(HSSFCell cell) throws ParseException {
String strCell = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
strCell = String.valueOf((int)cell.getNumericCellValue());
boolean flag1=HSSFDateUtil.isCellDateFormatted(cell);
if(flag1){
strCell = DateUtil.dateFormat(cell.getDateCellValue(), "yyyy-MM-dd HH:mm");
}
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = String.valueOf(cell.getDateCellValue());
break;
}
if (strCell.equals("") || strCell == null) {
return "";
}
if (cell == null) {
return "";
}
return strCell;
}

//取得每行的值存入一个数组
public String[] getClomn(HSSFRow row) throws ParseException {

String[] clomn = new String [20];//;
HSSFCell cell;
for (int i = 0; i < 13; i++) {
row.getCell((short)i).setCellType(HSSFCell.CELL_TYPE_STRING);
clomn[i] = getStringCellValue(row.getCell((short) i));
// clomn[i]=(String) iterator.next();
}
return clomn;

读取Stringde的时候没有问题,但是在读取excel中的数字格式数据的时候出现了数据丢失现象,在数据库执行导入的时候没有报错,但是入库的数据明显不对,只要大于
‘214332728’(数字可能不准确记不清楚了)这个数字的数据数据库中全为这个数,原始数据全部丢失:
1、由于库中数据特殊,一般都是10位以上
2、数据量大,单纯的在表中全部转为文本格式,读取的时候还是出错。
求助高手解答如何读取数据值大的数据?

...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
架构修炼之道 2009-04-13
  • 打赏
  • 举报
回复
强!学习中!
wanjianfei 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wanjianfei 的回复:]
经过本人和同事的多方努力问题得以解决,下面是解决代码仅供大家参考:
private String getStringCellValue(HSSFCell cell) {
String strCell = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
/**问题的关键再此**/
                        //用BigDecimal.valueOf()这个方法处理以下读取的数值就OK了
strCel…
[/Quote]

在这个sheet的操作中,如果不用此方法,只要单元格的数字位数超过8位一定会出现数据丢失,而且不会报错。
wanjianfei 2009-04-13
  • 打赏
  • 举报
回复
经过本人和同事的多方努力问题得以解决,下面是解决代码仅供大家参考:
private String getStringCellValue(HSSFCell cell) {
String strCell = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
/**问题的关键再此**/
//用BigDecimal.valueOf()这个方法处理以下读取的数值就OK了
strCell =BigDecimal.valueOf((long) cell.getNumericCellValue())+"";
boolean flag1=HSSFDateUtil.isCellDateFormatted(cell);
if(flag1){
strCell = DateUtil.dateFormat(cell.getDateCellValue(), "yyyy-MM-dd HH:mm");
}
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
return strCell;
}
liu_zhaoqf 2009-04-13
  • 打赏
  • 举报
回复
mark

81,076

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧