gpt4 book ai didi

java - Apache POI自定义数据格式修改

转载 作者:行者123 更新时间:2023-12-02 00:58:53 32 4
gpt4 key购买 nike

我正在使用 Apache POI 更改 Excel 文件并在其中放入一些数据。我尝试的大多数事情都很顺利。但是我的货币格式没有 100% 正确...

我想要的是我的货币格式类似于 € 1.000,43。所以欧元符号在左边,金额在右边,点作为千位分隔符,逗号作为小数分隔符和两位小数。

如果我在 Excel 中执行此操作并应用此自定义格式设置规则,它将起作用:"_ [$€-nl-BE] * #.##0,00_ ;_ [$€-nl-BE] * -#.##0,00_ ;_ [$€-nl-BE] *\"-\"??_ ;_ @_ "

所以我只是复制了该规则并通过 Apache POI 应用它:

XSSFDataFormat dataFormat = (XSSFDataFormat) workbook.createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("_ [$€-nl-BE] * #.##0,00_ ;_ [$€-nl-BE] * -#.##0,00_ ;_ [$€-nl-BE] * \"-\"??_ ;_ @_ "));

但是,结果略有不同:€ 1.000,4300。您可以看到,除了小数点之外,一切顺利。有 4 个而不是 2 个...当我在 Excel 中查看自定义格式时,它也略有不同(注意 4 个零): _ [$€-nl-BE] * #.##0,00000_ ;_ [$€-nl -BE] * -#.##0,00000_ ;_ [$€-nl-BE] * "-"??????_ ;_ @_

所以我想知道有人(Apache POI 或 Excel)在某个地方输入了 4 个小数而不是我定义的 2 个小数,这可能是什么问题。请注意,如果我在 Excel 中将其更改回 2 位小数,它会再次显示正确。即使在保存并关闭并重新打开文档之后也是如此。

最佳答案

Apache poi 创建 *.xlsx 文件,就像 Excel 存储它一样。在存储中,数字格式从未本地化,但始终采用 en_US 格式。只有 Excel GUI 会本地化数字格式。

因此,对于存储,您的数字格式必须为

"_ [$€-nl-BE] * #,##0.00_ ;_ [$€-nl-BE] * -#,##0.00_ ;_ [$€-nl-BE] * \"-\"??_ ;_ @_ "

请注意,由于 en_US 语言环境,小数分隔符为 .,千位分隔符为 ,

如果在本地化的 Excel GUI 中打开,则会更改为区域设置特定的小数分隔符和千位分隔符。

但 Excel 本身也不以数字格式存储诸如 nl-BE 之类的语言标签。相反,它使用 Windows Language Code Identifier (LCID) 。这是 nl-BE813。因此,使用与 [$€-nl-BE] 相同的 [$€-813] 会更好。

以下内容也适用于我的德语 Excel:

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

import java.io.FileOutputStream;

class CreateExcelCustomNumberFormat {

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

Workbook workbook = new XSSFWorkbook();
DataFormat dataFormat = workbook.createDataFormat();
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(dataFormat.getFormat("_ [$€-813] * #,##0.00_ ;_ [$€-813] * -#,##0.00_ ;_ [$€-813] * \"-\"??_ ;_ @_ "));

Cell cell = workbook.createSheet().createRow(0).createCell(0);
cell.setCellValue(1000.43);
cell.setCellStyle(cellStyle);

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

此代码使用当前的 apache poi 4.1.2Excel 2016 进行测试。

关于java - Apache POI自定义数据格式修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60967396/

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