Какой лучший API для чтения листов Excel в java - JXL или Apache POI

Какой из двух API-интерфейсов проще читать/писать/редактировать листы excel? Эти API не поддерживают расширения CSV?

Используя JXL для file.xls и file.xlsx, я получаю исключение вроде:

jxl.read.biff.BiffException: Unable to recognize OLE stream
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
    at jxl.read.biff.File.<init>(File.java:127)
    at jxl.Workbook.getWorkbook(Workbook.java:268)
    at core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
    at core.ReadXLSheet.init(ReadXLSheet.java:22)
    at core.ReadXLSheet.main(ReadXLSheet.java:72)

Оба для расширений .xls и .xlsx. Я использую версию Java: JDK1.6

Ответ 1

Я использовал JXL (теперь "JExcel" ) и Apache POI. Сначала я использовал JXL, но теперь я использую POI Apache.

Во-первых, вот что означает, что оба API имеют одинаковую функциональность:

  • Оба являются бесплатными
  • Укладка элементов: выравнивание, фоны (цвета и рисунки), границы (типы и цвета), поддержка шрифтов (имена шрифтов, цвета, размер, жирный шрифт, курсив, вычеркнуть, подчеркнуть)
  • Формулы
  • Гиперссылки
  • Области с объединенными ячейками
  • Размер строк и столбцов
  • Форматирование данных: числа и даты
  • Обтекание текстом в ячейках
  • Стоп-кадры
  • Поддержка верхнего колонтитула
  • Чтение/запись существующих и новых таблиц
  • Обе попытки сохранить существующие объекты в электронных таблицах, которые они читают, остаются в целости, насколько это возможно.

Однако есть много отличий:

  • Возможно, самое существенное отличие заключается в том, что Java JXL не поддерживает формат Excel. "xlsx" Excel 2007+; он поддерживает только старый BIFF (двоичный) формат .xls. Apache POI поддерживает как общую схему.
  • Кроме того, часть Java JXL API была в последний раз обновлена ​​в 2009 году (3 года, 4 месяца назад, когда я пишу это), хотя похоже, что существует С# API. Apache POI активно поддерживается.
  • JXL не поддерживает Условное форматирование, Apache POI делает, хотя это не так уж важно, потому что вы можете условно форматировать ячейки со своим собственным кодом.
  • JXL не поддерживает форматирование форматирования текста, т.е. другое форматирование в текстовой строке; Apache POI поддерживает его.
  • JXL поддерживает только определенные поворота текста: горизонтальный/вертикальный, +/- 45 градусов и сложный; Apache POI поддерживает любое целое число градусов плюс сложены.
  • JXL не поддерживает рисование фигур; Apache POI делает.
  • JXL поддерживает большинство параметров настройки страницы, таких как "Пейзаж/Портрет", "Поля", "Размер бумаги" и "Масштаб". Apache POI поддерживает все это, а также повторяющиеся строки и столбцы.
  • JXL не поддерживает Split Panes; Apache POI делает.
  • JXL не поддерживает создание или манипулирование диаграммой; что поддержки еще нет в Apache POI, но API начинает постепенно формироваться.
  • У Apache POI есть более обширный набор документации и примеров, доступных, чем JXL.

Кроме того, POI содержит не только основной API-интерфейс "usermodel", но и API на основе событий, если все, что вы хотите сделать, - это прочитать содержимое электронной таблицы.

В заключение, из-за лучшей документации, дополнительных функций, активной разработки и поддержки формата Excel 2007+ я использую Apache POI.

Ответ 2

Я использовал POI.

Если вы используете это, держите в поле зрения эти сотовые формы: создайте его и используйте его несколько раз вместо того, чтобы создавать каждый раз для ячейки, это огромная разница в потреблении памяти или большие данные.

Ответ 3

Я не знаком с JXL, но мы используем POI. POI поддерживается в хорошем состоянии и может обрабатывать как двоичный формат .xls, так и новый формат на основе XML, который был введен в Office 2007.

Файлы CSV не являются файлами excel, они являются текстовыми файлами, поэтому эти библиотеки не читают их. Вам нужно будет самостоятельно проанализировать файл CSV. Я не знаю каких-либо CSV файлов, но я тоже не смотрел.

Ответ 4

Для чтения "простых" CSV файлов в Java существует библиотека под названием OpenCSV, доступная здесь: http://opencsv.sourceforge.net/