• 关于poi操作excel我使用的一些修饰操作


    被这情况恶心了。我的excel默认为常规,然后写入数字就成类似number类型,获取值得到的是double类型,2变成2.0.号码变成科学计数法。

    做功能找了一段时间,保存下来防止忘记下次浪费时间。

    设置单元格样式。

    cell.setCellStyle(HssfCellStyle);

    设置指定列样式

    sheet.setDefaultColumnStyle(int columnIndex, HssfCellStyle style)

    获取wb中的所有的sheet

    for(int i = 0,  j = wb.getNumberOfSheets(); i<j; i++ ){

      HSSFSheet sheet = wb.getSheetAt(i);

    }

    获取表中的所有列的编号

    for(int i = 0; i <sheet.getRow(0).getPhysicalNumberOfCells(); i++){

    }

    设置单元格的类型样式:

    第一段: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种内置的数据格式,如下面所示。 
    
     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)。  
     
     
     
    第二段:POI中Excel文件Cell的类型 
    在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如下面所示。 
    
    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。
     
     
    好了读完上面两段文字我想大家关于CELL类型和格式应该清楚了,更应该清楚的是到底怎么才能将‘设置单元格格式’改成文本然后再导出
    解决方案:就是上面代码中的ExcelOut类里面createTableRow方法中的一段代码
     
                HSSFCellStyle cellStyle2 = demoWorkBook.createCellStyle();
                HSSFDataFormat format = demoWorkBook.createDataFormat();
                cellStyle2.setDataFormat(format.getFormat("@"));
                cell.setCellStyle(cellStyle2);

    设置类型代码来源:http://blog.csdn.net/abcde123_123/article/details/52352556

    第一段: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种内置的数据格式,如下面所示。 

     HSSFDataFormat的数据格式 

    内置数据类型 
    编号 

    "General" 


    "0" 


    "0.00" 


    "#,##0" 


    "#,##0.00" 


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


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


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


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


    "0%" 


    "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)。  

     

     

     

    第二段:POI中Excel文件Cell的类型 
    在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如下面所示。 

    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。

     

     

    好了读完上面两段文字我想大家关于CELL类型和格式应该清楚了,更应该清楚的是到底怎么才能将‘设置单元格格式’改成文本然后再导出

    解决方案:就是上面代码中的ExcelOut类里面createTableRow方法中的一段代码

     

                HSSFCellStyle cellStyle2 = demoWorkBook.createCellStyle();

                HSSFDataFormat format = demoWorkBook.createDataFormat();

                cellStyle2.setDataFormat(format.getFormat("@"));

                cell.setCellStyle(cellStyle2);

  • 相关阅读:
    细说Unity3D(一)——移动平台动态读取外部文件全解析
    React16新增生命周期与旧版本生命周期的区别
    refs的作用是什么,你在什么业务场景下使用过refs
    react setState 的用法
    webpack中,是借助loader完成的JSX代码的转化,还是babel?
    虚拟dom是什么?为什么虚拟dom会提升代码性能?
    react 性能优化的最佳实践?
    你会把数据统一放在 redux 中管理,还是共享数据放在 redux 中管理?
    redux 中间件的原理是什么?
    谈谈你对This对象的理解?
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7239545.html
Copyright © 2020-2023  润新知