当前位置: 首页 > news >正文

Spring Boot POI中BigDecimal类型数据写入Excel单元格

正确做法

应该将BigDecimal转换为 POI 单元格支持的合适类型,例如doubleString

方案一:转换为 double(推荐,适合数值计算)

java

if (capitalInfoVO.getCapitalTotal() != null) { row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().doubleValue()); }

注意double可能丢失精度(特别是大数值或高精度小数),但通常金额类数据使用double足够。若需保留原样,可使用方案二。

方案二:转换为字符串(保留原格式)

java

if (capitalInfoVO.getCapitalTotal() != null) { row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().toString()); }

此时 Excel 单元格会以文本形式存储,可能影响后续计算。

方案三:设置数字格式(最佳实践)

如果需要精确数值并保留格式,可以创建带有数字格式的CellStyle

java

// 创建数字格式样式 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()); }

或者,如果希望保留精确字符串表示:

java

row.createCell(4).setCellValue(capitalInfoVO.getCapitalTotal().toString());

完整示例代码:

/** * 导出数据文件 */ public String exportFile(CapitalInfoQueryDTO queryDTO) { // 获取资金信息列表 List<CapitalInfoVO> 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效果:

http://www.jsqmd.com/news/411038/

相关文章:

  • G006 拓扑排序性质 字典建图 火星词典问题 P6491 [COCI 2010/2011 #6] ABECEDA - 洛谷
  • 2026汽车能源设备和工业电源品牌商盘点 - 品牌2025
  • 导师又让重写?10个降AI率工具深度测评与推荐
  • 2026年2月护肤品代工厂厂家最新推荐,从配方到成品全链路服务 - 品牌鉴赏师
  • 2026年北京陪诊公司电话推荐:精选机构与联系指南 - 品牌推荐
  • 刚刚,Anthropic 再出手!昨天 IBM 崩了,今天轮到所有打工人
  • 本科毕业论文写作突围:paperzz 如何成为 95% 学子的 “通关密钥”
  • 导师推荐!一键生成论文工具,千笔·专业论文写作工具 VS 灵感ai,专科生专属神器
  • 学长亲荐!AI论文软件 千笔ai写作 VS PaperRed 更贴合MBA需求
  • paperzz:本科毕业论文写作 “加速器”,让学术创作告别内耗
  • 2026年度高效节能电机厂家推荐榜单:技术创新与商业价值双维度综合评估 - 品牌推荐
  • 【IEEE出版 | EI检索】第六届人工智能与工业技术应用国际学术会议(AIITA 2026)
  • 亚马逊与MIT聚焦前沿科技研究研讨会
  • 在线考试系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 2026年度高效节能电机厂家TOP5综合评估与选型指南 - 品牌推荐
  • paperzz:本科毕业论文写作的「智能外挂」,让你轻松通关毕业季
  • 2026绵阳房产交易代办服务推荐指南专业团队护航:绵阳苹果地产联系方式/绵阳靠谱的房产中介是哪家/选择指南 - 优质品牌商家
  • 从选题到定稿:paperzz 解锁本科毕业论文写作 “通关秘籍”
  • 2026Q1 上海别墅大宅全案装修口碑排行榜 专业全案设计・靠谱装企优选 - 品牌智鉴榜
  • 2026 本科毕业论文写作工具首选:Paperzz,让每一步创作都有 “智” 可循
  • 2026年2月高压防爆电机厂家实战报告:主流制造商技术实力及安全效能对比 - 品牌推荐
  • 2026年花灯品牌新势力,创意设计引领节日新风尚,庙会花灯/西游记花灯/大型花灯/十二生肖花灯,花灯供货厂家怎么选择 - 品牌推荐师
  • 2026最新西双版纳旅行社公司top10推荐!旅行/旅游线路/攻略/自由行服务品牌权威榜单发布 - 十大品牌榜
  • 探讨船用柴油发电机组优质供应商,百发动力 - 工业品牌热点
  • PaperZZ:2026 本科毕业论文「无痛通关」指南,AI 全流程赋能告别写作焦虑
  • 2026年高效节能电机厂家推荐:聚焦风机水泵领域深度评测,针对变负载与系统效率痛点 - 品牌推荐
  • 计算机毕业设计springboot会议室管理系统 基于Spring Boot的企业会议空间预约平台 智能化办公场地调度系统的设计与实现
  • 2026年绝缘靴手套耐压装置可靠产品推荐榜:局部放电检测设备/局部放电测试设备/手持式局放仪/手持式局放检测仪/选择指南 - 优质品牌商家
  • Paperzz:本科毕业论文智能写作新范式,让毕业创作告别焦虑
  • 2026年高压防爆电机厂家推荐:基于安全与效率维度的行业权威榜单 - 品牌推荐