【问题标题】:Number as it is from excel file using Apache POI使用 Apache POI 来自 excel 文件的数字
【发布时间】:2017-05-20 02:09:56
【问题描述】:

我正在使用 Apache POI(3.9 版)框架来处理 excel 文件,即读取 excel 文件。

我在数字类型方面遇到问题。由于各种原因,用户可以在 Excel 文件中使用逗号或点作为小数分隔符写入数字,即 12.34 或 12,34。

现在,我想按原样获得该值(即,如果是 12.34,那么我想获得 12.34,或者如果是 12,34,那么我想获得 12,34),但是相反,POI Cell初步给了我一个双精度点作为小数分隔符。 因此,如果单元格值为 12,34,POI 单元格将给出值 12.34 的两倍。

这种行为不是我想要的。我想获取输入的值 (12,34)。

如何避免/解决这个问题?

我已经在 Stackoverflow 中搜索过类似的问题,并尝试使用线程 How can I read numeric strings in Excel cells as string (not numbers) with Apache POI? 中给出的解决方案,还尝试使用替代 org.apache.poi.ss.usermodel.DataFormatter 类,它可以工作,但是当值为 12,34 并键入时它不起作用单元格的数量是 Excel 文件本身中定义的数字。

【问题讨论】:

  • 您要查找的数据未存储在单元格值中。该值只是一个数字。您必须查看单元格格式,然后自己将数字格式化为字符串。
  • 嗨,加里,谢谢您的回复。我没有强调在阅读 excel 文件(用户提供)时我需要进行一些验证。我会格式化它,只要我能得到一个字符串而不是一个已经修改过的双精度数。你有这方面的cmet吗?
  • 如果您正在验证数字,我建议您将验证字符串转换为数字以与单元格中的值进行比较可能会更幸运。电子表格中没有存储有关小数/千位分隔符的信息。这基于应用程序或操作系统中设置的区域设置,并且仅显示 - 它根本不存储。因此,您必须手动将数字格式化为字符串。
  • 感谢 Gary 提供的宝贵信息 :) 只是,令人难以置信的是,这个框架不能像单元格中所写的那样仅仅提供价值。我无法理解,因为我确信他们知道。无论如何,再次感谢!
  • 能否请您发表您的评论作为答案,以便我为您的回答表示感谢。谢谢!

标签: java excel apache-poi


【解决方案1】:

如果您正在验证数字,我建议您将验证字符串转换为数字以与单元格中的值进行比较可能会更幸运。电子表格中没有存储有关小数/千位分隔符的信息。这基于应用程序或操作系统中设置的区域设置,并且仅显示 - 它根本不存储。因此,您必须手动将数字格式化为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多