在我试图使用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(),样式。getDataFormat(),样式。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.)”返回完整结果?
我的另一个问题是:是否可以使用ApachePOI在Excel文件中获得实际显示的值?与本例类似,是否可以直接从Excel获取值“(4.0 p.p.),而无需在POI中应用任何数据格式?
将Excel
数字格式0.0\\p.\p.;\(0.0\\p.\p.\)
转换成java.text.格式
时,apache poi
的DataForcat
中出现错误。正确的相应java.text.格式
将是新的java.text.DecimalFormat("0.0'p. p.';(0.0'p. p.')")
。但是apache poi
的DataForcat
无法正确翻译此内容。
您应该就此向apache poi
提交错误报告。在该错误报告中,您应该提供一个工作示例(完整的Java
代码和一个示例Excel
文件)来重现该问题。
作为一种解决方法,我们可以告诉DataFormatter
如何翻译单个特殊的Excel
数字格式。为此,请使用DataFormatter方法。添加格式。
例子:
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
格式,这些格式必须被翻译。这就是为什么提示向ApachePOI提交错误报告。
顺便说一句:Excel
格式0.0“p.p.”\(0.0“p.p.”\)
将更通用。它避免了将p.p.
中的点()与十进制分隔符混淆。
关于直接从Excel
文件获取格式化值的问题:这是不可能的。所有Excel
版本都将值和样式分开存储。数值总是以浮点值的形式存储在double
精度中。这些值的数字格式存储在文件的单独样式部分。因此,使用apache-poi
将单元格值样式化为Excel
的最佳实践是使用DataFormatter。formatCellValue,如我的代码示例所示。
我是Spring MVC的新手,我刚刚遇到Spring自定义格式化程序。所以我试图为java.util.date创建一个自定义格式化程序。 MyDateFormatter.java
本文向大家介绍.NET Framework 格式:自定义DateTime格式,包括了.NET Framework 格式:自定义DateTime格式的使用技巧和注意事项,需要的朋友参考一下 示例
本文向大家介绍PHP自定义函数格式化json数据示例,包括了PHP自定义函数格式化json数据示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP自定义函数格式化json数据的方法。分享给大家供大家参考,具体如下: PS:这里再为大家推荐几款比较实用的json在线工具供大家参考使用: 在线JSON代码检验、检验、美化、格式化工具: http://tools.jb51.net/code
v-charts 提供对数据格式的设置的能力,一个常见的设置数据格式的方式如下所示: <template> <ve-line :data="chartData" :settings="chartSettings"></ve-line> </template> <script> export default { data () { this.chartSettings = { metr
我想通过LLCP在一个NDEF记录中的NDEF消息中传输一个自定义数据(或者有效载荷可能会被分块到几个NDEF中)。传输的内容是具有特定格式的文件,仅在特定应用中具有意义。那么,指定NDEF头的最佳方法是什么? 1) 将TNF设置为0x04(NFC论坛外部类型),0x03(绝对URI)或0x05(未知)?0x04将在 TYPE 字段中具有自定义相对 URI,如果是绝对 URI,则0x03绝对 UR
问题内容: 我必须在Java中使用自定义日期格式。尽管Java不提供对微秒的支持,但它包含微秒。因此,我用零填充了时间模式,在格式化时它可以很好地工作,但是我无法使用该模式解析日期字符串。 有没有简单的解决方法,还是我必须自己处理微秒(使用String函数)? java.text.ParseException:无法解析的日期:“ 2010-01-25-12.40.35.769000” 问题答案: