使用POI将货币应用于Excel单元格

我写了一个Java程序,使用POI API读取一个Excel文件逐个单元格。 货币设置是使用MS Excel – “格式单元格”选项显式完成的。

但是,有没有什么方法可以用POI来识别应用于单元格的货币?

到目前为止,我已经尝试使用getCellStyle()。getDataFormat()并返回一个唯一的数字。 但是,问题在于它基于单元格样式,可以随单元格式(字体,大小等)的更改而改变。

我试过这个:

if(Cell.CELL_TYPE_NUMERIC) { System.out.println("Value in Excel cell:: " + cell.getNumericCellValue()); short styleType = cell.getCellStyle().getDataFormat(); System.out.println("style (currency):: " + styleType); if(styleType == <Some unique number>) //want this unique number { System.out.println("Currency applied to this cell:: " + <Currency name>); } } 

所以,要么我得到唯一的数字标识货币名称,或者如果我直接获得货币名称,那将是最好的。

您可以通过查看org.apache.poi.ss.usermodel.BuiltinFormats类的id来识别内置的格式,或者使用相同的类来获取格式string

  String dataFormatString = BuiltinFormats.getBuiltinFormat(cell.getCellStyle().getDataFormat()); 

也可以使用CellStylegetDataFormatString()方法获取货币格式

 String dataFormatString = cell.getCellStyle().getDataFormatString(); 

更新:

看一下HSSFDataFormat类

国际格式

自2003版本以来,Excel支持国际格式。 这些用前缀“[$ -xxx]”表示(其中xxx是1-7位hex数字)。 有关这些代码的更多详细信息,请参阅Microsoft文章创build国际号码格式 。

对于货币格式,前缀确实是[$c-xxx] ,其中c是货币符号, xxx是相应语言和位置的区域标识符(LCID)的hex值,因此您可以parsing数据格式string以获取货币。

例如,对于货币"EUR € Spanish (Spain)" ,数据格式string是#.##0 [$€-C0A];-#.##0 [$€-C0A]所以您可以将[$€-C0A] "Currency EUR - Spanish" ,对于"USD $ English (EE. UU.)" ,数据格式string是[$$-409]#.##0;-[$$-409]#.##0所以你可以翻译"Currency USD - English (US)"[$$-409]

希望这可以帮助。