一、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的更多相关文章

  1. 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 ...

  2. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  3. 自己的包poi操作Excel工具

    在前面的文章<使用poi读写Excel>中分享了一下poi操作Excel的简单演示样例.这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完毕的功能是:读取Excel.汇总E ...

  4. AIO5销售发货单numeric算数溢出报错:将numeric转换成数据类型numeric时出现算数溢出错误

    问题描述: 销售发货单报错算数溢出:将numeric转换成数据类型numeric时出现算数溢出错误.具体如下图: 当销售发货单的数量为>7万时,报错 当销售发货单的数量为<7万时,单据正常 ...

  5. POI操作Excel(xls、xlsx)

    阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...

  6. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  7. POI操作Excel

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

  8. Java POI操作Excel注意点

    excel的行索引和列索引都是从0开始,而行号和列号都是从1开始 POI·操作excel基本上都是使用索引 XSSFRow对象的 row.getLastCellNum() 方法返回的是当前行最后有效列 ...

  9. 使用POI操作Excel时对事先写入模板的公式强制执行

    场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生 ...

随机推荐

  1. c语言 c++程序运行过程

    我们写好的  .c  .cpp   文件在计算机中如何运行. 一个.c 文件  .cpp  文件  首先经过 预编译形成  . i 文件  在这个过程中 主要处理程序中的#  以及进行宏替换 然后编译 ...

  2. Scratch编程:牛顿的苹果——地心引力

    牛顿的苹果 同学们,你们知道牛顿的苹果的故事吗? 传说1665年秋季,牛顿坐在自家院中的苹果树下苦思着行星绕日运动的原因.这时,一只苹果恰巧落下来,它落在牛顿的脚边.就是这个偶尔的瞬间,牛顿发现了苹果 ...

  3. jq勾选

    1.取消勾选 $("box").attr("checked", false); 2.勾选 $("kbox").attr("chec ...

  4. JFinal(2)JFinal 学习资料

    JFinal 学习资料 :http://pan.baidu.com/s/1hsOcQ0G 密码:7lq3 , jfinal社区收费会员内部部分资料,博主网络搜集而来

  5. 数组的新API

    话不多数,直接上代码: 第一个输出1,2,3,4,5 在函数体中第一个console依次输出1,2,3,4,5 然后再将里面的内容逐个+1,所以第二个输出值为:2,3,4,5,6 但是这都不会改变原数 ...

  6. vue去哪儿网项目环境配置

     一.首先安装node.js 根据自己的(windows或mac)系统进行安装node,在开发环境中一般安装LTS版本.安装成功后,在终端输入"node -v"和"npm ...

  7. python matplotlib动态绘图

    matplotlib animation的官方文档: http://matplotlib.org/api/animation_api.html 接下来完成一个实时获取cpu数值,并绘图的功能. 1.动 ...

  8. Delphi 安装apk

    procedure ToInstallApk(filename: string); var aFile: Jfile; Intent: JIntent; begin Try aFile := TJfi ...

  9. 阿里P7级教你如何在Spring Boot应用程序中使用Redis

    在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...

  10. 一线互联网常见的Java面试题,你颤抖了吗程序员

    跳槽不算频繁,但参加过不少面试(电话面试.face to face面试),面过大/小公司.互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺 ...