使用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());
也可以使用CellStyle
的getDataFormatString()
方法获取货币格式
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]
希望这可以帮助。