被这情况恶心了。我的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. qt——简单程序一步步来

    最简单的程序c1 #include "test.h" #include <QtGui/QApplication> #include <qapplication.h ...

  2. 提高myEclipse的开发效率和外观,这些你都设置了吗?

    [前言] 为什么我的myeclipse开启速度那么慢,为什么别人能哗啦啦几个快捷键打出一片代码?刚开始使用myeclipse的时候,相信大家都有这个疑问,慢慢的,也懂得一些配置,我也不例外,在此,把常 ...

  3. Hive重写表数据丢失风险记录

    若在Hive中执行INSERT OVERWRITE重写同一个表的数据时,有可能会造成数据丢失. 如 INSERT OVERWRITE TABLE table_name SELECT * FROM ta ...

  4. (转) 密码学中的“盐值 Salt”

    为什么要在密码里加点“盐” 盐(Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”. 以上这句话是维基百科上对于 ...

  5. hive表与外部表的区别

    相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表在概念上很类似.我们可以用下面的语句在Hive里面创建一个表: hive ...

  6. CCPC-Wannafly Winter Camp Day3 (Div2, onsite)

    Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解 ...

  7. UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 51: ord

    1.问题描述:一个在Django框架下使用Python编写的定时更新项目,在Windows系统下测试无误,在Linux系统下测试,报如下错误: ascii codec can't decode byt ...

  8. C++虚函数分析

    1.虚函数(impure virtual) c++虚函数主要是提供“运行时多态”,父类提供虚函数的默认实现,子类可以虚函数进行重写. 2.纯虚函数(pure virtual)       c++纯虚函 ...

  9. HDU1059 二进制拆分优化多重背包

    /*问你能不能将给出的资源平分成两半,那么我们就以一半为背包,运行多重背包模版 但是注意了,由于个数过大,直接运行会超时,所以要用二进制拆分每种的个数*/ #include<stdio.h> ...

  10. Core Java 6

    p277~p279: 1.使用解耦合的 try/catch 和 try/finally 语句块可以提高代码的清晰度,并且会报告 finally 子句中出现的错误. 2.假设利用 return 语句从 ...