Как стать автором
Обновить

Работа с таблицей Excel из Java

Время на прочтение 3 мин
Количество просмотров 53K

Работа с таблицей Excel из Java


Собственно возникла проблема — обработать данные из таблицы и на их основе получить другую таблицу.

Вариантов решения этой проблемы несколько:
  1. Макрос — единственной проблемой является VBA, на изучение которого времени нет совершенно, да и не нравится его синтаксис
  2. Приложение на C# тут вроде все хорошо, но к машине на которой будет выполняться данное приложение сразу предъявляется много дополнительных требований:
    • .NET Framework
    • Установленный офис
    • установленная основная сборка взаимодействия (PIA) для приложения Office

  3. связка Java и библиотека Apache POI—на этом способе я и хочу остановиться подробнее


Apache POI — это Java API для доступа к документам формата Microsoft.

Собственно для работы с таблицами Excel предназначен проект POI-HSSF. На данный момент есть 2 варианта библиотеки:
  1. POI 3.5 beta 5, and Office Open XML Support (2009-02-19)—идет работа над поддержкой формата Office 2007
  2. POI 3.2-FINAL Released (2008-10-19) — последний стабильный релиз


Я расскажу о работе с версией 3.2
Основным классом для работы с таблицей Excel является класс HSSFWorkbook пакета org.apache.poi.hssf.usermodel, представляющий книгу Excel.

Для чтения книги из файла можно применить следующий код:
public static HSSFWorkbook readWorkbook(String filename) {
       try {
               POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename));
               HSSFWorkbook wb = new HSSFWorkbook(fs);
               return wb;
       }
       catch (Exception e) {
               return null;
       }
}



Метод возвращает объект класса HSSFWorkbook если все удачно и null в другом случае.

Для сохранения изменений можно применить следующий метод:

public static void writeWorkbook(HSSFWorkbook wb, String fileName) {
       try {
               FileOutputStream fileOut = new FileOutputStream(fileName);
               wb.write(fileOut);
               fileOut.close();
       }
       catch (Exception e) {
               //Обработка ошибки
       }
}        



Метод записывает книгу wb в файл fileName

Для работы с листами рабочей книги предназначен класс HSSFSheet.
Объект класса HSSFSheet можно получить следующими способами:
  • По имени
    HSSFSheet sheet= wb.getSheet("Лист 3")
  • По номеру (нумерация начинается с 0)
    HSSFSheet sheet= wb.getSheet(0)
  • Создание нового листа
    HSSFSheet sheet= wb.createSheet(["имя листа"])


Следующим объектом является строка — HSSFRow.
Получить доступ к объекту строки можно также 3 способами:
  • По индексу (индексация начинается с 0)
    HSSFRow row = sheet.getRow(index)
  • Через итератор
    Iterator rowIter = sheet.rowIterator();
    while (rowIter.hasNext()) {
           HSSFRow row = (HSSFRow) rowIter.next();
    }


  • Создание новой строки
    HSSFRow row=sheet.createRow(0);


Ну и последним объектом на пути доступа к данным является объект класса HSSFCell — ячейка строки.
Получить доступ к ячейке можно из объекта строки следующими способами:
  • По индексу ячейки (индексация начинается с 0)
    HSSFCell cell = row.getCell(0);
  • Через итератор
    Iterator cellIter = row.cellIterator();
    while (cellIter.hasNext()) {
           HSSFCell cell = (HSSFCell) cellIter.next();
    }
    


  • Создание новой ячейки
    HSSFCell cell = row.createCell(0);


Из объекта ячейки можно уже получать и устанавливать непосредственно данные:
  • Логическое значение
    boolean b = cell.getBooleanCellValue();
    cell.setCellValue(b);

  • Дата
    Date date = cell.getDateCellValue();
    cell.setCellValue(date);

  • Числовое значение
    double d = cell.getNumericCellValue();
    cell.setCellValue(d);

  • Строковое значение
    String str = cell.getRichStringCellValue().getString();
    cell.setCellValue(new HSSFRichTextString(str));

  • Формула
    String formula = cell.getCellFormula();
    cell.setCellFormula(formula);



Этих знаний достаточно чтобы обрабатывать простые таблицы.
Библиотека также предоставляет богатые возможности по форматированию ячеек, по их слиянию, заморозке и т.д.
Подробное описание функций можно найти на их сайте.
Данный способ прежде всего ценен тем, что не требует установки самого офиса и пакета PIA.

Теги:
Хабы:
+4
Комментарии 11
Комментарии Комментарии 11

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн