Использование Apache POI SXSSF API для записи xlsx с использованием шаблона со встроенным форматированием

Я пытаюсь выяснить, можно ли позволить шаблону обрабатывать форматирование (например, преобразование строк (чисел, дат, десятичных значений) в их собственные типы данных) при записи данных в xlsx с использованием API POI SXSSF вместо того, чтобы приложение использовало соответствующие методы setCellValue(Date/int/String/double) при записи данных.

Я проверил этот сценарий, как указано ниже, но, похоже, он не работает. Я был бы признателен за любые предложения здесь.

  1. Создан шаблон .xlsx со строкой заголовка, содержащей ячейки an_integer, a_decimal_number, a_date и a_string. Я отформатировал каждый столбец в заголовке в соответствии с типом, щелкнув правой кнопкой мыши столбец и выбрав «Форматировать ячейки».
  2. Использовал API SXSSF и добавил строку, содержащую данные 121, 132.7612, 13.03.2013, я строка, и метод setCellValue(String) для всех ячеек. Я ожидал, что данные будут автоматически преобразованы в соответствующие типы, поскольку столбцы были отформатированы для этого. Однако, похоже, этого не происходит, и сгенерированный файл Excel по-прежнему обрабатывает числа и дату как строки.

Был ли мой шаблон неправильного формата? То, что я пытался сделать, вообще осуществимо?


person soontobeared    schedule 14.03.2013    source источник


Ответы (1)


Метод setCellValue(String) в XSSFCell автоматически установит тип ячейки ячейки на CELL_TYPE_STRING, перезаписывая любой предыдущий тип ячейки, тем самым изменяя способ форматирования Excel значения ячейки.

Попробуйте использовать один из перегруженных методов setCellValue; каждый из них устанавливает тип ячейки в соответствии с типом ее аргумента:

  • setCellValue (логическое значение) - CELL_TYPE_BOOLEAN
  • setCellValue(Calendar) - CELL_TYPE_NUMERIC (Excel хранит свои даты в виде чисел)
  • setCellValue(Date) - CELL_TYPE_NUMERIC (Excel хранит свои даты в виде чисел)
  • setCellValue (двойной) - CELL_TYPE_NUMERIC
  • setCellValue (RichTextString) - CELL_TYPE_STRING
  • setCellValue (строка) - CELL_TYPE_STRING
person rgettman    schedule 14.03.2013
comment
rgettman@ - Спасибо за ответ. Я пытаюсь выяснить, есть ли способ позволить шаблону обрабатывать форматирование (строка -> дата, строка -> целое число и т. д.), вместо того, чтобы приложение вызывало соответствующие переопределенные методы на основе данных, которые оно записывает. Возможно ли это для шаблонов? - person soontobeared; 14.03.2013
comment
Нет, Apache POI предполагает, что вызывающая сторона знает, какой тип данных должен быть. Вы можете предоставить фасадный API поверх POI, который переключается на основе содержимого ячейки шаблона, например. a_decimal_number означает вызов Double.parseDouble при вводе пользователем, а затем вызов setCellValue(double). - person rgettman; 14.03.2013