一、需求:开发过程中,程序导出的Excel表中的数字为文本(即在Excel中表现为单元格左上角带绿色三角形),导致需要在Excel中先转换格式才能统计;表中的日期也为文本,不能直接利用Excel的自动刷选功能按月、季度和年度选择。
二、关键代码:
(1)设置为数值
HSSFCellStyle hssfCellStyleDouble = wb.createCellStyle();
HSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式
hssfCellStyleDouble.setDataFormat(df.getBuiltinFormat("#,##0.0"));//保留1位小数点
cell0.setCellValue(
Double.parseDouble(value))
;
cell0.setCellStyle(hssfCellStyleDouble);
(2)设置为日期
HSSFCellStyle hssfCellStyleDate = wb.createCellStyle();
hssfCellStyleDate.setDataFormat(df.getFormat("yyyy-MM-dd"));//
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
cell0.setCellValue(
format.parse(value)
);
cell0.setCellStyle(hssfCellStyleDate);
在图1中可以看到,单元格没有绿色三角形,元数据是整数则显示整数,是小数则保留一位小数,可直接统计。
在图2中可以看到,单元格显示的虽然是yyyy-mm-dd格式,但是在Excel中识别为yyyy/mm/dd格式,这是Excel日期格式默认识别的一种,所以在图3中可以看到可以直接利用EXCEL的自动筛选功能按月、季度和年度进行选择了。
单元格除了要设置格式外,保存到单元格的数据也要设置为同一格式,否则最终导出的Excel数据达不到你想要的效果。
一、需求:开发过程中,程序导出的Excel表中的数字为文本(即在Excel中表现为单元格左上角带绿色三角形),导致需要在Excel中先转换格式才能统计;表中的日期也为文本,不能直接利用Excel的自动刷选功能按月、季度和年度选择。二、关键代码:(1)设置为数值 HSSFCellStyle hssfCellStyleDouble = wb.createCellStyl...
一.关于
Excel
中自定义
日期
单元格
解析成字符串的问题
之前写了一篇
POI
解析
Excel
--------
poi
的简单使用及
格式
转换 的文章,文章中遗留了一个问题
case NUMERIC: // 数字类型 小数,整数,
日期
// 如果是数字类型的话,判断是不是
日期
类型
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 获取
日期
类...
先看导出用到了什么工具 查看源码发现 导出 使用了 Easy
Excel
立马想到 一般情况下导出实体的字段类型可能是String 才会导致 数字类型 在
Excel
中是
数值
类型的字符串
去找导出实体对象 查看相应字段类型
很遗憾 并不是想象中的一般情况
这里的字段类型都是BigDecimal 按道理来说 导出的 数
最近做的一个ITFIN的项目中,后台需要用
POI
实现导出功能,导出的数据中有文本
格式
,也有货币
格式
,所以为了方便在将来导出的表格中做计算,存放货币的
单元格
需要
设置
为
数值
类型。
导出的
Excel
的
单元格
都是文本
格式
(
单元格
左上角有个小三角):
费了不少功夫,终于把“小三角”去掉了,这里总结并分享一下问题的解决方法。
通过
poi
导出
excel
的过程大致是这样的:
最近做项目遇到的坑,百度了半天导出都为货币类型、自定义类型和常规类型,,,最后终于解决,在此记录一下
其中contextstyle.setDataFormat(df.getFormat("0_ "));要特别注意"0_ ",下划线后面有一个空格!!!,缺少空格则不会导出为
数值
类型。
注意空格!!!注意空格!!!注意空格!!!
*
设置
Excel
单元格
为
数值
类型便于公式运算
* @param workbook
* @param contextstyle
```
java
// 创建下拉列表对象
DataValidationHelper validationHelper = new XSSFDataValidationHelper(sheet);
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(new String[]{"选项1", "选项2", "选项3"});
//
设置
下拉列表数据有效性约束对象到指定的
单元格
区域
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
sheet.addValidationData(dataValidation);
在上面的代码中,`sheet` 是一个 `org.apache.
poi
.ss.usermodel.Sheet` 对象,表示您要
设置
下拉框的
单元格
所在的工作表。在这个示例中,我们创建了一个下拉列表对象,并通过 `DataValidationHelper.createExplicitListConstraint` 方法将选项列表传递给它。然后,我们使用 `XSSFDataValidationHelper` 类的 `createValidation` 方法创建一个数据有效性约束对象,并将其添加到指定的
单元格
区域。在这个示例中,我们将下拉框添加到第一行第一列的
单元格
。
请注意,以上示例是针对 XLSX 文件
格式
的。如果您使用的是旧的 XLS 文件
格式
,则需要使用 `HSSFDataValidationHelper` 类而不是 `XSSFDataValidationHelper` 类。
net.sf.json.JSONException: java.lang.NoSuchMethodException: Property 'username' has no getter method