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

太过爱你忘了你带给我的痛 2023-10-14 21:57 171阅读 0赞

文章目录

  • 1、设置单元格格式:来源_formats
  • 2、设置单元格格式:自定义格式
    • 2.1、自定义格式分析&源码分析
    • 2.2、自定义单元格格式,代码示例
  • 参考链接:

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

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

  1. private static final String[] _formats = new String[]{
  2. "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", "@"};
  3. /**
  4. * 设置单元格数据类型
  5. */
  6. public static void setExcelCellDataFormat() throws IOException {
  7. XSSFWorkbook workbook = new XSSFWorkbook();
  8. XSSFSheet sheet = workbook.createSheet("单元格数据类型");
  9. XSSFRow row1 = sheet.createRow(0);
  10. // 单元格样式
  11. XSSFCellStyle cellStyle = workbook.createCellStyle();
  12. // 单元格数据格式
  13. XSSFDataFormat cellDataFormat = workbook.createDataFormat();
  14. // 来源:org.apache.poi.ss.usermodel.BuiltinFormats
  15. // 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", "@"};
  16. // 单元格百分比:从_formats里面选择一个包含的单元格数据类型
  17. cellStyle.setDataFormat(cellDataFormat.getFormat("0.00%"));
  18. XSSFCell cell1 = row1.createCell(0);
  19. cell1.setCellStyle(cellStyle);
  20. // 需要注意一下,poi已经不建议使用setCellType设置数据类型了,可以直接通过重载的setCellValue判断当前单元格是什么数据类型
  21. // cell1.setCellType(CellType.BOOLEAN);
  22. cell1.setCellValue(0.06);
  23. FileOutputStream outputStream = new FileOutputStream("D:\\temp\\Excel单元格数据类型.xlsx");
  24. workbook.write(outputStream);
  25. outputStream.flush();
  26. workbook.close();
  27. outputStream.close();
  28. }

注意可能会出现不兼容的问题,但是不影响导出
QQ截图20230728152405.png

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

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

formats数据格式不能完全支持的时候,如下图情况:
image.png
可能会使用自定义的数据格式来在单元格展示数据。如下图,部分自定义数据格式示例:
image.png
image.png
设置单元格格式源码分析:
image.png
下面开始源码部分
image.png
BuiltinFormats.getBuiltinFormat(format)执行如下图:
image.png
返回-1时会进行自定义数据格式设置:
image.png
stylesSource.putNumberFormat(format)执行如下图:
image.png

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

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

  1. public static void setExcelCellDataFormat2() throws IOException {
  2. XSSFWorkbook workbook = new XSSFWorkbook();
  3. XSSFSheet sheet = workbook.createSheet("单元格数据类型");
  4. XSSFRow row1 = sheet.createRow(0);
  5. // 单元格样式
  6. XSSFCellStyle cellStyle = workbook.createCellStyle();
  7. // 单元格数据格式
  8. XSSFDataFormat cellDataFormat = workbook.createDataFormat();
  9. // 人民币货币格式
  10. cellStyle.setDataFormat(cellDataFormat.getFormat("¥#,##0.00"));
  11. XSSFCell cell1 = row1.createCell(0);
  12. cell1.setCellStyle(cellStyle);
  13. cell1.setCellValue(0.06);
  14. sheet.setColumnWidth(0, 256 * 14 + 184);
  15. // 美元货币格式
  16. XSSFCellStyle cellStyle2 = workbook.createCellStyle();
  17. cellStyle2.setDataFormat(cellDataFormat.getFormat("$#,##0.00"));
  18. XSSFCell cell2 = row1.createCell(1);
  19. cell2.setCellStyle(cellStyle2);
  20. cell2.setCellValue(0.06);
  21. sheet.setColumnWidth(1, 256 * 14 + 184);
  22. // 添加文字描述的数据格式
  23. XSSFCellStyle cellStyle3 = workbook.createCellStyle();
  24. cellStyle3.setDataFormat(cellDataFormat.getFormat("占比#,##0.00%"));
  25. XSSFCell cell3 = row1.createCell(2);
  26. cell3.setCellStyle(cellStyle3);
  27. cell3.setCellValue(0.06);
  28. sheet.setColumnWidth(2, 256 * 14 + 184);
  29. // 带颜色的数据格式化,正数为绿色,负数为红色
  30. XSSFCellStyle cellStyle4 = workbook.createCellStyle();
  31. cellStyle4.setDataFormat(cellDataFormat.getFormat("提升[绿色]#,##0.00%;[红色]下降#,##0.00%"));
  32. XSSFCell cell4 = row1.createCell(3);
  33. cell4.setCellStyle(cellStyle4);
  34. cell4.setCellValue(-0.06);
  35. sheet.setColumnWidth(3, 256 * 14 + 184);
  36. // 带颜色的数据格式化,正数为绿色,负数为红色
  37. XSSFCellStyle cellStyle5 = workbook.createCellStyle();
  38. cellStyle5.setDataFormat(cellDataFormat.getFormat("提升[绿色]#,##0.00%;[红色]下降#,##0.00%"));
  39. XSSFCell cell5 = row1.createCell(4);
  40. cell5.setCellStyle(cellStyle5);
  41. cell5.setCellValue(0.06);
  42. sheet.setColumnWidth(4, 256 * 14 + 184);
  43. FileOutputStream outputStream = new FileOutputStream("D:\\temp\\Excel单元格数据类型2.xlsx");
  44. workbook.write(outputStream);
  45. outputStream.flush();
  46. workbook.close();
  47. outputStream.close();
  48. }

示例运行结果:
image.png

参考链接:

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

发表评论

表情:
评论列表 (有 0 条评论,171人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Excel设置定义单元格式

    我们知道Excel中设置单元格格式时可以通过自定义方式设置格式,但是具体如何使用一般人都不是很清楚,其实自定义功能非常强大。本文主要介绍一下自定义单元格格式的小技巧,主要流程: