当前位置: 首页 > 知识库问答 >
问题:

Java Apache POI Excel数值单元格值,带有区域设置pt BR

翁良弼
2023-03-14

我想在Excel中设置XSSFCell,将CellType显示为数字,并需要它将值显示为pt BR Locale(使用作为分隔符,而不是(不是十进制/小数-但仍然是双精度)。我成功地显示了正确的单元格值,但是CellTyle只得到String。我知道,double有美国的配置0.000,00,一个简单的NumberFormatLocale就可以了,但是CellType可以访问文本,而不是number

该数字已经配置了区域设置,它直接来自数据库。(例如:412.000),但将其双重转换为US(412,000)。

那么,我如何将单元格格式化为我的语言环境,并且仍然将单元格类型设置为数值

这是我到目前为止得到的:

    XSSFCell cell = row.createCell(anyCellNumber);
    double value = 412.000; //valueThatComesFromDataBaseWithLocaleFormatted
    cell.setCellType(CellType.NUMERIC);
    //At this point, double has already converted the cell value to 412,000 - So, What I did was:
    cell.setCellValue(String.format("%.3f", value).replace(",", ".")); // Replaced the , to . to match Locale

所以,这就是重点,设置了CellType,但是NumberFormatDecimalFormatLocaleString.format等,获取cell valueString,因此CellTypetext

不能使用Double。parseDouble(valueFormatted.toString()),因为如果字符串的语言环境已格式化,则会引发异常。

那么,如何(如果可能的话),我可以有一个CellType。NUMERIC和格式化为我的Locale(pt-BR)的单元格值???

提前感谢!


共有1个答案

上官斌
2023-03-14

据我所知,你特别希望你的单元格是数字类型,而你的显示器是“非日期”的?我能想到的唯一方法就是定义你自己的风格。这在带有自定义函数的excel中是可能的。在ApachePOI中,在修补单元格样式时可能会出现以下情况:

 ...
 Cell cell = row.createCell(cellIndex);
 CellStyle cellStyle = workbook.createCellStyle();
 CreationHelper createHelper = workbook.getCreationHelper();
 createHelper.createDataFormat("some specific custom data format").
 cell.setCellStyle(cellStyle);

然而,我不确定是否有办法。我不确定,但这些单元格样式似乎仅限于默认的excel样式https://www.roseindia.net/java/poi/setdataformat.shtml

最简单的方法是将您的单元格设置为“日期”类型。即使来自数据库的结果是一个数字,也可以将其转换为日期,因为日期只是时间戳上的一层。我强烈建议你考虑一下这种方法,而不是从看起来像日期的at“黑客”绕过数字。

 类似资料:
  • 问题内容: 我正在使用以下内容来设置文本区域的值。 但它似乎不起作用。message的值不能为null。有谁知道为什么它没有填补价值? 问题答案: Textarea没有价值。您需要在开始和结束标记之间插入消息。

  • 我需要将Excel行从一张工作表复制到另一张工作表。但是在复制而不是实际值之后,我得到了不同的值。有字符串值的单元格没有问题,但有数值的单元格没有问题。Excel单元格可以包含任何类型的值。我的代码应该接受所有这些内容,并将它们复制到另一张表中。请帮我解决这个问题。 我知道row.get单元格(二)"是转换类型单元格字符串,但我想设置setCellValue接受单元格,可以有任何类型的数据(例如:

  • 而且,当不为c1和c2设置任何CellValue时,实际上可以将它们的CellType设置为Numeric,突然之间代码又可以工作了。它在没有CTTable的情况下也可以工作。 有什么想法或变通办法吗?还是POI的一个bug(因为它尝试从任何单元格中获取字符串值,而不管它的单元格类型如何)?

  • 我无法将此行的样式设置为: 它给我的错误是“无法在基元类型void上调用setCellValue(String)”。这种情况下的错误是什么?我如何在单行代码中实现所有3个目标?

  • 如何使用为给定的(默认区域设置就足够了)和给定的小数位数设置值的格式? 例如,我有这些值: 我想以以下方式打印它们,例如,我们的区域设置和小数点后2位: 现在,我如何设置一个NumberFormat总是显示2位小数点,但是基于当前区域设置显示千位分隔符和小数点呢?

  • 我正在使用谷歌表单作为日常仪表板。我需要的是根据另一个单元格C5的值更改单元格B5的背景色。如果C5大于80%,则背景色为绿色,但如果低于,则为琥珀色/红色。 这是Google Sheets功能提供的还是我需要插入脚本?