Spring Boot POI中BigDecimal类型数据写入Excel单元格 📅 发布时间:2026/7/11 4:30:30 👁️ 浏览次数: 正确做法应该将BigDecimal转换为 POI 单元格支持的合适类型例如double或String。方案一转换为 double推荐适合数值计算javaif (capitalInfoVO.getCapitalTotal() ! null) { row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); }注意double可能丢失精度特别是大数值或高精度小数但通常金额类数据使用double足够。若需保留原样可使用方案二。方案二转换为字符串保留原格式javaif (capitalInfoVO.getCapitalTotal() ! null) { row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().toString()); }此时 Excel 单元格会以文本形式存储可能影响后续计算。方案三设置数字格式最佳实践如果需要精确数值并保留格式可以创建带有数字格式的CellStylejava// 创建数字格式样式 CellStyle numberStyle workbook.createCellStyle(); numberStyle.setDataFormat(workbook.createDataFormat().getFormat(#,##0.00)); // 根据需求调整 if (capitalInfoVO.getCapitalTotal() ! null) { Cell cell row.createCell(4); cell.setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); cell.setCellStyle(numberStyle); }修正后的完整片段java// 浮点数类型BigDecimal类型 if (capitalInfoVO.getCapitalTotal() ! null) { row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); } if (capitalInfoVO.getCapitalLeaveTotal() ! null) { row.createCell(5).setCellValue(capitalInfoVO.getCapitalLeaveTotal().doubleValue()); } if (capitalInfoVO.getCapitalValidTotal() ! null) { row.createCell(6).setCellValue(capitalInfoVO.getCapitalValidTotal().doubleValue()); }或者如果希望保留精确字符串表示javarow.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().toString());完整示例代码/** * 导出数据文件 */ public String exportFile(CapitalInfoQueryDTO queryDTO) { // 获取资金信息列表 ListCapitalInfoVO capitalInfoVOs queryList(queryDTO); try { // 1、创建工作薄excel文件.xlsx文件 XSSFWorkbook workbook new XSSFWorkbook(); // 2、创建工作表 XSSFSheet sheet workbook.createSheet(资金信息); // 3、创建工作表表头 XSSFRow headerRow sheet.createRow(0); headerRow.createCell(0).setCellValue(创建时间); headerRow.createCell(1).setCellValue(资金序号); headerRow.createCell(2).setCellValue(资金名称); headerRow.createCell(3).setCellValue(资金类别); headerRow.createCell(4).setCellValue(指标预算总额); headerRow.createCell(5).setCellValue(指标剩余额); headerRow.createCell(6).setCellValue(指标可用总额); headerRow.createCell(7).setCellValue(指标类别); headerRow.createCell(8).setCellValue(资金账户); headerRow.createCell(9).setCellValue(资金来源); headerRow.createCell(10).setCellValue(指标来源); headerRow.createCell(11).setCellValue(资金年份); headerRow.createCell(12).setCellValue(状态); headerRow.createCell(13).setCellValue(备注信息); // 创建日期格式样式 CellStyle dateCellStyle workbook.createCellStyle(); CreationHelper createHelper workbook.getCreationHelper(); dateCellStyle.setDataFormat(createHelper.createDataFormat().getFormat(yyyy-MM-dd HH:mm:ss)); // 创建数字格式样式 CellStyle numberCellStyle workbook.createCellStyle(); numberCellStyle.setDataFormat(workbook.createDataFormat().getFormat(#,##0.00)); // 4、填充数据 int rowIndex 1; for (CapitalInfoVO capitalInfoVO : capitalInfoVOs) { Row row sheet.createRow(rowIndex); // 日期类型创建时间 if (capitalInfoVO.getCreateTime() ! null) { Cell cell row.createCell(0); cell.setCellValue(capitalInfoVO.getCreateTime()); // 设置日期样式 cell.setCellStyle(dateCellStyle); } // 字符串类型 row.createCell(1).setCellValue(capitalInfoVO.getCapitalNo()); row.createCell(2).setCellValue(capitalInfoVO.getCapitalName()); row.createCell(3).setCellValue(capitalInfoVO.getCapitalType()); row.createCell(7).setCellValue(capitalInfoVO.getCapitalIndexType()); row.createCell(8).setCellValue(capitalInfoVO.getCapitalAccount()); row.createCell(9).setCellValue(capitalInfoVO.getCapitalSource()); row.createCell(10).setCellValue(capitalInfoVO.getCapitalIndexSource()); row.createCell(13).setCellValue(capitalInfoVO.getRemark()); // 浮点数类型BigDecimal类型其值为null时抛出异常的问题 if (capitalInfoVO.getCapitalTotal() ! null) { // 方案一转换为 double推荐适合数值计算 row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); } if (capitalInfoVO.getCapitalLeaveTotal() ! null) { // 方案二转换为字符串保留原格式 row.createCell(5).setCellValue(capitalInfoVO.getCapitalLeaveTotal().toString()); } if (capitalInfoVO.getCapitalValidTotal() ! null) { // 方案三设置数字格式最佳实践 Cell cell row.createCell(6); cell.setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); // 设置数字样式 cell.setCellStyle(numberCellStyle); } // 整数类型Integer类型其值为null时抛出异常的问题 if (capitalInfoVO.getCapitalYear() ! null) { row.createCell(11).setCellValue(capitalInfoVO.getCapitalYear()); } if (capitalInfoVO.getCapitalState() ! null) { String value switch (capitalInfoVO.getCapitalState()) { case 0 - CapitalInfoStateEnum.IN_USE.getDescription(); case 1 - CapitalInfoStateEnum.RETURNED.getDescription(); case 2 - CapitalInfoStateEnum.CLOSED.getDescription(); default - ; }; row.createCell(12).setCellValue(value); } } // 5、生成excel文件 // 使用当前时间戳使文件名唯一 String timestamp String.valueOf(System.currentTimeMillis()); String filename 资金信息- timestamp .xlsx; String filePath fileSaveUtils.getAppDirectory() filename; FileOutputStream fileOut new FileOutputStream(filePath); workbook.write(fileOut); // 关闭文件输出流释放资源 fileOut.close(); // 关闭workbook对象释放资源 workbook.close(); // 返回文件绝对路径 return filePath; } catch (IOException e) { throw new RuntimeException(e); } }导出Excel效果
政策驱动工业数智化:JBoltAI视频SOP赋能生产标准化 当前,国家正密集推进“人工智能制造”与工业互联网融合赋能相关政策落地,明确提出推动人工智能在研发设计、生产制造、运维管理等全环节深度应用,以数据驱动与智能技术破解制造业标准化、可追溯、可复用的转型痛点。在政策指引下,… 2026/7/4 13:55:27
生成引擎优化(GEO)在内容战略创新与用户体验提升中的重要作用 生成引擎优化(GEO)的核心在于提升内容的相关性和可见性,这对于企业的内容战略至关重要。通过对用户搜索行为的深入分析,企业能够更加准确地了解受众需求,从而在内容创作中实现精准对接。GEO不仅使得原本单一的内容呈现变得多样化,… 2026/7/9 1:57:17
WebCodecs 设备能力检测与硬解/软解降级方案 WebCodecs 设备能力检测与硬解/软解降级方案 目录 适用场景与目标为何要先判断设备能力设备能力检测:判断是否支持硬件/软件解码解码器初始化:硬解 → 软解逐步降级32 位与特殊环境的处理完整流程与错误提示可选:运行时诊断与日志参考资料 … 2026/5/17 6:47:20
AI自我改进机制:从理论到工程实践的全流程实现 最近在AI工程实践中,很多开发者都面临一个共同挑战:如何让AI系统不仅能够执行任务,还能持续自我改进和优化。这个问题在构建复杂的AI Agent系统时尤为突出,特别是当我们需要AI具备长期学习能力和适应性时。本文将深入探讨AI自我改… 2026/7/11 4:28:09
CesiumJS 1.107 昼夜交替进阶:3种光照方案对比与5000倍速动画性能实测 CesiumJS 1.107 昼夜交替进阶:3种光照方案对比与5000倍速动画性能实测当数字地球在浏览器中缓缓旋转时,最令人着迷的莫过于光影流转间展现的昼夜交替效果。这种动态视觉不仅关乎美学表现,更是地理信息系统(GIS)应用中时… 2026/7/11 4:28:09
嵌入式信号稳定控制:上拉下拉电阻配置与PIC18微控制器应用 1. 项目背景与核心需求在嵌入式系统设计中,信号状态的稳定控制是基础中的基础。我最近在做一个工业控制项目时,遇到了一个典型的信号稳定性问题:需要可靠地控制DTH-08模块与PIC18LF45K22微控制器之间的通信信号状态。这个场景让我深刻体会到上… 2026/7/11 4:26:09
AI自动骨骼绑定实战:从原理到UniRig应用全解析 1. 项目概述:当AI遇见3D骨骼绑定如果你是一名3D美术师、独立游戏开发者,或者只是对角色动画感兴趣的爱好者,那么“骨骼绑定”这个词对你来说,可能意味着一段漫长、枯燥且需要高度专业技巧的“折磨”。传统的角色绑定流程ÿ… 2026/7/11 4:26:09
C++ 递归与非递归 3 种进制转换实现:从《信息学奥赛一本通》1161题出发 C 进制转换实战:递归与迭代的三种实现方案深度解析在信息学竞赛和日常编程中,进制转换是一个基础但极其重要的技能点。无论是处理数据存储、网络协议还是加密算法,理解不同进制间的转换原理都至关重要。本文将以《信息学奥赛一本通》1161题&q… 2026/7/11 4:22:08
揭秘船舶安全“守护神”:智慧港口航道入侵与漂移异常AI检测算法大起底 港口航道通航安全,从来不是平稳常态,而是时刻暗藏变数的高危战场。航道作为船舶进出港的唯一核心通道,是港口物流运转的生命线。日常作业中,船舶偏航漂移、无关船只非法入侵、锚泊越界、违规横穿航道等异常行为频发。加之雾天、夜… 2026/7/11 4:22:08
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08