poi操作excel之: 将NUMERIC转换成TEXT
一、NUMERIC TO TEXT(生成excel)
代码生成一个excel文件:
public static void generateExcel() throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("天下霸唱");
sheet.setColumnWidth(0, 10000); // 设置excel一列的宽度
// one style
Font font = workbook.createFont();
font.setFontName("微软雅黑");
font.setBold(true);
font.setFontHeightInPoints((short) 14);
Font font1 = workbook.createFont();
font1.setFontName("微软雅黑");
font1.setFontHeightInPoints((short) 14);
XSSFCellStyle centerAlignStyle = workbook.createCellStyle();
centerAlignStyle.setAlignment(HorizontalAlignment.CENTER);
centerAlignStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 上下垂直居中
centerAlignStyle.setFont(font); //设置字体
centerAlignStyle.setWrapText(true); // 换行
XSSFCellStyle centerAlignStyle1 = workbook.createCellStyle();
centerAlignStyle1.setAlignment(HorizontalAlignment.CENTER);
centerAlignStyle1.setVerticalAlignment(VerticalAlignment.CENTER);
centerAlignStyle1.setFont(font1);
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("一个值");
cell.setCellStyle(centerAlignStyle);
Row row1 = sheet.createRow(1);
Cell cell1 = row1.createCell(0);
cell1.setCellValue(String.valueOf(1242532523632L));
cell1.setCellStyle(centerAlignStyle1);
Row row2 = sheet.createRow(2);
Cell cell2 = row2.createCell(0);
cell2.setCellValue("00000000000009");
cell2.setCellStyle(centerAlignStyle1);
FileOutputStream outputStream = new FileOutputStream("test.xlsx");
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
public static void main(String[] args) throws Exception {
generateExcel();
}
生成的excel如下:
但你用鼠标点进A2和A3,然后移出鼠标,变成了:
在常规模式下,excel就将数值格式化成那样了,如果你将常规设置成文本那就是正常的字符串了。
要让数值不被excel格式化,只需加入下面这行代码:
centerAlignStyle1.setDataFormat(BuiltinFormats.getBuiltinFormat("text")); // 设置为文本
再次运行你的代码,你应该发现这个神奇的效果了。
二、NUMERIC TO TEXT(读取excel)
要是excel已经是下面这样了:
Java代码在读取的时候想要的是字符串:1242532523632,那怎么办?
public static String getCellStringValue(Cell cell) {
if (cell == null) {
return "";
}
CellType type = cell.getCellTypeEnum();
String cellValue;
switch (type) {
case BLANK:
cellValue = "";
break;
case _NONE:
cellValue = "";
break;
case ERROR:
cellValue = "";
break;
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case STRING:
cellValue = cell.getStringCellValue();
break;
case FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = "";
break;
}
return cellValue;
}
public static void readExcel() throws Exception {
FileInputStream inputStream = new FileInputStream(new File("test.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
Cell cell = sheet.getRow(1).getCell(0);
String cellValue = getCellStringValue(cell);
System.out.println(cellValue);
workbook.close();
inputStream.close();
}
public static void main(String[] args) throws Exception {
readExcel();
}
上面的执行的结果是:
1.242532523632E12 //不是我们想要的字符串呢
那就使用poi的另一个神器NumberToTextConverter,改写switch的代码:
case NUMERIC:
// 改成这样
cellValue = NumberToTextConverter.toText(cell.getNumericCellValue());
break;
执行后返回:
1242532523632 //我们想要的结果
That’s all, 哈哈!
Google英文搜索关键字:
excel poi get text value from a numeric cell
excel poi format a cell to text type
参考链接:
https://stackoverflow.com/questions/36018660/how-to-set-a-cell-format-to-text
https://www.programcreek.com/java-api-examples/index.php?api=org.apache.poi.ss.util.NumberToTextConverter
poi操作excel之: 将NUMERIC转换成TEXT的更多相关文章
- POI操作Excel异常Cannot get a text value from a numeric cell
控制台抛出异常:java.lang.IllegalStateException: Cannot get a text value from a numeric cell 在java中用POI解析exc ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- 自己的包poi操作Excel工具
在前面的文章<使用poi读写Excel>中分享了一下poi操作Excel的简单演示样例.这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完毕的功能是:读取Excel.汇总E ...
- AIO5销售发货单numeric算数溢出报错:将numeric转换成数据类型numeric时出现算数溢出错误
问题描述: 销售发货单报错算数溢出:将numeric转换成数据类型numeric时出现算数溢出错误.具体如下图: 当销售发货单的数量为>7万时,报错 当销售发货单的数量为<7万时,单据正常 ...
- POI操作Excel(xls、xlsx)
阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...
- java里poi操作excel的工具类(兼容各版本)
转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- Java POI操作Excel注意点
excel的行索引和列索引都是从0开始,而行号和列号都是从1开始 POI·操作excel基本上都是使用索引 XSSFRow对象的 row.getLastCellNum() 方法返回的是当前行最后有效列 ...
- 使用POI操作Excel时对事先写入模板的公式强制执行
场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生 ...
随机推荐
- 1190: 零起点学算法97——A == B ?(Java)
WUSTOJ 1190: 零起点学算法97--A == B ? Description Give you two integer numbers A and B, if A is equal to B ...
- Unicode 编码 范围
目录 所有字符 文字部分 ( U+0000 – U+007F) 基本拉丁字符 ( U+0080 – U+00FF) 增补拉丁字符集 1 ( U+0100 – U+017F) 拉丁字符扩展集 A ( U ...
- ASM实例修改SYS密码
修改ASM实例中SYS用户密码 How To Change ASM SYS PASSWORD ? (文档 ID 452076.1) Oracle Database - Enterprise Editi ...
- (五)Activiti之查看最新版本的流程定义
一.查看最新版本的流程定义 因为每个流程定义都可能会有好几个版本,所以有时候我们有这样的需求,查询出最新版本的流程定义的集合 第一步:我们通过Activiti接口来获取根据流程定义Version升序排 ...
- 在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题)
原文:在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 求一查询语句 http: ...
- 上传文件-layui+ashx
public void ProcessRequest (HttpContext context) { if (true) { context.Response.ContentType = " ...
- solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)
一.配置中文分析器 使用IKAnalyzer 配置方法: 1)把IK的jar包添加到solr工程中/WEB-INF/lib目录下 2)把IK的配置文件扩展词典, ...
- HTTP协议 学习
HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程.客户端连上web服 ...
- 【原创】大叔经验分享(94)jdbc连接mysql、sqlserver、oracle
Mysql driver下载:https://mvnrepository.com/artifact/mysql/mysql-connector-java import java.sql.*; publ ...
- Genymotion上运行ARM架构Android项目
问题 Genymotion是x86的模拟器,在集成一些第三方的SDK时需要添加一些放在armeabi.armeabi-64文件夹下面的.so文件,这些文件在arm架构下才能运行.这时模拟器就不能用了. ...