被这情况恶心了。我的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. importlib模块与__import__详解

    importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 通过下面示例说明,有如下一个工程目录: name = 'test' def get ...

  2. Mybatis三剑客之mybatis-plugin

    搜索mybatis plugin并安装. 如果没有的话,就按照如下: 1. 简介     mybatis plugin作为一款优秀的mybatis跳转插件,比起free mybatis plugin插 ...

  3. Spring源码解析(二)BeanDefinition的Resource定位

    IOC容器的初始化过程主要包括BeanDefinition的Resource定位.载入和注册.在实际项目中我们基本上操作的都是ApplicationContex的实现,我们比较熟悉的ClassPath ...

  4. C#+GDAL读写文件

    读取shp文件: private void btnBrower_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFil ...

  5. python 操作 mysql 数据库 datetime 属性字段为 0000-00-00 00:00:00 的问题

    撇开 sqlalchemy, 先讲 MySQLdb 和 pymysql mysql 版本 mysql  Ver 14.14 Distrib 5.1.73 新建一个测试表 test, 结构如下: mys ...

  6. eclipse导入Java源码

    eclipse导入Java源码 下载源码包(一般jdk都自带了, 我的没有) src.zip eclipse -> window -> preferences -> JAVA -&g ...

  7. java8中接口中的default方法

    在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法, ...

  8. Linux centos7 redis安装教程

    1.下载解压 #下载至/home/install(或windows系统下载后上传) mkdir /home/install cd /home/install wget http://124.205.6 ...

  9. iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  10. Duilib嵌入CEF禁止浏览器响应拖拽事件

    转载:http://blog.csdn.net/liuyan20092009/article/details/53819473 转载:https://blog.csdn.net/u012778714( ...