POI 导出Excel 数值金额百分数单元格样式

最近项目需要做Excel的导入导出功能,用的是原生的POI导出。

说正事。

千位符样式:

// 设置单元格样式
XSSFCellStyle cellStyle =wb.createCellStyle();
XSSFDataFormat format= wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("#,##0.00")); // 千位符

row.createCell(0).setCellValue(sheetOnelist.get(i).getChargeAmount()==null?    0.00:Double.parseDouble(sheetOnelist.get(i).getChargeAmount()));
row.getCell(0).setCellStyle(cellStyle);// 设置金额样式  千位符

这里需要注意,设置千位符样式时,setCellValue里的值一定要转为double类型,否则导出的Excel样式还是文本样式,需要双击才会改变样式。

小数样式:

cellStyle.setDataFormat(format.getFormat("#0.00")); // 小数

百分比

cellStyle.setDataFormat(format.getFormat("0.00%")); // 百分比
contentCell.setCellValue(Double.parseDouble(data.split("%")[0])/100);

百分数设置单元格数值时需要把原来数据转换为"96%"的字符串,然后把%去掉,转为double除以100 。

需要注意的事项

一般我们导出的excel 里会有小数和百分比参杂的。我们需要创建两个样式来接收格式。

		// 设置文本单元格样式
			XSSFCellStyle contextstyle =wb.createCellStyle();
			XSSFCellStyle contextstyle1 =wb.createCellStyle();

if (isNum && !isPercent) {  // 判断是数值但不是百分数
						XSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式
						contextstyle.setDataFormat(df.getFormat("#0.00"));//保留两位小数点
						// 设置单元格格式
						contentCell.setCellStyle(contextstyle);
						// 设置单元格内容为double类型
						contentCell.setCellValue(Double.parseDouble(data));
					}else if(isPercent){  //是百分数
						XSSFDataFormat dataFormat = wb.createDataFormat(); // 此处设置数据格式
						contextstyle1.setDataFormat(dataFormat.getFormat("0.00%"));
						contentCell.setCellStyle(contextstyle1);
						contentCell.setCellValue(Double.parseDouble(data.split("%")[0])/100);
					} 

这里创建了两个contextstyle,如果为一个的话,小数样式会转变为百分比样式。具体原因没有找到。有懂得大佬,欢迎留言讨论。

如有帮助,留个赞呗!!鞠躬。

Apache poi 导出excel时合并单元格可以使用setRegionStyle方法来设置合并单元格样式。这个方法接受三个参数,分别是Sheet对象、CellRangeAddress对象和CellStyle对象。在这个方法中,通过循环遍历合并单元格的每一行和每一列,然后获取对应的单元格并设置样式。具体的代码实现可以参考引用\[1\]中的示例代码。 此外,还可以使用PoiModel类来定义导出excel时的数据模型。这个类包含了内容、上一行同一位置内容、行标、列标等属性。可以根据实际需求来使用这个类。具体的代码实现可以参考引用\[2\]和引用\[3\]中的示例代码。 总结起来,Apache poi 导出excel时合并单元格的步骤包括设置合并单元格样式和定义导出数据的模型。可以根据具体的需求来使用相应的方法和类来实现导出功能。 #### 引用[.reference_title] - *1* *3* [poi 导出Excel 动态 合并单元格](https://blog.csdn.net/weixin_65436454/article/details/127806178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用POI 导出Excel 动态合并单元格](https://blog.csdn.net/weixin_41722928/article/details/112849624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值