Есть ли где-нибудь доступная библиотека Java, которая поддерживает именно строки формата Excel? - PullRequest
9 голосов
/ 30 июля 2010

Для приложения Java, которое собирает данные из некоторых источников и выполняет некоторые вычисления, мы хотим предложить пользователям возможность использовать их собственные строки формата и предпочли бы синтаксис строки формата, который они знают из Excel (например, "$ "#,###.,0), который совпадает с используемым в .net и Analysis Services .

Ближайшая вещь, которую я нашел в Java - это DecimalFormat , в которой отсутствуют некоторые функции (например, форматирование тысяч и миллионов с помощью разделителя тысяч в конце, чисел с плавающей запятой NaN и бесконечности отображается по-разному и т. д., и, возможно, в зависимости от локали, будут небольшие дополнительные различия.

Пока достаточно только числового форматирования. Возможно, форматирование даты и строки станет требованием в будущем.

Есть ли библиотека, или нам нужно было бы ее самим развивать?

Я не могу себе представить, что мы единственные, кто имеет эту проблему.

По мнению Ноэля М, POI не предлагает решения. Есть еще идеи?

Ответы [ 5 ]

3 голосов
/ 10 августа 2010

Не существует библиотеки для Java, которая выполняет такой анализ. Обратный инжиниринг Excel для всех тестовых случаев занял бы много времени для такого нишевого продукта.

Поскольку .net преобразует 100% ваших тестовых случаев, я предлагаю вам сосредоточиться на вызове .Net в вашем Java-приложении .

3 голосов
/ 30 июля 2010

Apache POI может сделать то, что вы ищете.

2 голосов
/ 13 августа 2010

Есть ли библиотека, или нам придется ее разрабатывать самим?

Проверка ExtenXLS , Java Spreadsheet SDK или версия с открытым исходным кодом OpenXLS (под GPLv.3).Об OpenXLS:

OpenXLS - это версия ExtenXLS с открытым исходным кодом - ведущего пакета Java Spreadsheet SDK.

OpenXLS - это безошибочный способ внедрения расширенных функциональных возможностей таблицы Java в вашприложения.

С тем же промышленным кодом, что и в ExtenXLS3, OpenXLS является отличным исполнителем, который дает вашим приложениям Java ту функциональность электронных таблиц, которую требуют ваши пользователи, а затем и некоторые!

пользователи бизнес-аналитических приложений и отчетов в формате, который они знают и любят, в комплекте с диаграммами, изображениями, VB-кодом и всеми неповрежденными функциями Excel.

Я быстро взглянул на API иобнаружил FormatHandle#convertFormatString(String), что преобразует строку формата в стиле Excel в строку формата Java .

Я не знаю, будет ли это соответствовать вашим ограничениям, но этобезусловно, серьезный продукт.

1 голос
/ 11 августа 2010

для десятичного формата, включая локаль и другие материалы:

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

Вы можете настроить вывод decimalFormat, используя ваши собственные пользовательские символы DecimalFormatSymbols. Можно задать строку, используемую для представления 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

0 голосов
/ 11 августа 2010

(добавив еще один ответ, как вы ссылаетесь на мой первый в вашем вопросе сейчас)

Кажется, такого объекта не существует. Одна вещь, которую вы могли бы изучить, это создать ее самостоятельно. Возможно, вы можете использовать JavaCC , чтобы выразить эти форматы самостоятельно и узнать, как они в конечном итоге отображаются на типичные объекты Java. JavaCC определенно сможет дать вам возможность использовать ваши собственные строки формата.

Возможно, это хорошо подошло бы как реализация NumberFormat

...