有没有任何可用的Java库支持Excel的格式字符串?

9
对于一个从一些源中汇集数据并进行一些计算的Java应用程序,我们希望为用户提供使用自己的格式字符串的可能性,并且更喜欢他们从Excel(例如"$ "#,###.,0)了解的格式字符串语法,这恰好也是在.netAnalysis Services中使用的相同语法。
我在Java中找到的最接近的东西是DecimalFormat,它缺少一些功能(例如通过将千位分隔符放在末尾来格式化千位和百万位,浮点数NaN和无穷大会以不同的方式显示等),并且可能取决于区域设置,还会有一些其他小差异。
目前,仅数值格式化就足够了。也许日期和字符串格式化将来会成为要求。

有没有现成的库可用,还是我们需要自己开发?

我想我们不可能是唯一遇到这个问题的人。

Noel M建议使用POI似乎并不能提供解决方案。还有其他想法吗?

5个回答

3

Apache POI可能能够完成您所需的任务。


我原以为它只是管理MS Office文件的。但也许一个副作用是数字格式化。我会去看一下。 - Frank
@Frank - HSSF是用于Excel的组件:http://poi.apache.org/spreadsheet/index.html - Noel M
似乎POI在这里无法提供帮助。就我所见,POI本身并不提供任何格式评估。它只允许您定义格式并将其分配给单元格。然后,实际数字转换为显示字符串似乎仅由Excel完成,而不是POI本身。 - Frank

3
没有Java库可以做这种解析。对于这样一个小众产品,反向工程Excel以涵盖所有测试用例将耗费大量时间。
由于.NET可以转换您的所有测试用例,我建议您集中精力在Java应用程序中调用.NET

目前我们正在讨论的选项之一是从Java中调用.NET。但由于这是为了在不同客户端部署应用程序,一个巨大的缺点就是增加了部署过程的复杂性。 - Frank

2
有图书馆可以使用,还是我们需要自己开发?
请查看ExtenXLS,这是Java电子表格SDK,或其开源版本OpenXLS(在GPLv.3下)。关于OpenXLS:
OpenXLS是ExtenXLS的开源版本 - 领先的Java电子表格SDK。
OpenXLS是将高级Java电子表格功能嵌入您的应用程序的零风险方式。
与ExtenXLS3具有相同的工业强度代码一样,OpenXLS是一个坚如磐石的表现者,为您的Java应用程序提供用户要求的电子表格功能 - 甚至更多!
以用户知道和喜爱的格式为他们提供商业智能应用程序和报告,包括图表、图像、VB代码和所有Excel功能。
我快速查看了API,找到了FormatHandle#convertFormatString(String),它可以将Excel样式的格式字符串转换为Java格式字符串。

我不知道它是否符合您的限制条件,但它肯定是一个严谨的产品。


这是我提问时所期望的答案中最接近的一个 - 即使我们不会使用它 - 因为许可证要么是GPL(因此不能在我们的商业产品中使用),要么具有商业许可证(对于我们将使用的完整电子表格库来说太昂贵了)。 - Frank

1

对于包括区域设置和其他内容的十进制格式:

http://www.jdocs.com/javase/7.b12/java/text/DecimalFormat.html

http://www.freshsources.com/Format.htm

http://www.java2s.com/Code/Java/I18N/JavaI18NFormatNumberFormat.htm

您可以使用自定义的DecimalFormatSymbols来调整decimalFormat输出。可以设置用于表示NaN和更多内容的字符串。

http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormatSymbols.html

日期格式:

http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/

对于在JFormattedTextField中的两个值

http://www.java2s.com/Code/Java/Swing-JFC/Formatted-TextField.htm

文本格式

http://www.java2s.com/Code/Java/Development-Class/MakecustomInputTextFormatterinJava.htm http://www.java2s.com/Code/Java/Development-Class/Formatter.htm http://www.java2s.com/Code/Java/Development-Class/ApplyamasktoString.htm


虽然JDK功能提供了格式化,但与.net/Excel/AS格式化存在一些差异。我不确定尝试适应现有功能是否比从头开始开发格式化程序更费力。然而,我认为查看现有的格式化程序可以让您了解如何设计良好的自定义类API的一些想法。 - Frank

0

(现在您在问题中提到了我的第一个答案,因此我又添加了一个答案)

似乎并不存在这样的功能。您可以尝试创建它自己。您可能可以使用JavaCC来表达这些格式,并将它们映射到典型的Java对象。 JavaCC肯定能够让您使用自己的格式字符串。

也许这将作为NumberFormat的实现很好地适合。


除了调用 .net,这是我们正在讨论的另一个可能性。然而,我不确定对于解析格式字符串这样简单的任务,编译器生成器是否会带来太多开销,手动编码可能更容易,前提是团队中迄今为止没有人使用过 JavaCC。 - Frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接