被这情况恶心了。我的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" 
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);

关于poi操作excel我使用的一些修饰操作的更多相关文章

  1. .Net com组件操作excel(不建议采用Com组件操作excel)

    添加"Microsoft Office 12.0 Object Library" com组件 1 using System; using System.Data; using Sy ...

  2. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  3. apache POI 导出excel相关方法

    apache POI 操作excel无比强大.同时有操作word和ppt的接口. 下面讲解poi中常用方法. 1,设置列宽 HSSFSheet sheet = wb.getSheetAt(0); sh ...

  4. Java使用POI解析Excel表格

    概述 Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能. 常见的Excel格式有xls和xlsx.07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx ...

  5. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

  6. C#使用oledb操作excel文件的方法

    本文实例讲述了C#使用oledb操作excel文件的方法.分享给大家供大家参考.具体分析如下: 不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel ...

  7. python办公入门4:xlrd操作excel行

    操作excel行 1 #通过索引获取操作行 2 sheet=data.sheet_by_index(0) 3 #获取当前sheet下的有效行数 4 print(sheet.nrows) 5 #获取某一 ...

  8. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    关于封面:晚饭后回自习室的路上 Easyexcel 官方文档 Easyexcel | github 前言 最近也是在写的一个小练习中,需要用到这个.趁着这次就将写个整合的Demo给大家. 希望能够让大 ...

  9. JAVA的POI操作Excel

    1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...

随机推荐

  1. web前端开发http-server

    windows环境下需先安装npm 安装 npm install -g http-server http-server -a hostip -p port

  2. Tomcat安装(linux系统)

    首先解压: 进入配置文件: 统一tomcat的编码,避免乱码的问题: 保存退出. 注意: 查看打开的端口: /etc/init.d/iptables status 开启端口: iptables -A ...

  3. Tdrag

    Tdrag属于拖拽类的一款插件,基于jquery而成,兼容1.4以上版本的jquery,兼容浏览器:chrome.firfox.IE7等以上主流浏览器 插件加载 <script type=&qu ...

  4. Struct2小结:

    Action小结: 实现一个Action的最常用的方式:从ActionSupport继承: DMI动态方法调用,减少配置内容: 通配符 *_* ({1},{2})的使用更方便: 接收参数的方法(一般用 ...

  5. Websocket、长连接、循环连接

    [转]转自知乎高票回答  https://www.zhihu.com/question/20215561 一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系 ...

  6. 4.8 Routing -- Specifying The URL Type

    1. 默认的路由器使用浏览器的hash来加载应用程序的开始状态并且当你移动时同步保持.目前,这依赖于浏览器中存在的hashchange事件. 2. 假设下面的路由器,输入/#/posts/new将会把 ...

  7. git配置文件

    在用git开发项目的时候,今天出现一个项目的文件权限发生变化的时候,没有忽略,用了以前同事给的命令行忽略权限变化的文件 git config --global core.filemode false; ...

  8. Tomcat java.lang.OutOfMemoryError: PermGen space error

    Often time, Tomcat may hits the following java.lang.OutOfMemoryError: PermGen space error. java.lang ...

  9. C++ 把文件路径中的单斜杠“\”换成双斜杠“\\”

    <pre name="code" class="cpp"> #include <iostream> #include <strin ...

  10. Ubuntu安装 jdk.rpm 报错问题解决

    报错问题出现原因 第一次使用Ubuntu操作系统,很多命令及软件安装方式与以往使用的Linux操作系统(CentOS)有很大区别.现在总结使用Ubuntu在安装JDK中,遇到的问题及解决方法. roo ...