我无法读取国际货币和会计数字格式从excel表到java独立应用程序使用poi 4.1.2(XSSF)。只能读取美国语言区符号,但无法读取Java中的其他货币符号。使用货币符号在java DataFormatter中只显示某些格式的单元格值,其他格式用?显示(例如:I/P:$10.00O/P:?10.00)。
记帐号码格式无法读取欧元货币符号(异常:非法参数异常)和一些显示单元数据的货币符号(货币符号和值)。代码:
对于(int i=1;i<=行;i++){
String ExcelFilename = sheet.getRow(i).getCell(<cell no of file>).getRichStringCellValue().getString().trim();
if(ExcelFilename.equals("<file name>")) {
for(int j=0;j<columns;j++) {
DataFormatter formatter = new DataFormatter();
cell = sheet.getRow(i).getCell(j,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
String check= "";
switch (cell.getCellType()) {
case BLANK:
check= formatter.formatCellValue(cell);
break;
case NUMERIC:
check= formatter.formatCellValue(cell);
break;
case BOOLEAN:
check =formatter.formatCellValue(cell);
break;
case STRING:
check=formatter.formatCellValue(cell);
break;
case FORMULA:
check= formatter.formatCellValue(cell);
break;
default:
break;
}
}
}
在DataFormatter
中,当使用货币欧元(EURO)时,将欧元符号放在像Euro1,234.56
这样的值前面时,似乎确实存在一个bug。所有使用违约欧元的国家通常不会这样做。他们正在编写类似1234.56欧元
的货币,所以在值后面放置欧元符号。
如果在Excel
中使用数字格式货币或记帐使用符号Euro(欧元123)
,那么Excel
将创建类似于[$欧元-2]\#,##0.00
的数字格式。这意味着货币符号欧元放在价值的前面。但是Apache POI
将2
解释为国家代码,如[$-809]#,##0.00
中的809
表示大不列颠。因此,由于这种误解,它失败了,因为它没有为代码2
找到国家。
一个解决办法是用“\u20ac”替换数据格式字符串中的所有“[$\u20ac-2]”。也就是说,仅用欧元
符号替换所有[$欧元-2]
。
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.PrintWriter;
class ReadExcelUsingDataFormatter {
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("ExcelExample.xlsx"));
DataFormat format = workbook.createDataFormat();
DataFormatter dataFormatter = new DataFormatter();
PrintWriter writer = new PrintWriter("Result.txt", "UTF-8");
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
try {
String dataFormatString = cell.getCellStyle().getDataFormatString();
if (dataFormatString.contains("[$\u20AC-2]")) {
System.out.println(dataFormatString);
dataFormatString = dataFormatString.replace("[$\u20AC-2]", "\u20AC");
System.out.println(dataFormatString);
cell.getCellStyle().setDataFormat(format.getFormat(dataFormatString));
}
String value = dataFormatter.formatCellValue(cell);
System.out.println(value); //This might not be printed correctly because of unicode deficiency of `System.out`. But `Result.txt` should contain it corrcetly.
writer.print(value + "\t\t");
} catch (Exception ex) {
ex.printStackTrace();
}
}
writer.println();
}
writer.close();
workbook.close();
}
}
让我们从一段简单的代码开始,用格式化货币: 打印:。 如果你想格式化货币,这是可以的。 但是我想做的是为给定的货币ISO 4217代码(例如JPY)获得货币符号(例如¥)。 我的第一个猜测是尝试使用: 但这为构造函数(en_US)中给定的区域设置提供了货币符号,在我的例子中是$。 有没有办法通过PHP中的货币ISO 4217代码获得货币符号?
在本例中,我们根据美国区域设置和丹麦语区域设置格式化货币。 文件:IOTester.java - 执行上面示例代码,得到以下结果 -
我如何从这个具有LODASH的国家数组中获得每个的货币数组?我以前有这个getCurrencys函数,但是我不能用它获得符号,所以现在我创建了这个,但是它正在创建重复的东西,比如这个
我想在Excel中将“2655.32”输出为“$2655.32”。
问题内容: 假设我提供了一个类似于或类似此字符串的字符串(带有数字和小数点以及一些分隔符,例如或或其他不可预测的字符串)。我需要编写一个方法,该方法接受像上面的参数一样的参数,并分别返回像或的String 。 您能否建议最有效,最易读的代码来实现这一目标? 注意:我知道要遍历每个索引,并检查它的重调谐器是否存在,或者 我正在效率和可读性方面寻找更优化的解决方案 谢谢。 问题答案: 这将删除任何不是
问题内容: 我在获取某个国家的货币代码时遇到问题。我的任务是获取用户的位置,找出他现在所在的国家/地区,并获取该国家/地区的货币代码。以下是从获取的位置获取国家/地区名称和国家/地区代码的代码: 这工作得很好。现在,我应该使用该类来获取对象。我可以使用该方法。但是类中没有构造函数,仅允许将国家/地区代码作为参数传递。表示我无法为该国家/地区创建对象。如何解决呢?提前致谢。 问题答案: 如果国家/地