Overview Обзор

There are two good choices for reading & writing Microsoft Excel Spreadsheet files from Java, in a platform independent way, - jexcelapi and Jakarta POI (HSSF) . Есть два хороших вариантов для чтения и написания электронных таблиц Microsoft Excel файлов с Явы, в платформу независимым способом, - jexcelapi и Джакарте POI (HSSF). Both of them provide nice interface to access Excel data structure and even generate new spreadsheet. Оба они обеспечивают Удобный интерфейс для доступа к Excel структуры данных и даже создавать новые таблицы. I have done extensive tests with both of them for a high-profile project for a Fortune 500 company. Я сделал обширные тесты с обеими из них на высоком уровне проекта для компании Fortune 500. Previously also I had successfully used HSSF for another high profile client. Раньше я также успешно использоваться для другого HSSF высокий профиль клиента. In the paragraphs below I present my conclusions and sample code for reading Excel spreadsheet from Java using both the libraries. В пунктах ниже я представляю мои выводы и образец кода для чтения электронных таблиц Excel из Java с использованием библиотеки.

Comparison of JExcelAPI with Jakarta-POI (HSSF) Сравнение с JExcelAPI Джакарта-POI (HSSF)

1. JExcelAPI is clearly not suitable for important data. явно не подходит для важных данных. It fails to read several files. Она не может идти несколько файлов. Even when it reads it fails on cells for unknown reasons. Даже тогда, когда она в нем не говорится о клетках по неизвестным причинам. In short JExcelAPI isn’t suitable for enterprise use. Короче JExcelAPI не подходит для корпоративного использования.

2. HSSF is the POI Project’s pure Java implementation of the Excel ‘97(-2002) file format. является ТОИ проекта чистого Java осуществления Excel 97 (-2002) формат файла. It is a mature product and was able to correctly and effortlessly read excel data generated from various sources, including non-MS Excel products like Open Office, and for various versions of Excel. Она является зрелым продуктом и смог правильно и без усилий прочитать excel данных, полученных из различных источников, в том числе не являющихся MS Excel продуктов, как Open Office, а также для различных версий Excel. It is very robust and well featured. Очень надежные и хорошо признакам. Highly recommended. Высоко рекомендуется.

3. Performance was never a consideration in our tests because a) data integrity is the single most important factor and b) there didn’t appear to be any significant performance difference while running the tests; both of them were very fast. Производительность никогда не было рассмотрения в наших испытаниях, поскольку) целостности данных является одним из наиболее важных факторов и б) не существует, как представляется, каких-либо существенных различий производительности во время выполнения тестов; оба они были очень быстро. We didn’t bother to time it for the above reasons. Мы не смущает ко времени его выше причинам.

How to read Excel Excel Spreadsheet from Java using Jakarta POI (HSSF) Как читать Excel таблицу Excel с помощью Java Джакарте POI (HSSF)

 try {     POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream( file ));     HSSFWorkbook wb = new HSSFWorkbook(fs);     HSSFSheet sheet = wb.getSheetAt(0);     HSSFRow row;     HSSFCell cell;      int rows; // No of rows     rows = sheet.getPhysicalNumberOfRows();      int cols = 0; // No of columns     int tmp = 0;      // This trick ensures that we get the data properly even if it doesn’t start from first few rows     for(int i = 0; i < 10 || i < rows; i++) {         row = sheet.getRow(i);         if(row != null) {             tmp = sheet.getRow(i).getPhysicalNumberOfCells();             if(tmp > cols) cols = tmp;         }     }      for(int r = 0; r < rows; r++) {         row = sheet.getRow(r);         if(row != null) {             for(int c = 0; c < cols; c++) {                 cell = row.getCell((short)c);                 if(cell != null) {                     // Your code here                 }             }         }     } } catch(Exception ioe) {     ioe.printStackTrace(); } попробуйте (POIFSFileSystem фс = новый POIFSFileSystem (новый FileInputStream (файл)); HSSFWorkbook ВБ = новый HSSFWorkbook (ПС); HSSFSheet листа = wb.getSheetAt (0); HSSFRow подряд; HSSFCell камере; int строк / / Нет строк строк = sheet.getPhysicalNumberOfRows (); int cols = 0; / / нет колонок int tmp = 0; / / Этот трюк гарантирует, что мы получаем данные должным образом, даже если оно не начинается с первой строки на несколько (я int = 0; я <10 | | я <рядами; я + +) (подряд = sheet.getRow (я), если (строка! недействительными =) (tmp = sheet.getRow (я). getPhysicalNumberOfCells (); если (tmp> cols) cols = tmp;)) за (int р = 0; р <рядами л + +) (подряд = sheet.getRow (р); если (строка! недействительными =) (для (int с = 0; с <cols; с + +) (клеток Row.getCell = ((короткая) с), если (ячейка! Недействительными =) (/ / Ваш код здесь))))) улова (Исключение МОП) (ioe.printStackTrace ();) 

