gpt4 book ai didi

java - DataFormatter (org.apache.poi) 删除了我的零

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:15 25 4
gpt4 key购买 nike

当我尝试获取具有格式设置的单元格的值时 - 我得到的结果不带零。

单元格值:7654

单元格格式值:0"0/10с"

单元格显示值:7654 0/10с

DataFormatter formatter = new DataFormatter();
String orderNumber = formatter.formatCellValue(cell);
System.out.println(orderNumber);

结果:7654/1с

截图:Cell format value

最佳答案

这是将 Excel 数字格式 0"0/10с" 转换为 java.text.Format 时,apache poiDataFormatter 中出现的错误。正确的对应 java.text.Format 将是 new java.text.DecimalFormat("0' 0/10с'")。但是 apache poiDataFormatter 无法正确转换此内容。

您应该向 apache poi 提交有关此问题的错误报告。但在错误报告中,您不应以 Excel 数字格式 0"0/10с" 作为示例,因为它包含西里尔字母 с,因此可能会导致对 Unicode 问题的错误假设。使用 Excel 数字格式 0"0abc0" 也会出现同样的问题(当它们包含在引号内的文本部分时,会删除 0)。

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

示例:

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/10\u0441\"", new java.text.DecimalFormat("0' 0/10\u0441'"));
dataFormatter.addFormat("0\" 0/10c\"", new java.text.DecimalFormat("0' 0/10c'"));
dataFormatter.addFormat("0\" 0abc0\"", new java.text.DecimalFormat("0' 0abc0'"));

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();
}
}

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

关于java - DataFormatter (org.apache.poi) 删除了我的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57162659/

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