[xls] Парсер документа MS Excel на языке java

vovaV09

Возникла необходимость извлечения данных из excel-евских документов с помощью Java. Сталкивался ли кто-нибудь с готовыми парсерами?

Garryss

Ну это смотря для чего тебе нужно.
Самый простейший парсер (и единственный мною виденный - наверное, есть что-то гораздо более мощное) есть в OpenSource'овском поисковом движке Nutch. Тестировать не пробовал. По объему - 200 строк кода. Используются ли внешние библиотеки, не знаю. Опять же, судя по коду, умеет вытаскивать из простейших таблиц строки и числа.

kruzer25

Посмотри в МСДН, наверняка МС распространяет какие-то готовые библиотеки для работы с этим форматом.
А сам формат .xls - закрыт, никакого публичного стандарта на него нет, так что любой сторонний парсер точно будет неполноценным.
Или тебе подойдёт и возможность работы только с .xlsx? Да, и на Excel 2003 XML я какое-то описание видел в мсдн...

GayRabbit

поезг в гугл по словам apache jakarta, вроде так
короче у меня библиотека называется poi-2.5.1-final-20040804.jar

Werdna

Возникла необходимость извлечения данных из excel-евских документов с помощью Java. Сталкивался ли кто-нибудь с готовыми парсерами?
Виндузятники постепенно сталкиваются с проблемами проприетарных форматов. :)
По идее это не разрешено делать по лиценнзии от МС. :smirk:

Svyatogor

OpenOffice.org вполне нормально позволяет вытаскивать данные (а еще редактировать и т.п.). Правда он использует native-библиотеки. Выше еще правильно советовали apache poi, он, скорее всего, легче, чем OO.

kruzer25

Виндузятники постепенно сталкиваются с проблемами проприетарных форматов.
.xlsx - афаик, открытый. Кроме того, начиная с Office 2003, можно работать с файлами с расширением .xml, они, правда, дают не всю функциональность .xls, но тем не менее.
По идее это не разрешено делать по лиценнзии от МС.
Что не разрешено делать, извлекать данные из экселевских документов из программы на Java?

Werdna

.xlsx - афаик, открытый.
Как вы заебали этим говноформатом на 6000 страниц. :(

kruzer25

Много возможностей - много страниц, а ты чего хотел?
В RFC, вон, одно только описание HTTP-протокола, насколько я помню, занимает пару сотен страниц.

Werdna

Много возможностей - много страниц, а ты чего хотел?
Пословицу знаешь? Про краткость, та которая сестра таланта...

kruzer25

Краткость - сестра малому количеству возможностей.

ifani

Глянь Jexcelapi - пока что его всегда хватало (pure java библиотека).
Ещё есть Jxls, но им ни разу не пользовался.

Svyatogor

Это каких возможностей? Вроде описания новых форматов представления, например, рисунков или векторной графики вместо использования уже существующих? Предоставление флагов вроде worksLikeVeryOldWord с требованием работать именно как этот самый word и без описания самих алгоритмов? И т.п. http://www.grokdoc.net/index.php/EOOXML_objections ? Естественно, очень много получится.

kruzer25

Для тех, кто без мозга.
RFC на протокол HTTP занимает 200 страниц. PDF Reference на старую версию то ли 1.3, то ли 1.4 (не помню, с какой именно работал) - около 1000 страниц.
Как ты считаешь, неужели у Excel 2007 меньше нужных фич, чем у примитивного протокола HTTP или у не совсем примитивного, но тоже почти ничего не умеющего PDF 1.3/1.4? Мне кажется, что объём в 6*описание PDF - вполне оправдан.
А если ты считаешь, что Excel - это всего лишь двумерная таблица, в каждой из ячеек которой лежит строка - так считают далеко не все, и вместо Excel ты бы тогда мог использовать какой-нибудь другой формат.

katrin2201

Для упертых пенартуров: хватит приводить доводы в пользу "такого не может быть". Ибо оно так есть, и остается только с этим смириться.
Как минимум одбц-ждбц мост позволяет легко прочесть всю текстовую/числовую инфу.
Если ты потрудишься зайти хотя бы по одной из приведенных ссылок на либы, и почитать список их фич, то ты будешь неприятно удивлен, ибо либы умеют доволно много.
В совсем тяжелых случаях всегда остается вариант с написанием com+ длл-ки, и оборачиванием ее в jni.
Кстати, по поводу сложности формата. ОпенОфис читает xls.
Так что если ты хочешь дальше аргументированно продолжать спор, а не продолжать доказывать свои умозрительные заключения своими-же домыслами, то я предлагаю тебе тупо создать xls файл со всеми наворотами, которые только придут тебе в твою светлую голову, открыть файл в опенофисе, и посчитать процент фич, которые он корректно поймет. Мое имхо, что процент будет довольно большой.
Если тебе лень это делать, то ты можешь придумать другой способ посчитать, или вообще забить, и больше не писать в этом топике.

vovaV09

Спасибо, эти библиотечки уже попадали в моё поле зрения. Подскажи, п-та, правильно ли я понимаю, что установленной версии Office не нужно для работы этого API?

pitrik2

правильно понимаешь
+1 за jexcelapi
использовал его для сохранения отчетов в экселе
человек вбивал данные для отчета на сайте, жал кнопку generate
и ему выплевывался .xsl файлик
сервак был линукс, офиса там никакого не было :)

kruzer25

Как минимум одбц-ждбц мост позволяет легко прочесть всю текстовую/числовую инфу.
Поподробнее, плз.
В совсем тяжелых случаях всегда остается вариант с написанием com+ длл-ки, и оборачиванием ее в jni.
Если бы ты повнимательнее прочитал этот тред, ты бы увидел, что я советовал человеку посмотреть способ решения его проблемы на msdn. Думаю, без msdn у него будет много проблем "с написанием com+ длл-ки".
ОпенОфис читает xls.
Блокнот тоже читает.
Мое имхо, что процент будет довольно большой
На самом деле, процент не такой уж и большой. Впрочем, важно не это, а то, что это не 100%.
Кстати, что неприятно поразило в OOo - что он не смог полностью корректно отобразить даже XML Spreadsheet, который является ну уж совсем примитивным типом документа и формат которого замечательно задокументирован на том же MSDN. Из-за этого, пришлось вместо того, чтобы, как белым людям, хранить в ячейках даты - делать ячейки типом "строка" и хранить там уже отформатированные даты.

kruzer25

Кстати, шесть тысяч страниц - это не только на Excel, а вообще на весь офис - Word, Access итд.
Оставить комментарий
Имя или ник:
Комментарий: