看了以往的帖子,也有许多人提类似的问题,一直没有得到很好的解决,现我再开贴求教各位了,谢谢!
我现有一批excel,其中都包含出生年月列,出生年月信息格式如下:“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”,在excel中显示的是正常,但是我点击该单元格,会显示成XX/XX/XX型的日期形式,并且我通过jxl读无法正确显示,显示的是数字,我获得单元格的类型gettype()显示的是Number类型,如何能得到正确的原始形式,即“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”的字符串类型。
我现有一批excel,其中都包含出生年月列,出生年月信息格式如下:“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”,在excel中显示的是正常,但是我点击该单元格,会显示成XX/XX/XX型的日期形式,并且我通过jxl读无法正确显示,显示的是数字,我获得单元格的类型gettype()显示的是Number类型,如何能得到正确的原始形式,即“平成XX年XX月XX日”或者是“昭和XX年XX月XX日”的字符串类型。
从这句看,你excel设置的应该是Date类型的,这样的话,你输入XX/XX/XX后,会自己转成你定义的格式。右击,选“单元格属性”,会看到excel中的类型,并可以设置格式,格式中前面带*的,表示它会根据你的系统读取相应格式的顺序,因此如果想固定格式的话,excel中单元格格式不能选前面带*的。
你用jxl读取是Number类型的,你可以先看一下excel中是什么类型的。如果不对应,就是jxl和office的版本不匹配。
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);
}
{
Date date = org.apache.poi.hssf.usermodel.HSSFDateUtil.getJavaDate(nc.getValue());
cValue = sdf.format(date);
}