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

时间:2014-03-24 07:51:01

标签: java excel apache-poi

我编写了一个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>);
  }
}

所以,要么我得到识别货币名称的唯一号码,要么我直接得到货币名称,那么那将是最好的。

1 个答案:

答案 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.)"

希望这有帮助。