详解Java POI excel自定义设置单元格格式

 更新时间:2024年01月28日 16:58:46   作者:小白说(๑• . •๑)  
这篇文章主要介绍了Java POI excel设置单元格格式,自定义设置,设置单元格格式:来源_formats,更多数据类型从formats里面发现,需要的朋友可以参考下

1、设置单元格格式:来源_formats

更多数据类型从formats里面发现

private static final String[] _formats = new String[]{"General", "0", "0.00", "#,##0", "#,##0.00", "\"$\"#,##0_);(\"$\"#,##0)", "\"$\"#,##0_);[Red](\"$\"#,##0)", "\"$\"#,##0.00_);(\"$\"#,##0.00)", "\"$\"#,##0.00_);[Red](\"$\"#,##0.00)", "0%", "0.00%", "0.00E+00", "# ?/?", "# ??/??", "m/d/yy", "d-mmm-yy", "d-mmm", "mmm-yy", "h:mm AM/PM", "h:mm:ss AM/PM", "h:mm", "h:mm:ss", "m/d/yy h:mm", "reserved-0x17", "reserved-0x18", "reserved-0x19", "reserved-0x1A", "reserved-0x1B", "reserved-0x1C", "reserved-0x1D", "reserved-0x1E", "reserved-0x1F", "reserved-0x20", "reserved-0x21", "reserved-0x22", "reserved-0x23", "reserved-0x24", "#,##0_);(#,##0)", "#,##0_);[Red](#,##0)", "#,##0.00_);(#,##0.00)", "#,##0.00_);[Red](#,##0.00)", "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", "_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)", "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)", "_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)", "mm:ss", "[h]:mm:ss", "mm:ss.0", "##0.0E+0", "@"};

注意可能会出现不兼容的问题,但是不影响导出

2、设置单元格格式:自定义格式

2.1、自定义格式分析&源码分析

formats数据格式不能完全支持的时候,如下图情况:

可能会使用自定义的数据格式来在单元格展示数据。如下图,部分自定义数据格式示例:

设置单元格格式源码分析:

下面开始源码部分

BuiltinFormats.getBuiltinFormat(format)执行如下图:

返回-1时会进行自定义数据格式设置:

stylesSource.putNumberFormat(format)执行如下图:

2.2、自定义单元格格式,代码示例

更多自定义数据格式在代码示例。

public static void setExcelCellDataFormat2() throws IOException {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("单元格数据类型");
    XSSFRow row1 = sheet.createRow(0);
    // 单元格样式
    XSSFCellStyle cellStyle = workbook.createCellStyle();
    // 单元格数据格式
    XSSFDataFormat cellDataFormat = workbook.createDataFormat();
    // 人民币货币格式
    cellStyle.setDataFormat(cellDataFormat.getFormat("¥#,##0.00"));
    XSSFCell cell1 = row1.createCell(0);
    cell1.setCellStyle(cellStyle);
    cell1.setCellValue(0.06);
    sheet.setColumnWidth(0, 256 * 14 + 184);
    // 美元货币格式
    XSSFCellStyle cellStyle2 = workbook.createCellStyle();
    cellStyle2.setDataFormat(cellDataFormat.getFormat("$#,##0.00"));
    XSSFCell cell2 = row1.createCell(1);
    cell2.setCellStyle(cellStyle2);
    cell2.setCellValue(0.06);
    sheet.setColumnWidth(1, 256 * 14 + 184);
    // 添加文字描述的数据格式
    XSSFCellStyle cellStyle3 = workbook.createCellStyle();
    cellStyle3.setDataFormat(cellDataFormat.getFormat("占比#,##0.00%"));
    XSSFCell cell3 = row1.createCell(2);
    cell3.setCellStyle(cellStyle3);
    cell3.setCellValue(0.06);
    sheet.setColumnWidth(2, 256 * 14 + 184);
    // 带颜色的数据格式化,正数为绿色,负数为红色
    XSSFCellStyle cellStyle4 = workbook.createCellStyle();
    cellStyle4.setDataFormat(cellDataFormat.getFormat("提升[绿色]#,##0.00%;[红色]下降#,##0.00%"));
    XSSFCell cell4 = row1.createCell(3);
    cell4.setCellStyle(cellStyle4);
    cell4.setCellValue(-0.06);
    sheet.setColumnWidth(3, 256 * 14 + 184);
    // 带颜色的数据格式化,正数为绿色,负数为红色
    XSSFCellStyle cellStyle5 = workbook.createCellStyle();
    cellStyle5.setDataFormat(cellDataFormat.getFormat("提升[绿色]#,##0.00%;[红色]下降#,##0.00%"));
    XSSFCell cell5 = row1.createCell(4);
    cell5.setCellStyle(cellStyle5);
    cell5.setCellValue(0.06);
    sheet.setColumnWidth(4, 256 * 14 + 184);
    FileOutputStream outputStream = new FileOutputStream("D:\\temp\\Excel单元格数据类型2.xlsx");
    workbook.write(outputStream);
    outputStream.flush();
    workbook.close();
    outputStream.close();
}

