我编写了一个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>);
}
}
所以,要么我得到识别货币名称的唯一号码,要么我直接得到货币名称,那么那将是最好的。
答案 0 :(得分:4)
您可以通过id查看org.apache.poi.ss.usermodel.BuiltinFormats类来识别内置格式,或者使用相同的类获取格式字符串
String dataFormatString =
BuiltinFormats.getBuiltinFormat(cell.getCellStyle().getDataFormat());
或者您可以使用getDataFormatString()
CellStyle
方法获取货币格式
String dataFormatString = cell.getCellStyle().getDataFormatString();
<强>更新强>
查看HSSFDataFormat班级
国际格式
自2003版以来,Excel支持国际格式。这些 表示前缀&#34; [$ - xxx]&#34; (其中xxx是1-7位数 十六进制数)。请参阅Microsoft文章 Creating international number formats了解有关这些代码的详细信息。
对于货币格式,前缀确实为[$c-xxx]
,其中c
是货币符号,xxx
是适当语言和位置的区域设置标识符(LCID)的十六进制值,因此您可以解析数据格式字符串以获取货币。
例如,对于货币"EUR € Spanish (Spain)"
,数据格式字符串为#.##0 [$€-C0A];-#.##0 [$€-C0A]
,因此您可以在[$€-C0A]
中翻译"Currency EUR - Spanish"
,对于"USD $ English (EE. UU.)"
,数据格式字符串为[$$-409]#.##0;-[$$-409]#.##0
,以便您在[$$-409]
...等
"Currency USD - English (U.S.)"
希望这有帮助。