sách gpt4 ai đã đi

Trình định dạng dữ liệu Apache POI không thể áp dụng định dạng tùy chỉnh "0.0 pp;(0.0 pp)"

In lại 作者:行者123 更新时间:2023-12-02 09:16:01 26 4
mua khóa gpt4 Nike

在我尝试使用 Apache POI 进行转换的 Excel 文件中,我有一个单元格的数值为 -3.97819466831428,自定义格式为“0.0 p.p.;(0.0 p.p.)”。因此,在 Excel 中显示的值为“(4.0 p.p.)”

当我使用 POI 库转换相同的内容时,我得到的输出为:“(4.0 p”如何获得与 Excel 中相同的值:(4.0 p.p.)?

我使用 DataFormatter 的方式是:

val = dataFormatter.formatRawCellContents(cell.getNumericCellValue(), style.getDataFormat(), style.getDataFormatString());

我认为问题出在“p.p.”的使用上。在数据格式字符串中,尤其是点。当我使用 style.getDataFormatString() 从 POI 打印数据格式字符串时,我得到的格式为“0.0\\p.\p.;(0.0\\p.\p.\)”。

即使我手动更改格式字符串以使用“0.0;(0.0\\p\.\p\.\)”,结果仍然相同。所以,我现在没有想法了。如何从数据格式化程序中获取完整结果,如 Excel 中的“(4.0 p.p.)”?

我的另一个问题是:是否可以使用 Apache POI 获取 Excel 文件中的实际显示值?像本例一样,是否可以直接从 Excel 获取值“(4.0 p.p.)”,而无需在 POI 中应用任何数据格式?

1 Câu trả lời

这是在转换 Excel 数字格式 0.0\\p.\p 时 apache poi của DataFormatter 中出现的错误.;\(0.0\\p.\p.\) 转换为 java.text.Format。正确的对应 java.text.Format sẽ là new java.text.DecimalFormat("0.0' p.p.';(0.0' p.p.')")。但是 apache poi của DataFormatter 无法正确转换此内容。

您应该向 apache poi 提交有关此问题的错误报告。在该错误报告中,您应该提供一个工作示例(完整的 Java 代码和示例 Excel 文件)来重现该问题。

作为一种解决方法,人们可以告诉 DataFormatter 如何转换单个特殊的 Excel 数字格式。为此,请使用方法 DataFormatter.addFormat .

Ví dụ:

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

import java.io.FileInputStream;

class DataFormatterAddFormat {

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

Workbook workbook = WorkbookFactory.create(new FileInputStream("ExcelExample.xlsx"));

DataFormatter dataFormatter = new DataFormatter();
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();

dataFormatter.addFormat("0.0 p.p.;(0.0 p.p.)",
new java.text.DecimalFormat("0.0' p.p.';(0.0' p.p.')"));
dataFormatter.addFormat("0.0\" p.p.\";\\(0.0\" p.p.\"\\)",
new java.text.DecimalFormat("0.0' p.p.';(0.0' p.p.')"));
dataFormatter.addFormat("0.0\\ \\p.\\p.;\\(0.0\\ \\p.\\p.\\)",
new java.text.DecimalFormat("0.0' p.p.';(0.0' p.p.')"));

Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {

String value = dataFormatter.formatCellValue(cell, formulaEvaluator);
System.out.println(value);

}
}
workbook.close();
}
}

现在可以正确翻译添加的特殊数字格式。当然,这并不是真正的最终解决方案,因为这里需要捕获所有可能需要翻译的 Excel 格式。这就是为什么提示向 apache poi 提交错误报告。

顺便说一句:Excel 格式 0.0"p.p.";\(0.0"p.p."\) 对此更为通用。它可以避免将 p.p. 中的点 (.) 与小数点分隔符混淆。

关于直接从 Excel 文件获取格式化值的问题:这是不可能的。所有 Excel 版本都单独存储值和样式。数值始终以 double 浮点值存储。这些值的数字格式存储在文件的单独样式部分中。因此,使用 apache poi 获取在 Excel 中样式化的单元格值的最佳实践是使用 DataFormatter.formatCellValue如我的代码示例所示。

关于java - Apache POI 数据格式化程序无法应用自定义格式 "0.0 p.p.;(0.0 p.p.)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58982545/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com