示例运行结果:

参考链接:

java poi导入纯数字等格式问题及解决

Java 中使用POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写、单元格边框等

到此这篇关于Java POI excel设置单元格格式,自定义设置的文章就介绍到这了,更多相关Java POI excel单元格格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之单件模式深入讲解

    Java设计模式之单件模式深入讲解

    有人说单件模式是最简单的模式,因为它只有一个类,但其实它还有一些值得注意的地方,就如:出现并发性时,单件可能已经不是单件了
    2021-11-11
  • Java使用Lambda表达式查找list集合中是否包含某值问题

    Java使用Lambda表达式查找list集合中是否包含某值问题

    Java使用Lambda表达式查找list集合中是否包含某值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 如何保证RabbitMQ全链路数据100%不丢失问题

    如何保证RabbitMQ全链路数据100%不丢失问题

    这篇文章主要介绍了如何保证RabbitMQ全链路数据100%不丢失问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Spring Boot整合阿里开源中间件Canal实现数据增量同步

    Spring Boot整合阿里开源中间件Canal实现数据增量同步

    这篇文章主要为大家介绍了Spring Boot整合阿里开源中间件Canal实现数据增量同步示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java线程间通信不同步问题原理与模拟实例

    Java线程间通信不同步问题原理与模拟实例

    这篇文章主要介绍了Java线程间通信不同步问题,结合实例形式分析了java线程间通信不同步问题的原理并模拟实现了线程间通信不同步情况下的异常输出,需要的朋友可以参考下
    2019-10-10
  • 在SpringBoot3中spring.factories配置不起作用的原因和解决方法

    在SpringBoot3中spring.factories配置不起作用的原因和解决方法

    本文给大家介绍了在SpringBoot3中spring.factories配置的自动装配不生效的原因和解决方法,文中通过代码和图文给出了详细的解决方法,具有一定的参考价值,需要的朋友可以参考下
    2024-02-02
  • Spring Batch是什么

    Spring Batch是什么

    SpringBatch是Spring框架的批量处理工具,支持大规模数据任务、错误处理及监控,在SpringBoot中通过Starter简化集成,结合分页、Swagger、ActiveMQ等技术,具备高性能和健壮性,适用于数据迁移、报表生成等场景,本文介绍Spring Batch是什么的相关知识,感兴趣的朋友一起看看吧
    2025-07-07
  • 一篇文章带你搞懂Java线程池实现原理

    一篇文章带你搞懂Java线程池实现原理

    线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天就带大家一块剖析线程池底层实现原理
    2022-11-11
  • Feign 请求动态URL方式

    Feign 请求动态URL方式

    这篇文章主要介绍了Feign 请求动态URL方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MyBatis查询数据,赋值给List集合时,数据缺少的问题及解决

    MyBatis查询数据,赋值给List集合时,数据缺少的问题及解决

    这篇文章主要介绍了MyBatis查询数据,赋值给List集合时,数据缺少的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论