本帖最后由 plutowang 于 2010-12-16 14:03:16 编辑

解决方案 »

  1.   

    Jakata Poi HSSF可以判断单元格类型,下面代码读excel2003时OK的,2007的你可以试一下int cellType = cell.getCellType();
    switch (cellType)
    {
    case Cell.CELL_TYPE_BOOLEAN:
    case Cell.CELL_TYPE_NUMERIC:
    case Cell.CELL_TYPE_STRING:
    case Cell.CELL_TYPE_FORMULA:
    case Cell.CELL_TYPE_BLANK:
    case Cell.CELL_TYPE_ERROR:
    default:
    }
      

  2.   

    2003中if (HSSFDateUtil.isCellDateFormatted(cell)) {    
        Date d = cell.getDateCellValue();    
        DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");    
        data = formater.format(d);   
    }else{    
    NumberFormat f=new DecimalFormat("############");
    data = (f.format((dataCell.getNumericCellValue()))+"").trim(); 
    }
    但是不知道2007中与2003HSSFDateUtil对应的类是哪个?没有XSSFDateUtil
      

  3.   

    HSSFDateUtil.isCellDateFormatted(cell) 03有这个方法
    你看07有没
      

  4.   

    郁闷死  我是根据后缀名判断是读取03还是07 基本没区别
    只是07的类是XSSF打头
    03的是HSSF打头用的
    类不同。代码基本一样
    但是没找到 07中与03中HSSFDateUtil对应的类。
    想直接用用03的方法试试
    但是03的HSSFDateUtil.isCellDateFormatted(cell)
    需要的是HSSFCell类型的参数
    07中用的单元格对象是XSSFCell类型 又不知道怎么强转。
    网上找了好久都没找到才来csdn上找强人帮助。。
    坐等啊。。我现在项目就差这一点点了
      

  5.   

    excel全选所有单元格  右键-设置单元格格式-数字-文本
    POI里全用Stringvalue 读
      

  6.   


    上述方法07和03是一样的
    但是excel中 日期时间 和数字一样 也是数字类型 Cell.CELL_TYPE_NUMERIC
    但是判断出是Cell.CELL_TYPE_NUMERIC 类型后03中还要用
     HSSFDateUtil.isCellDateFormatted(cell) 此是方法来判断是不是时间类型 
    具体情况我在三楼已经说过。
    而07中找不到有判断是不是时间的方法
    请解决问题的人最好能自己先实践下,不要粘贴了事。。
      

  7.   

    XSSFCell xCell = xRow.getCell(cellNum);if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)
      

  8.   

    现在的poi中的api好像分不出来的。要想其他办法了。
      

  9.   

    03中可以啊HSSFDateUtil.isCellDateFormatted(cell)是时间的返回true 否则返回false 
     07应该有对应的方法吧。。我没找到。。
      

  10.   

    有两种方式可以辨别NUMERIC Cell储存的是否是日期: 方法一:如果用的是POI,可以直接用HSSFDateUtil.isCellDateFormatted(cell)这个方法。 
    Java代码  
    case HSSFCell.CELL_TYPE_NUMERIC:   
        if (HSSFDateUtil.isCellDateFormatted(cell)) {   
            double d = cell.getNumericCellValue();   
            Date date = HSSFDateUtil.getJavaDate(d);   
        }   case HSSFCell.CELL_TYPE_NUMERIC:
        if (HSSFDateUtil.isCellDateFormatted(cell)) {
            double d = cell.getNumericCellValue();
            Date date = HSSFDateUtil.getJavaDate(d);
        } 方法二:如果用的是Jxl,可以将cell.getCellFormat 强制转换成 XFRecord。然后判断XFRecord.formatIndex 如果等于 58就是DateCell。 
    Java代码  
    if (cell.getType() == CellType.NUMBER) {   
        NumberCell nc = (NumberCell) cell;   
        XFRecord xfr = (XFRecord) nc.getCellFormat();   
        final int INDEX_OF_DATE = 58;   
        if(xfr.formatIndex == INDEX_OF_DATE) {   
            Date date = HSSFDateUtil.getJavaDate(nc.getValue());   
            content = dateformat.format(date);   
        }    
    }  if (cell.getType() == CellType.NUMBER) {
        NumberCell nc = (NumberCell) cell;
        XFRecord xfr = (XFRecord) nc.getCellFormat();
        final int INDEX_OF_DATE = 58;
    if(xfr.formatIndex == INDEX_OF_DATE) {
         Date date = HSSFDateUtil.getJavaDate(nc.getValue());
         content = dateformat.format(date);
        } 
    }得到的这个double不能直接拿来用。转换可以用HSSFDateUtil.getJavaDate(double date)这个方法。 
      

  11.   

    在判断case Cell.CELL_TYPE_NUMERIC:
     还需要判断一下:
    if(DateUtil.isCellDateFormatted(cell)){
    k = new DataFormatter().formatRawCellContents(cell.getNumericCellValue(), 0, "yyyy-mm-dd");// 格式化日期
    }else{
    k=cell.getNumericCellValue()+"";   
    }
    break;完整代码请看我的博客:http://blog.163.com/aishu_55