POI 导出excel带小数点的数字格式显示不对解决方法

在使用Apache POI导出Excel时,遇到数字格式显示不正确的问题。通过设置CellStyle和DataFormat,可以解决小数点后位数显示的问题。关键代码包括创建CellStyle,创建DataFormat并设置为‘#,#0.0’,然后将该格式应用到Cell中,以确保小数点后保留两位。应用这些代码后,结果显示正确。" 123248200,7292511,手写注解反射实现页面绑定与事件处理,"['Android', 'Kotlin', '注解反射', '页面绑定', '事件处理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到了一个问题就是java导出excel中带小数点的数字显示不对, 比如我想在excel中第一行显示:
 3,000.0
但是在excle中导出的格式总是不带小数点 3000(非文本格式),而且也不是以金融格式显示的。这时候我们的解决方法是要为单元格中的数字设置dataformat。代码如下
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;

public class ExcelUtil {
public void testWriteExcel() {
 String excelPath = "d:/test.xls";
 HSSFWorkbook workbook = null;
 try {
   // XSSFWorkbook used for .xslx (>= 2007), HSSWorkbook for 03 .xsl
   workbook = new HSSFWorkbook();// XSSFWorkbook();//WorkbookFactory.create(inputStream);
 } catch (Exception e) {
   System.out.println("创建Excel失败: ");
   e.printStackTrace();
 }
 if (workbook != null) {
   Sheet sheet = workbook.createSheet("测试数据");
   Row row0 = sheet.createRow(0);
   for (int i = 0; i < 6; i++) {
    double test = 3000.0;
    Cell cell = row0.createCell(i, Cell.CELL_TYPE_NUMERIC);
   CellStyle cellStyle = workbook.createCellStyle();
    HSSFDataFormat df = workbook.createDataFormat();  //此处设置数据格式  
    cellStyle.setDataFormat(df.getFormat("#,#0.0")); //小数点后保留两位,可以写contentStyle.setDataFormat(df.getFormat("#,#0.00"));  
     cell.setCellStyle(cellStyle);
     cell.setCellValue( test );     
   }
   try {
     FileOutputStream outputStream = new FileOutputStream(excelPath);
     workbook.write(outputStream);
     outputStream.flush();
     outputStream.close();
   } catch (Exception e) {
     System.out .println("写入Excel失败: ");
     e.printStackTrace();
   }
 }
}
public static void main(String[] args)
{
    ExcelUtil eu = new ExcelUtil();
    eu.testWriteExcel();
}
}

当没设置format的时候,光设置CELL_TYPE_NUMERIC只能让数字在excel中显示为数字类型(非文本类型,而不能保证它小数位和金融格式(每位一个逗号)。


所以如果要达到要求就必须要设置cell的dataformat如上代码所示。

    CellStyle cellStyle = workbook.createCellStyle();
     HSSFDataFormat df = workbook.createDataFormat();  //此处设置数据格式  
     cellStyle.setDataFormat(df.getFormat("#,#0.0")); //小数点后保留两位,可以写contentStyle.setDataFormat(df.getFormat("#,#0.00"));  
      cell.setCellStyle(cellStyle);

这几行代码起了绝对的作用。最后结果如下图说是:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值