EasyExcel——设置导出后excel金额支持自动计算(金融金额)
文章目录
- 前言
- 3.0版本之前
- 1、创建自定义单元格格式类
- 2、创建测试数据接收类
- 3、创建excel字段映射类
- 4、编写测试代码
- 运行结果
- 结论
前言
正常来说,使用EasyExcel导出文件的金额数属于常规
,会在左上角
出现小三角
的显示。
在3.0
版本之前,官方并未清晰的给出如何解决金融类型数据导出为数值
的方式,在github中给定的说法也仅限于升级版本至3.0
。
https://github.com/alibaba/easyexcel/issues/1646
3.0版本之前
然道说在3.0版本之前
,就不能实现上述操作了?
答案是否定的。
EasyExcel导出文件,每个列中的类型默认是常规
型,只需要变更单元格的类型即可。
有幸得到一位大佬的指导,解决方式如下所示:
1、创建自定义单元格格式类
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Workbook;public class NumberCellStyle implements CellWriteHandler {@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {Workbook workbook = writeSheetHolder.getSheet().getWorkbook();CellStyle cellStyle = workbook.createCellStyle();// 如果字段过多,可以考虑使用枚举,这里不做阐述// 判断字段名称是否是 money,如果是则将其单元格格式进行变更if ("money".equals(head.getFieldName())){cell.setCellType(CellType.NUMERIC);cellStyle.setDataFormat((short)4);cell.setCellStyle(cellStyle);}}}
2、创建测试数据接收类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.math.BigDecimal;@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserCurrency {private String name;private BigDecimal money;
}
3、创建excel字段映射类
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.math.BigDecimal;@Data
public class UserCurrencyExcel {@ExcelProperty(value = "别名",index = 1)private String name;@ExcelProperty(value = "金额",index = 2)private BigDecimal money;
}
4、编写测试代码
import com.alibaba.excel.EasyExcel;import java.io.File;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;public class ExcelTest {public static void main(String[] args) throws Exception {List<UserCurrency> userCurrencies = Arrays.asList(new UserCurrency("香蕉1", new BigDecimal(500.00)),new UserCurrency("香蕉2", new BigDecimal(1234567.00)));File file = new File("/test/test_w.xlsx");// 针对文件路径,获取文件所在路径之上的路径信息if(!file.getParentFile().exists()){file.getParentFile().mkdirs();}// 判断文件是否存在if(!file.exists()){file.createNewFile();}//EasyExcel.write(file, UserCurrencyExcel.class).sheet("test").doWrite(userCurrencies);EasyExcel.write(file, UserCurrencyExcel.class).registerWriteHandler(new NumberCellStyle()).sheet("test").doWrite(userCurrencies);}
}
运行结果
当然,有的客户会要求必须导出的内容有千分位,此时可以在映射类
的金融金额
字段上增加@NumberFormat("#,##0.00")
注解来实现。如下所示:
运行程序后,显示的金额数为:
结论
解决金融金额数有两种方式:
- 1、不能升级3.0版本,可以考虑改变单元格样式类型。
- 2、可以升级3.0版本,则不需要做任何的改动;3.0官方对其做了适配。
EasyExcel——设置导出后excel金额支持自动计算(金融金额)相关推荐
- easyexcel生成动态模板(模板支持下拉框),动态字段导出excel表格,常规字段导出excel表格
备注:动态字段导出主要是用了反射的原理,跟excel需要导出的字段一一映射.话不多说,直接上代码: 1.生成的动态模板如图: 如上图,如果下拉框里不是选择的值,会给用户提示,下拉框用来限制用户导入只能 ...
- xlsx模块 前端_利用xlsx-syle前端导出excel且支持自定义样式
利用xlsx-syle前端导出excel且支持自定义样式 前言 本文的代码是基于react的. 本文仅用于记录我在前端导出excel遇到的问题的笔记整理. 需求描述 需要前端来实现对数据的导出,导出成 ...
- EasyExcel导入和导出excel数据表格用法示例
说明:平时项目中经常有需要把excel表格中的数据导入库中,或者需要把查询出来的数据导出到excel文件中,今天就来介绍阿里的 easyexcel 的用法 一.SpringBoot集成EasyExce ...
- EasyExcel的使用--填充excel
EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目. 今天根据官网(www.yuque.com/easyexcel/doc/read)指导,试了一个简单的填充例子,如下. 了 ...
- EasyExcel 导出数据超过 Excel 单表上限了,该怎么办???
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...
- EasyExcel设置特定单个单元格(颜色)样式
原文链接出自:easyExcel设置单个单元格(颜色)样式 背景:需求是使用excel设置目标单元格的样式(颜色),但我之前没有学过easyExcel,在网上找资料的时候,发现有关easyExcel相 ...
- C# 中Excel导出,可以自由设置导出的excel格式
Excel导出,不管在java,C#等后台语言,或者是javascrit,jquery等脚本语言,有很多种方式都可以将查出的数据导成excel的格式.我这次是从公司的一个同事那里学来的一个方法.是有关 ...
- python批量打印机excel_python批量设置多个Excel文件页眉页脚的脚本
本文实例为大家分享了python批量设置多个Excel文件页眉页脚的具体代码,供大家参考,具体内容如下 import os import openpyxl from openpyxl.workshee ...
- easyExcel设置水印
1.依赖导入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...
最新文章
- 爬虫之requests模块发送带参数的请求
- String常用方法总结
- arcgis双标准纬线等角圆锥投影_世界地图是怎么制作出来的,各投影算法的来历...
- [html] 你认为table的作用和优缺点是什么呢?
- nlp5-n-gram/语言模型(数据平滑方法
- 全球首发1毫秒计费模式,腾讯云引领Serverless时代新标准
- Android学习之Android 5.0分享动画实现微信点击全屏效果
- kali 创建php可执行文件_Kali安装wordpress
- python函数调用的例子_Python案例|混用C函数
- 常用Linux命令(持续更新)
- weka mac安装
- 搜索引擎的基本工作原理
- el-input设置type为number时,切换为中文输入法输入会让光标上移的问题解决
- 408计算机组成原理学习:数据的表示与计算
- java实现屏幕亮度调节
- (二)机器学习的流程概述,线性规划,图像分类
- 少年,离regional还有两个周
- 解决MySQL报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
- UI设计必备工具有哪些?
- uni-app引用阿里巴巴官方图标库
热门文章
- 木材材积表快速计算器_原木材积表(运算表)
- Mac OS 电脑恢复出厂设置之详细操作
- WordPress + Avada主题 安装Demo教程
- 哈工大网络空间安全专业划在计算机类吗,哈尔滨工业大学网络空间安全考研难吗...
- JavaWeb上传头像
- 2021恩施高考成绩查询,2021恩施中考成绩查询 2021恩施中考成绩查询时间及入口...
- 详解printf重定向到文件中,打印日志的实现
- 小红书10万粉算大号么?快速涨粉实用技巧
- LaTeX 免费神器!再也不怕复杂的公式了
- 野蛮生长已到尽头 WiFi百家争鸣谁能破局