POI設置單元格貨幣格式時轉換方法

背景

  1. 寫公司項目時遇到項目中要寫Excel,並且單元格格式要寫成貨幣格式,既遇到負數變成紅色,整數正常,如下圖
    網上找了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自定義轉換都不認識,肯定是我們寫錯了,於是我們想,可以寫進去,能不能讀出來,開始嘗試

嘗試

@Test
public 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

驗證

@Test
public 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));
}

注意複製過去以後反斜槓需要轉義,看結果吧

總結

  1. 本文提供了POI操作Excel的過程中遇到數字轉換問題的思路,也提供了代碼可以直接複用;
  2. 經過自己總結,發現¥#,##0_);\[Red](¥#,##0)這種格式是個符號,類似歐元、英鎊等,都有直接的符號可以替換就可以用了;
  3. 如果是帶字母的,例如你想寫成HK$\A$等這種帶字母的,最好還是像我一樣,逆向讀一下Excel,然後再格式化你的單元格;
  4. 編程中遇到複雜問題,學會逆向思維或許可以解決問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章