Apache Poi-это бесплатный кроссплатформенный API Java API, написанный на Java, написанный на Java. Apache Poi предоставляет функцию программ Java для чтения и написания архивов формата Microsoft Office.
Страница загрузки проекта: http://poi.apache.org/download.html
Apache Poi - это Java API, который создает и поддерживает различные API -интерфейсы Java, которые соответствуют стандарту Office Open Open XML (OOXML) и формату составного документа Microsoft OLE 2 (OLE2). Его можно использовать для чтения, создания и изменения файлов MS Excel с помощью Java. Более того, вы также можете использовать Java для чтения и создания файлов MS Word и MsPowerPoint. Apache Poi предоставляет Java Operation Excel Solution.
Пример чтения документа Excel
Мы используем HSSFWorkBook в POI для чтения данных Excel.
public void -тест (файл файл) Throws ioException {inputStream inp = new FileInputStream (file); HSSFWorkBook Workbook = New HSSFWorkBook (INP); // Рабочая тетрадь ... Операция обхода} Приведенный выше код показывает, что в порядке читать файл Excel2003 (XLS), но как только прочитал файл Excel2007 (XLSX), сообщается о исключении: «Предоставленные данные, по -видимому, в офисе 2007+ XML. Вы называете часть POI, которые занимаются офисными документами OLE2. Вы должны вызовы в POI, чтобы они были (EG -xs, а не в PORCANS, EGSF, а также (EG -xs, используется в EGSFS, EGSFS.
После просмотра информации, версия файлов Excel 2007 должна быть прочитана с помощью XSSFWorkBook, следующим образом:
public void -тест (файл файл) Throws ioException {inputStream inp = new FileInputStream (file); Xssfworkbook Workbook = new XSSFWorkBook (INP); // Рабочая тетрадь ... Операция обхода} Примечание: XSSFWorkBook требует дополнительного импорта POI-OOXML-3.9-FORCES.JAR и POI-OOXML-SCHEMAS-3.9.JAR.
Таким образом, нет проблем в импорте Excel2007, но сообщается, что исключение импортирует Excel2003.
Поэтому при импорте Excel попробуйте судить версию Excel и позвонить в различные методы.
Я подумал об использовании имени суффикса файла, чтобы определить тип, но если кто -то меняет суффикс XLSX на XLS, если он использует функцию XLSX для чтения, результат является ошибкой; Хотя имя суффикса правильное, кодирование содержимого файла и т. Д. НЕ НЕПРАВИЛЬНО.
Наконец, рекомендуется использовать WorkbookFactory.Create (InputStream) в POI-OOXML для создания рабочей книги, потому что как HSSFWorkBook, так и XSSFWorkBook реализуют интерфейс рабочей книги. Код заключается в следующем:
Рабочая тетрадь WB = WorkbookFactory.Create (IS);
Как вы можете себе представить, в функции WorkbookFactory.Create () должно быть суждение о типе файла. Давайте посмотрим, как судьи исходного кода:
/ ** * Создает соответствующий hssfworkbook / xssfworkbook из * данного InputStream. * Ваш входной поток должен либо поддерживать марку/сброс, либо * быть обернутым как {@link defbackinptstream}! */ public static Workbook Create (InputStream Inp) бросает ioException, InvalidFormateXception {// Если ясно не выполняет маркировку/ сброс, оберните if (! inp.marksupported ()) {inp = new PropbackInptream (inp, 8); } if (poifsfilesystem.haspoifsheader (inp)) {return new hssfworkbook (inp); } if (poixmldocument.hasooxmlheader (inp)) {return new xssfworkbook (opcpackage.open (inp)); } бросить новое allosalargumentException («Ваш входной сегмент не был ни потоком OLE2, ни потоком OOXML»); }Вы можете видеть, что соответствующие объекты рабочей книги создаются отдельно в соответствии с типом файла. Он оценивается в зависимости от информации о заголовке файла. В настоящее время, даже если имя суффикса изменено, оно все равно не может быть передано.