背景
-
寫公司項(xiàng)目時(shí)遇到項(xiàng)目中要寫Excel县昂,并且單元格格式要寫成貨幣格式,既遇到負(fù)數(shù)變成紅色陷舅,整數(shù)正常倒彰,如下圖
網(wǎng)上找了N多帖子,也解決了部分困境莱睁,例如https://blog.csdn.net/weixin_33705053/article/details/92380084 感謝作者
于是我們先采用了這種格式¥#,##0_);\[Red](¥#,##0)
當(dāng)我們走到第二階段待讳,人民幣可以正常,美元的
$#,##0_);\[Red]($#,##0)
采用這種方式也可以正常顯示了仰剿,可是港幣怎么寫创淡,我們嘗試采用HK$#,##0_);\[Red](HK$#,##0)
,但不幸的時(shí)excel不認(rèn)識(shí)這個(gè)南吮,我們重新找資料琳彩,最終無果,只能自己想辦法港幣這種寫法部凑,Excel自定義轉(zhuǎn)換都不認(rèn)識(shí)露乏,肯定是我們寫錯(cuò)了,于是我們想涂邀,可以寫進(jìn)去瘟仿,能不能讀出來,開始嘗試
嘗試
@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敷搪,這個(gè)是一個(gè)與運(yùn)算的結(jié)果兴想,對(duì)我們而言也可以直接用,但是不夠直觀赡勘,所以還是采用dataFormatString [$HK$-C04]#,##0.00;\-[$HK$-C04]#,##0.00
驗(yàn)證
@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));
}
注意復(fù)制過去以后反斜杠需要轉(zhuǎn)義嫂便,看結(jié)果吧
總結(jié)
- 本文提供了POI操作Excel的過程中遇到數(shù)字轉(zhuǎn)換問題的思路,也提供了代碼可以直接復(fù)用闸与;
- 經(jīng)過自己總結(jié)毙替,發(fā)現(xiàn)
¥#,##0_);\[Red](¥#,##0)
這種格式是個(gè)符號(hào)岸售,類似歐元、英鎊等厂画,都有直接的符號(hào)可以替換就可以用了凸丸; - 如果是帶字母的,例如你想寫成HK等這種帶字母的屎慢,最好還是像我一樣,逆向讀一下Excel忽洛,然后再格式化你的單元格腻惠;
- 編程中遇到復(fù)雜問題,學(xué)會(huì)逆向思維或許可以解決問題欲虚。