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

Apache POI:当xls正常工作时,从xlsx读取错误的数字/字符串值

邓声
2023-03-14

我有两张Excel表格(一张.xls,一张.xlsx),内容为“1234567891234.56”,位于A1单元格。

现在我正在尝试将这些内容导入我的java-app中,使用Apache POI如下所示:

    private String getValue(Cell myCell, int myCelltype)
        throws CellAccessException {
    try {

        switch (myCelltype) {

        case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:

            return myCell.getStringCellValue();

首先,CellType(mycell.getCellType())总是1(字符串),无论我如何格式化单元格本身。

第二,当我从xlsx读取时,我得到了“1234567891234.5601”,而从xls读取时,我得到了“1234567891234.56”,这是我预期的结果。

另一个例子是文件中的“12345678912345.6”和从XLSX读取的结果“12345678912345.602”。

我不知道,是什么导致了我的问题,似乎没有其他人有类似的问题。

如果你能给我任何帮助,我将不胜感激。

提前致谢,还有来自德国的问候。奥斯里克

String content = myCell.getStringCellValue();
System.out.println(result + "#" +result.length());
Double dresult = Double.valueOf(result);
System.out.println(dresult);

所以我开始思考,我从xlsx中的单元格中读取这个错误,这些单元格是数字,但标记为celltype STRING,并将STRING转换为Double。Double有什么问题吗?也许我们在这里得到了一些旧的Java版本,并且Double被破坏了。我不认为这是波伊的错,因为它是3.10决赛,应该工作良好。或者Double在转换这个字符串的时候做了什么我不明白的事情吗?我对Java和这份工作是新的...只是在苦苦挣扎。

共有1个答案

卢永寿
2023-03-14

我不确定xls和XLSX中的默认十进制格式是否发生了变化。然而,只是一个建议,如果不固定小数点位,你应该从你自己的一端,像...

case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:{
    DecimalFormat df = new DecimalFormat("##.##");
    return df.format(myCell.getNumericCellValue());
 类似资料:
  • 问题内容: 我的代码: 引用的日志文件是: 然后,需要检查脚本中的下一个条件是: 如果条件不起作用 问题答案: 必要的修复: 此后已在问题中解决。 可能必要的修复: 如注释中所述,在脚本中使用尾随空格表示将尾随空格存储在其中,这将破坏与的比较。

  • 我有一个 和 MapString只是包含大量的数字(除了数字没有其他字符)。 现在我想用mapString的第一个字符分配数组中的第一个值(map[0,0]),用mapString的第二个字符分配第二个值(map[0,1]),依此类推。我使用以下代码: 现在发生的几乎是我所希望的。问题是它给每个值分配两个数字,而不是一个。我也不知道他在使用什么数字,因为它们不是我的地图保存设置中的数字,但我可以自

  • 问题内容: 这个问题已经在这里有了答案 : 如何使用Python查找字符串中的重叠序列数?[重复] (4个答案) 4年前关闭。 在“ ababa”中有两次“ aba”出现(第0个索引和第2个索引): 但是这段代码的输出值为:1 我知道这个问题似乎很简单,但是答案不应该是2吗? 如果不是,那么count函数不是真的没有按照预期去做吗? 有没有简单的选择? 问题答案: 来自Python字符串函数文档

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

  • 对不起,新手:/。所以当我在“输入你的年龄”中键入一封信时,我有这个问题 输入您的年龄:q 线程“main”java.util.InputMismatchException中出现异常 在java.util.scanner.throwfor(Scanner.java:909) 我想如果我打了任何一个字母,它显示“无效输入”。有人能帮我吗?[对不起,糟糕的英语]

  • 许多Android java方法返回数字常量值。在记录或向用户显示值时,我希望自动将这些值转换为字符串(类似于Windows API/)。然而,除了切换所有可能的值并生成匹配的字符串之外,我找不到一种方法来实现这一点。 例如:返回一个整数值:(0)、(1)、(2)。我想把数字转换成适当的字符串。我可以写一个这样的开关案例: 但我想避免它,尤其是当有超过3个可能的返回值时。 我试着在StackExc