zoukankan      html  css  js  c++  java
  • poi操作officePOI操作excel中的数据格式(日期类型)

    7.3.3 POI中Excel文件Cell的类型

    在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如表7-3所示。

    表7-3 Cell的类型

    CellType

    说明

    CELL_TYPE_BLANK

    空值

    CELL_TYPE_BOOLEAN

    布尔型

    CELL_TYPE_ERROR

    错误

    CELL_TYPE_FORMULA

    公式型

    CELL_TYPE_STRING

    字符串型

    CELL_TYPE_NUMERIC

    数值型

    本例采用了CELL_TYPE_STRING和CELL_TYPE_NUMERIC类型,因为在Excel文件中只有字符串和数字。如果Cell的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该Cell的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的。Excel中的Date表示当前时间与1900年1月1日相隔的天数,所以需要调用HSSFDateUtil的isCellDateFormatted方法,判断该Cell的数据格式是否是Excel Date类型。如果是,则调用getDateCellValue方法,返回一个Java类型的Date。

    实际上Excel的数据格式有很多,还支持用户自定义的类型,在Excel中,选择一个单元格然后右键选择“设置单元格格式”,在弹出的单元格格式中选中“数字”,如图7-14所示。

    图7-14 Excel的单元格格式

    图中的数据有数值、货币、时间、日期、文本等格式。这些数据格式在POI中的HSSFDataFormat类里都有相应的定义。

    HSSFDataFormat是HSSF子项目里面定义的一个类。类HSSFDataFormat允许用户新建数据格式类型。HSSFDataFormat类包含静态方法static java.lang.String getBuiltinFormat(short index),它可以根据编号返回内置数据类型。另外static short getBuiltinFormat(java.lang.String format)方法则可以根据数据类型返回其编号,static java.util.List getBuiltinFormats()可以返回整个内置的数据格式列表。

    在HSSFDataFormat里一共定义了49种内置的数据格式,如表7-4所示。

    表7-4 HSSFDataFormat的数据格式

    内置数据类型

    编号

    "General"

    0

    "0"

    1

    "0.00"

    2

    "#,##0"

    3

    "#,##0.00"

    4

    "($#,##0_);($#,##0)"

    5

    "($#,##0_);[Red]($#,##0)"

    6

    "($#,##0.00);($#,##0.00)"

    7

    "($#,##0.00_);[Red]($#,##0.00)"

    8

    "0%"

    9

    "0.00%"

    0xa

    "0.00E+00"

    0xb

    "# ?/?"

    0xc

    "# ??/??"

    0xd

    "m/d/yy"

    0xe

    "d-mmm-yy"

    0xf

    "d-mmm"

    0x10

    "mmm-yy"

    0x11

    "h:mm AM/PM"

    0x12

    "h:mm:ss AM/PM"

    0x13

    "h:mm"

    0x14

    "h:mm:ss"

    0x15

    "m/d/yy h:mm"

    0x16

    保留为过国际化用

    0x17 - 0x24

    "(#,##0_);(#,##0)"

    0x25

    "(#,##0_);[Red](#,##0)"

    0x26

    "(#,##0.00_);(#,##0.00)"

    0x27

    "(#,##0.00_);[Red](#,##0.00)"

    0x28

    "_($*#,##0_);_($*(#,##0);_($* /"-/"_);_(@_)"

    0x29

    "_(*#,##0.00_);_(*(#,##0.00);_(*/"-/"??_);_(@_)"

    0x2a

    "_($*#,##0.00_);_($*(#,##0.00);_($*/"-/"??_);_(@_)"

    0x2b

    "_($*#,##0.00_);_($*(#,##0.00);_($*/"-/"??_);_(@_)"

    0x2c

    "mm:ss"

    0x2d

    "[h]:mm:ss"

    0x2e

    "mm:ss.0"

    0x2f

    "##0.0E+0"

    0x30

    "@" - This is text format

    0x31

    在上面表中,字符串类型所对应的是数据格式为"@"(最后一行),也就是HSSFDataFormat中定义的值为0x31(49)的那行。Date类型的值的范围是0xe-0x11,本例子中的Date格式为""m/d/yy"",在HSSFDataFormat定义的值为0xe(14)。

    需要注意的一点是,所创建的Excel必须是在Microsoft Excel 97到Excel XP的版本上的,如果在Excel 2003中创建文件后,在使用POI进行解析时,可能会出现问题。它会把Date类型当作自定义类型。POI目前只提供对Microsoft Excel XP以下的版本的支持,在以后的版本中,希望会提供对Microsoft Excel 2003更好的支持。

  • 相关阅读:
    pow()函数结果强制转化为int造成误差的分析
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    博客园鼠标点击特效代码
    codeblocks更改颜色主题
    codeblocks1712设置中文
    SQl
    项目中nodejs包高效升级插件npm-check-updates
    正则表达式的整理(将金钱数变成带有千分位)
    从一个数组中过滤出另外一个数组中相关字段相等的数据
    IONIC3 打包安卓apk详细过程(大量图文)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3201132.html
Copyright © 2011-2022 走看看