纵有疾风起
人生不言弃

POI操作Excel设置单元格货币格式时转换方法

背景

  1. 写公司项目时遇到项目中要写Excel,并且单元格格式要写成货币格式,既遇到负数变成红色,整数正常,如下图

    POI操作Excel设置单元格货币格式时转换方法插图
    image

    网上找了N多帖子,也解决了部分困境,例如https://blog.csdn.net/weixin_33705053/article/details/92380084 感谢作者
    于是我们先采用了这种格式¥#,##0_);\[Red](¥#,##0)

  2. 当我们走到第二阶段,人民币可以正常,美元的$#,##0_);\[Red]($#,##0)采用这种方式也可以正常显示了,可是港币怎么写,我们尝试采用HK$#,##0_);\[Red](HK$#,##0),但不幸的时excel不认识这个,我们重新找资料,最终无果,只能自己想办法

  3. 港币这种写法,Excel自定义转换都不认识,肯定是我们写错了,于是我们想,可以写进去,能不能读出来,开始尝试

尝试

@Testpublic void test2(){    File file = new File("C:\\Users\\Calvin\\Desktop\\excels\\test.xlsx");    try (FileInputStream inputStream = new FileInputStream(file)) {        Workbook workbook = new XSSFWorkbook(inputStream);        Sheet sheet = workbook.getSheetAt(0);        Row row = sheet.getRow(0);        Cell cell = row.getCell(0);        CellStyle cellStyle = cell.getCellStyle();        String dataFormatString = cellStyle.getDataFormatString();        short dataFormat = cellStyle.getDataFormat();        System.out.println(dataFormat);        System.out.println(dataFormatString);    }catch (Exception e){        e.printStackTrace();    }}

太棒了,我们成功了,读出来以后可以看到,dataFormat的short值为177,这个是一个与运算的结果,对我们而言也可以直接用,但是不够直观,所以还是采用dataFormatString [$HK$-C04]#,##0.00;\-[$HK$-C04]#,##0.00

POI操作Excel设置单元格货币格式时转换方法插图1
image

验证

@Testpublic void test3() throws IOException {    Workbook workbook = new XSSFWorkbook();    Sheet sheet = workbook.createSheet();    Row row = sheet.createRow(0);    Cell cell = row.createCell(1);    CellStyle cellStyle = workbook.createCellStyle();    DataFormat dataFormat = workbook.createDataFormat();    cellStyle.setDataFormat(dataFormat.getFormat("[$HK$-C04]#,##0.00_);[Red]\\([$HK$-C04]#,##0.00\\)"));    cell.setCellValue(-500);    cell.setCellStyle(cellStyle);    File file = new File("C:\\Users\\Calvin\\Desktop\\excels\\test.xlsx");    workbook.write(new FileOutputStream(file));}

注意复制过去以后反斜杠需要转义,看结果吧

POI操作Excel设置单元格货币格式时转换方法插图2
image

总结

  1. 本文提供了POI操作Excel的过程中遇到数字转换问题的思路,也提供了代码可以直接复用;
  2. 经过自己总结,发现¥#,##0_);\[Red](¥#,##0)这种格式是个符号,类似欧元、英镑等,都有直接的符号可以替换就可以用了;
  3. 如果是带字母的,例如你想写成HK、A等这种带字母的,最好还是像我一样,逆向读一下Excel,然后再格式化你的单元格;
  4. 编程中遇到复杂问题,学会逆向思维或许可以解决问题。

文章转载于:https://www.jianshu.com/p/0f01d076d938

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » POI操作Excel设置单元格货币格式时转换方法
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录