This sample should get you started. Этот пример должен быстро начать работу. Don’t forget to import appropriately. Не забудьте соответствующим образом импортом.

Gotchas while using Jakarta POI (HSSF) Gotchas при использовании Джакарте POI (HSSF)

  • getPhysicalNumberOfRows() returns the physical number of rows which may be more than the actual (logical) number of rows. getPhysicalNumberOfRows () возвращает физическое количество строк, которое может быть больше, чем фактическая (логический) количество строк. The same goes for getPhysicalNumberOfCells(). То же самое можно сказать о getPhysicalNumberOfCells ().
  • You should check for nulls when fetching the HSSFRow and HSSFCell objects as shown. Вы должны проверить, nulls при получении HSSFRow и HSSFCell объекты, как показано на рисунке.
  • Remember that Excel tables are often sparsely populated. Помните, что таблицы Excel, часто с низкой плотностью населения. So choose your data structures accordingly. Так что выбирать структуры данных, соответственно.
  • POI accesses the data by sheet. ТОИ доступ к данным листа. In JExcelAPI you can directly access the data in any row and column. В JExcelAPI вы можете прямого доступа к данным в любой строки и столбца.

How to access Excel Spreadsheet using JExcelAPI Как получить доступ к таблице Excel с помощью JExcelAPI

 File fp = new File(file); try {     Workbook wb = Workbook.getWorkbook(fp);     Sheet sheet = wb.getSheet(0);     int columns = sheet.getColumns();     int rows = sheet.getRows();      String data;     for(int col = 0;col < columns;col++) {         for(int row = 0;row < rows;row++) {             data = sheet.getCell(col, row).getContents();             // Your code here         }     } } catch(Exception ioe) {     System.out.println("Error: " + ioe); } Файл fp = новый файл (файл); попробуйте Рабочая тетрадь (ВБ = Workbook.getWorkbook (ПС); листового листа = wb.getSheet (0); int колонки sheet.getColumns = (); int строк sheet.getRows = (); String Данные, ибо (полковник int = 0; полковник <колонны; колонки + +) (для (int подряд = 0; строки <рядами; подряд + +) (= sheet.getCell данных (столбец, строка). getContents () / / Ваш код здесь ))) Улова (Исключение МОП) (System.out.println ( "Ошибка:" + МОР);) 

Gotchas while using JExcelAPI Gotchas при использовании JExcelAPI

  • JExcelAPI may often fail to fetch the data from certain cells or even the whole sheet. JExcelAPI может зачастую не могут получить данные из определенных клеток или даже весь лист. Unfortunately it gives a warning instead of an error to indicate the problem. К сожалению, он дает предупреждение вместо того чтобы сообщить об ошибке проблемы.
  • JExcelAPI doesn’t expose the full meta-data of the spreadsheet like POI does. JExcelAPI не подвергайте полную мета-данные из таблицы, как ТОИ делает.
  • JExcelAPI doesn’t properly recognize the data type in cells. JExcelAPI образом не признать, тип данных в ячейках. In all cases it indicated String data in our tests even when there were numeric or date fields. Во всех случаях она указала, String данных в наших испытаниях, даже когда имеются цифровые или дата областях.

Concluding thoughts on accessing Excel spreadsheets from Java Заключительные соображения относительно доступа к таблицам Excel с Явы

Both JExcelAPI and Jakarta POI (HSSF) are open source software to read & write data from / to Excel spreadsheet even on non-Microsoft platforms. Оба JExcelAPI и Джакарте POI (HSSF) являются открытыми исходными кодами читать и писать данные из / в Excel таблицу даже на не-Microsoft платформ. In my tests HSSF came out to be the clear leader and recommended solution because of robustness and features. В моем тесты HSSF пришли, чтобы быть ясно, лидер и рекомендовал решения, поскольку от надежности и возможностей.