gpt4 book ai didi

java - 使用 Apache POI 导出数据时印度 (INR) 和美国 (美元) 的货币格式不起作用

转载 作者:行者123 更新时间:2023-12-02 10:24:34 37 4
gpt4 key购买 nike

我正在使用 Apache POI 导出数据,并且数据同时显示印度和美国货币。但是在应用单独的数据格式之后,我得到了应用于所有数据的相同格式(印度 INR)。

public static void main(String[] args) {
try {
System.out.println("*******Export Excel*********");

File myFile = new File("MyFirstExcel.xls");
FileOutputStream out = new FileOutputStream(myFile);
XSSFWorkbook xssfworkbook = new XSSFWorkbook();
XSSFSheet sheet = xssfworkbook.createSheet("new sheet");

XSSFCellStyle INRformatStyle = xssfworkbook.createCellStyle();
XSSFCellStyle USformatStyle = xssfworkbook.createCellStyle();

XSSFDataFormat df = xssfworkbook.createDataFormat();

USformatStyle.setDataFormat(df.getFormat("[$$-409]#,##0.00;"));
INRformatStyle.setDataFormat(df.getFormat("₹#,##0.00;"));

sheet.setColumnWidth(0, 7000);

XSSFRow row = sheet.createRow((short) 0);
XSSFCell cell = row.createCell((short) 0);
cell.setCellValue(100000.0);
cell.setCellStyle(USformatStyle);

XSSFRow row1 = sheet.createRow((short) 1);
XSSFCell cell1 = row1.createCell((short) 0);
cell1.setCellValue(100000.0);
cell1.setCellStyle(INRformatStyle);

xssfworkbook.write(out);
out.close();

} catch (Exception e) {
e.printStackTrace();
}

}

预计 100,000 美元 1,00,000.00 卢比

实际 1,00,000.00 美元 1,00,000.00 卢比

最佳答案

Excel 中数字分组的方式取决于 Windows 系统区域设置: Change the Windows regional settings 。实际上没有本地选项可以通过数字格式设置它。因此,只要您的系统告诉 Excel:“我们想要使用印地语(印度)格式”,因此数字分组设置为 12,34,56,789 那么就会是这样对于每个设置了千位分隔符的数字。

避免这种情况的唯一可能是将使用的系统区域设置设置为印地语(印度)格式,因此将数字分组设置为12,34,56,789

enter image description here

或者使用一种假数字格式,如[$$-409]#\,###\,##0.00

...
USformatStyle.setDataFormat(df.getFormat("[$$-409]#\\,###\\,##0.00"));
...

这不是使用逗号作为千位分隔符,而是使用 , 作为数字流中的文本。因此系统的数字分组被绕过。

完整示例:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class CreateExcelDigitGroupings {

public static void main(String[] args) throws Exception {

Workbook workbook = new XSSFWorkbook();
DataFormat dataformat = workbook.createDataFormat();
CellStyle defaultCurrency = workbook.createCellStyle();
defaultCurrency.setDataFormat((short)8); //see https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/BuiltinFormats.html
CellStyle defaultUSDCurrency = workbook.createCellStyle();
defaultUSDCurrency.setDataFormat(dataformat.getFormat("[$$-409]#,##0.00"));
CellStyle fakeHindiCurrency = workbook.createCellStyle();
fakeHindiCurrency.setDataFormat(dataformat.getFormat("₹#\\,##\\,##\\,##0.00"));
CellStyle fakeUSDCurrency = workbook.createCellStyle();
fakeUSDCurrency.setDataFormat(dataformat.getFormat("$#\\,###\\,##0.00"));

Sheet sheet = workbook.createSheet("Sheet1");

double value = 12345678.9;
Cell cell;
int r = 0;
sheet.createRow(r).createCell(0).setCellValue("defaultCurrency");
cell = sheet.getRow(r++).createCell(1);
cell.setCellValue(value);
cell.setCellStyle(defaultCurrency);

sheet.createRow(r).createCell(0).setCellValue("defaultUSDCurrency");
cell = sheet.getRow(r++).createCell(1);
cell.setCellValue(value);
cell.setCellStyle(defaultUSDCurrency);

sheet.createRow(r).createCell(0).setCellValue("fakeHindiCurrency");
cell = sheet.getRow(r++).createCell(1);
cell.setCellValue(value);
cell.setCellStyle(fakeHindiCurrency);

sheet.createRow(r).createCell(0).setCellValue("fakeUSDCurrency");
cell = sheet.getRow(r++).createCell(1);
cell.setCellValue(value);
cell.setCellStyle(fakeUSDCurrency);

sheet.autoSizeColumn(0);
sheet.autoSizeColumn(1);

FileOutputStream out = new FileOutputStream("CreateExcelDigitGroupings.xlsx");
workbook.write(out);
workbook.close();
out.close();

}
}

导致 Excel 在 Windows 区域设置 中设置格式印地语(印度),因此默认数字分组设置为 12,34,56,789:

enter image description here

正如您所看到的,所有默认数字格式都使用系统的数字分组。但我的假美元格式有效。

结果为 OpenOffice 3.2.1 Ubuntu 18.04.1 LTS。

enter image description here

关于java - 使用 Apache POI 导出数据时印度 (INR) 和美国 (美元) 的货币格式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070383/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com