看了以往的帖子,也有许多人提类似的问题,一直没有得到很好的解决,现我再开贴求教各位了,谢谢!
我现有一批excel,其中都包含出生年月列,出生年月信息格式如下:“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”,在excel中显示的是正常,但是我点击该单元格,会显示成XX/XX/XX型的日期形式,并且我通过jxl读无法正确显示,显示的是数字,我获得单元格的类型gettype()显示的是Number类型,如何能得到正确的原始形式,即“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”的字符串类型。

解决方案 »

  1.   

    手動把這列貼到txt中  去掉格式  然後再貼回來 試試~  笨點就是
      

  2.   

    谢谢,我试了试,不可以,我想是excel本身识别单元格内容的事。最好有更好的办法,因为我需要大批量的处理
      

  3.   

    在excel中显示的是正常,但是我点击该单元格,会显示成XX/XX/XX型的日期形式。
    从这句看,你excel设置的应该是Date类型的,这样的话,你输入XX/XX/XX后,会自己转成你定义的格式。右击,选“单元格属性”,会看到excel中的类型,并可以设置格式,格式中前面带*的,表示它会根据你的系统读取相应格式的顺序,因此如果想固定格式的话,excel中单元格格式不能选前面带*的。
    你用jxl读取是Number类型的,你可以先看一下excel中是什么类型的。如果不对应,就是jxl和office的版本不匹配。
      

  4.   

    如果没作为字符串取的话,应该是excel中单元格类型的问题
      

  5.   

    我在网上又查了查,自己试试明白了一些道理。和大家分享。
    excel可以自动识别日期格式的数据,所以我输入“平成XX年XX月XX日”在日文系统下,他会转换成对应的年数,比方说:我输入的的是“平成21年8月4日”,就会转换成“2009/08/04”,至于显示的数字,好像在excel中保存的日期都是以从你给定的日期到1900年之间的时间数来保存的,所以我们读的话会显示数字。
    在jxl中,我没找到合适的解决办法,不过看到poi可以用如下语句得到“2009/08/04”的形式,我再按日本年份的区间转换回昭和、平成就可以了。但是还有一点不是很明白,网上说用poi的xfr.formatIndex=58才证明该数字是日期类型,但是我现在发现56、185也是,回来再研究一下是否和我测试时设置单元格的样式有关。希望其他了解的朋友多指正。
    Cell tempCell;
    NumberCell nc = (NumberCell) tempCell;
    XFRecord xfr = (XFRecord) nc.getCellFormat();
    if (xfr.formatIndex == 56
    || xfr.formatIndex == 58
    || xfr.formatIndex == 185) {
    Date date = HSSFDateUtil.getJavaDate(nc.getValue());
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    String s_AllDate = sdf.format(date);
    }
      

  6.   

    至于这么费事吗?如果是单独处理excel,把数据全复制,然后粘贴时选纯文本粘贴就行了,如果要在程序里修改,不知道jxl有没有设置单元格属性的,但poi中有,把那列设置成文本类型就行了
      

  7.   

    if(xfr.formatIndex == 178 || xfr.formatIndex==181 || xfr.formatIndex==184)
                    {
                        Date date = org.apache.poi.hssf.usermodel.HSSFDateUtil.getJavaDate(nc.getValue());
                        cValue = sdf.format(date);
                    }
      

  8.   

    xfr.formatIndex  這個值何時為 日期 好像不太準確 ??