Java 使用POI获取应用于Excel单元格的货币
我已经编写了一个Java程序,使用POIAPI逐单元读取Excel文件。 使用MS Excel-“格式单元格”选项显式设置货币 但是,是否有任何方法可以识别使用POI应用于单元格的货币 到目前为止,我已经尝试使用getCellStyle().getDataFormat(),它返回一个唯一的数字。但是,问题是它基于单元格样式,并且可以随着单元格格式(字体、大小等)的更改而更改 我试过这个:Java 使用POI获取应用于Excel单元格的货币,java,excel,apache-poi,Java,Excel,Apache Poi,我已经编写了一个Java程序,使用POIAPI逐单元读取Excel文件。 使用MS Excel-“格式单元格”选项显式设置货币 但是,是否有任何方法可以识别使用POI应用于单元格的货币 到目前为止,我已经尝试使用getCellStyle().getDataFormat(),它返回一个唯一的数字。但是,问题是它基于单元格样式,并且可以随着单元格格式(字体、大小等)的更改而更改 我试过这个: if(Cell.CELL_TYPE_NUMERIC) { System.out.println("Val
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>);
}
}
if(Cell.Cell\u TYPE\u NUMERIC)
{
System.out.println(“Excel单元格中的值::”+cell.getNumericCellValue());
short styleType=cell.getCellStyle().getDataFormat();
System.out.println(“样式(货币):”+样式类型);
if(styleType==)//想要这个唯一的数字吗
{
System.out.println(“应用于此单元格的货币::”+);
}
}
因此,要么我得到标识货币名称的唯一数字,要么如果我直接得到货币名称,那就最好了。您可以通过查看类的id来标识内置格式,或者使用相同的类来获取格式字符串
String dataFormatString =
BuiltinFormats.getBuiltinFormat(cell.getCellStyle().getDataFormat());
或者,您可以使用getDataFormatString()
方法从CellStyle
String dataFormatString = cell.getCellStyle().getDataFormatString();
更新:
看课堂
国际格式
自2003版以来,Excel支持国际格式。这些
用前缀“[$-xxx]”表示,其中xxx是1-7位数字
十六进制数)。请参阅Microsoft文章
有关这些代码的更多详细信息
对于货币格式,前缀实际上是[$c-xxx]
,其中c
是货币符号,xxx
是相应语言和位置的区域设置标识符(LCID)的十六进制值,因此您可以解析数据格式字符串以获取货币
例如,对于货币“EUR EUR Spanish(西班牙)”
,数据格式字符串为。##0[$€-C0A];-###0[$€-C0A]
因此您可以将[$€-C0A]
翻译成“欧元-西班牙货币”
,用于“美元英语(EE.UU.)”
数据格式字符串为[$$-409].\-[$$-409].####0
因此您可以在中翻译[$$-409]
“货币美元-英语(美国)”
。。。等
希望这有帮助。您可以通过查看类的id来识别内置格式,或者使用相同的类获取格式字符串
String dataFormatString =
BuiltinFormats.getBuiltinFormat(cell.getCellStyle().getDataFormat());
或者,您可以使用getDataFormatString()
方法从CellStyle
String dataFormatString = cell.getCellStyle().getDataFormatString();
更新:
看课堂
国际格式
自2003版以来,Excel支持国际格式。这些
用前缀“[$-xxx]”表示,其中xxx是1-7位数字
十六进制数)。请参阅Microsoft文章
有关这些代码的更多详细信息
对于货币格式,前缀实际上是[$c-xxx]
,其中c
是货币符号,xxx
是相应语言和位置的区域设置标识符(LCID)的十六进制值,因此您可以解析数据格式字符串以获取货币
例如,对于货币“EUR EUR Spanish(西班牙)”
,数据格式字符串为。##0[$€-C0A];-###0[$€-C0A]
因此您可以将[$€-C0A]
翻译成“欧元-西班牙货币”
,用于“美元英语(EE.UU.)”
数据格式字符串为[$$-409].\-[$$-409].####0
因此您可以在中翻译[$$-409]
“货币美元-英语(美国)”
。。。等
希望这能有所帮助。您能发布代码吗?您能发布代码吗?这只返回“$”的结果,而MS Excel提供了很多货币类型。对于所有其他类型,它返回'-1',这使得它几乎不可能再进一步使用。是否有任何方法可以获得唯一的数字或id,或任何与视觉格式(如字体、颜色等)无关的内容?检查单元格()时,它会向我显示我在excel中指定的格式的货币。但是,如何在变量中获得特定的字符串或表示形式?或者更确切地说,我该如何把它拿出来,以便我可以进一步使用它?例如,如果格式为日元,我得到:[$¥-411]#、#0.00\-[$¥-411]#,##0.00这是在:-stylesSource->numberFormats->table-HashMapEntry检查单元格()现在我要做的就是以某种方式将该值取到外部,以便我可以进一步使用它。。。。有什么想法吗?我用getDataFormatString()方法解决了它。非常感谢,你不知道你帮了我多少。。。干杯:)这只返回“$”的结果,而MS Excel提供了很多货币类型。对于所有其他类型,它返回'-1',这使得它几乎不可能再进一步使用。是否有任何方法可以获得唯一的数字或id,或任何与视觉格式(如字体、颜色等)无关的内容?检查单元格()时,它会向我显示我在excel中指定的格式的货币。但是,如何在变量中获得特定的字符串或表示形式?或者更确切地说,我该如何把它拿出来,以便我可以进一步使用它?例如,如果格式为日元,我得到:[$¥-411]#、#0.00\-[$¥-411]#,##0.00这是在:-stylesSource->numberFormats->table-HashMapEntry检查单元格()现在我要做的就是以某种方式将该值取到外部,以便我可以进一步使用它。。。。有什么想法吗?我用getDataFormatString()方法解决了它。非常感谢,你不知道你帮了我多少。。。干杯:)