Классы java в excel

Apache POI, взаимодействие с Excel

Apache POI представляет собой API, который позволяет использовать файлы MS Office в Java приложениях. Данная библиотека разрабатывается и распространяется Apache Software Foundation и носит открытый характер. Apache POI включает классы и методы для чтения и записи информации в документы MS Office.

Компоненты Apache POI

Описание компонентов

HSSF Horrible Spreadsheet Format Компонент чтения и записи файлов MS-Excel, формат XLS
XSSF XML Spreadsheet Format Компонент чтения и записи файлов MS-Excel, формат XLSX
HPSF Horrible Property Set Format Компонент получения наборов свойств файлов MS-Office
HWPF Horrible Word Processor Format Компонент чтения и записи файлов MS-Word, формат DOC
XWPF XML Word Processor Format Компонент чтения и записи файлов MS-Word, формат DOCX
HSLF Horrible Slide Layout Format Компонент чтения и записи файлов PowerPoint, формат PPT
XSLF XML Slide Layout Format Компонент чтения и записи файлов PowerPoint, формат PPTX
HDGF Horrible DiaGram Format Компонент работы с файлами MS-Visio, формат VSD
XDGF XML DiaGram Format Компонент работы с файлами MS-Visio, формат VSDX

Список компонентов

Наименование (артeфакт) Необходимые компоненты
poi commons-logging, commons-codec, commons-collections, log4j
poi-scratchpad poi
poi-ooxml poi, poi-ooxml-schemas
poi-ooxml-schemas xmlbeans
poi-examples poi, poi-scratchpad, poi-ooxml
ooxml-schemas xmlbeans
ooxml-security xmlbeans

Подключение Apache POI к проекту

Для подключения Apache POI к проекту необходимо скачать соответствующие библиотеки с официального сайта https://poi.apache.org/download.html.

Если в проекте используется фреймворк maven, то необходимо установить одну из следующих зависимостей (версия может быть более новой) :

  org.apache.poi poi 3.16   org.apache.poi poi-ooxml 3.16  

На странице описания примера чтения файлов Excel приведен проект, включающий необходимый набор файлов библиотеки Apache POI (poi-3.16.jar, poi-ooxml-3.16.jar, poi-ooxml-schemas-3.16.jar) и сопутствующих библиотек.

На странице рассматриваются следующие классы, используемые для работы с файлами Excel из приложений Java.

  • рабочая книга — HSSFWorkbook, XSSFWorkbook
  • лист книги — HSSFSheet, XSSFSheet
  • строка — HSSFRow, XSSFRow
  • ячейка — HSSFCell, XSSFCell
  • стиль — стили ячеек HSSFCellStyle, XSSFCellStyle
  • шрифт — шрифт ячеек HSSFFont, XSSFFont
Читайте также:  String and array functions in php

Поскольку описание всех классов и методов не разместить на одной странице, то ниже по тексту приводятся ссылки для перехода к исходной документации.

Классы и методы Apache POI для работы с файлами Excel

Рабочая книга HSSFWorkbook, XSSFWorkbook

  • HSSFWorkbook
    • org.apache.poi.hssf.usermodel
    • класс чтения и записи файлов Microsoft Excel в формате .xls, совместим с версиями MS-Office 97-2003;
    • org.apache.poi.xssf.usermodel
    • класс чтения и записи файлов Microsoft Excel в формате .xlsx, совместим с MS-Office 2007 или более поздней версии.

    Конструкторы класса HSSFWorkbook

    HSSFWorkbook (); HSSFWorkbook (InternalWorkbook book); HSSFWorkbook (POIFSFileSystem fs); HSSFWorkbook (NPOIFSFileSystem fs); HSSFWorkbook (POIFSFileSystem fs, boolean preserveNodes); HSSFWorkbook (DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes); HSSFWorkbook (DirectoryNode directory, boolean preserveNodes); HSSFWorkbook (InputStream s); HSSFWorkbook (InputStream s, boolean preserveNodes);

    preservenodes является необязательным параметром, который определяет необходимость сохранения узлов типа макросы.

    Конструкторы класса XSSFWorkbook

    XSSFWorkbook (); // workbookType создать .xlsx или .xlsm XSSFWorkbook (XSSFWorkbookType workbookType); XSSFWorkbook (OPCPackage pkg ); XSSFWorkbook (InputStream is ); XSSFWorkbook (File file); XSSFWorkbook (String path);

    Основные методы HSSFWorkbook, XSSFWorkbook

    Метод Описание
    createSheet () Создание страницы книги HSSFSheet, XSSFSheet
    createSheet (String name) Создание страницы с определенным наименованием
    CreateFont () Создание шрифта
    createCellStyle () Создание стиля

    С полным перечнем всех методов класса XSSFWorkbook можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html.

    Классы листов книги, HSSFSheet, XSSFSheet

    Классы HSSFSheet, XSSFSheet включают свойства и методы создания строк, определения размера колонок, слияния ячеек в одну область и т.д.

    Основные методы классов работы с листами

    Метод Описание
    addMergedRegion (CellRangeAddress) Определение области слияния ячеек страницы
    autoSizeColumn (int column) Автоматическая настройка ширины колонки column (отсчет от 0)
    setColumnWidth (int column, int width) Настройка ширины колонки column (отсчет от 0)
    createRow (int row) Создание строки row (отсчет от 0)
    getRow (int row) Получение ссылки на строку row (отсчет от 0)

    С полным перечнем всех методов класса XSSFSheet можно познакомиться на странице https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html

    Классы строк HSSFRow, XSSFRow

    Классы HSSFRow, XSSFRow включают свойства и методы работы со строками, создания ячеек в строке и т.д.

    Основные методы классов HSSFRow, XSSFRow

    Метод Описание
    setHeight (short) Определение высоты строки
    getHeight() Получение значения высоты в twips’ах (1/20)
    getHeightInPoints() Получение значение высоты
    createCell (int) Создание ячейки в строке (отсчет от 0)
    getCell(int) Получение ссылки на ячейку
    getFirstCellNum() Получение номера первой ячейки в строке
    setRowStyle(CellStyle) Определение стиля всей строки

    С полным перечнем всех методов класса XSSFRow можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

    Классы ячеек HSSFCell, XSSFCell

    Ячейки электронной таблицы используются для размещения информации. В ячейке может быть представлено числовое значение, текст или формула. Также ячейка может содержать комментарий.

    Классы HSSFCell, XSSFCell включают свойства и методы работы с ячейками таблицы.

    Основные методы классов HSSFCell, XSSFCell

    Метод Описание
    getBooleanCellValue() Чтение логического значения ячейки
    getDateCellValue() Чтение значения ячейки типа java.util.Date
    getNumericCellValue() Чтение числового значения ячейки типа double
    getStringCellValue() Чтение текстового значения ячейки (java.lang.String)
    setCellValue(boolean) Определение логического значения ячейки
    setCellValue(java.util.Calendar) Определение значения ячейки типа даты
    setCellValue(java.util.Date) Определение значения ячейки типа даты
    getCellTypeEnum() Чтение типа значения ячейки CellType
    setCellComment(Comment) Запись комментария в ячейку
    getCellComment() Чтение комментария ячейки
    removeCellComment() Удаление комментария ячейки
    setHyperlink(Hyperlink) Запись гиперссылки в ячейку
    getHyperlink() Чтение гиперссылки XSSFHyperlink в ячейке
    removeHyperlink() Удаления гиперссылки ячейки
    getCellFormula() Чтение формулы, например SUM(C4:E4)
    setCellFormula(String) Определение формулы, например =SUM(C4:E4)
    getCellStyle() Чтение стиля ячейки (XSSFCellStyle)
    setCellStyle(CellStyle) Определение стиля ячейки
    getColumnIndex() Определение индекса ячейки
    setAsActiveCell() Определение активности ячейки

    С полным перечнем всех методов класса XSSFCell можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCell.html

    Классы стилей ячеек HSSFCellStyle, XSSFCellStyle

    С полным перечнем всех свойств и методов класса XSSFCellStyle можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html

    Ниже в качестве примера представлен метод, формирующий стиль ячейки, в которой :

    • текст центрируется по вертикали и горизонтали;
    • обрамление ячейки представляет тонкую черную линию по периметру;
    • текст переносится на следующую строку (не ячейку), если не вмещается в размер ячейки.

    private XSSFCellStyle createCellStyle(XSSFWorkbook book)

    Метод setWrapText позволяет определить флаг переноса текста в ячейке согласно ее размеру (ширине). Чтобы перенести текст принудительно, можно в текстовой строке установить символы CRCL, например «Разделитель\r\nтекста».

    Классы шрифтов HSSFFont, XSSFFont

    С полным перечнем всех свойств и методов класса XSSFFont можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Font.html

    Ниже в качестве примера представлен метод, формирующий шрифт типа «Times New Roman» :

    private XSSFFont createCellFont(XSSFWorkbook book) < XSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 12); font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); font.setFontName("Times New Roman"); return(font); >. . . HSSFCellStyle style = book.createCellStyle(); style.setFont(createCellFont(book));

    Примеры создания файлов Excel и определение стилей ячеек рассмотрены здесь.

    Источник

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

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

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

    3. связка Java и библиотека Apache POI—на этом способе я и хочу остановиться подробнее
    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 sheet= wb.getSheet(«Лист 3»)
    • По номеру (нумерация начинается с 0)
      HSSFSheet sheet= wb.getSheet(0)
    • Создание нового листа
      HSSFSheet sheet= wb.createSheet([«имя листа»])
    • По индексу (индексация начинается с 0)
      HSSFRow row = sheet.getRow(index)
    • Через итератор

    Iterator rowIter = sheet.rowIterator(); while (rowIter.hasNext())

    • По индексу ячейки (индексация начинается с 0)
      HSSFCell cell = row.getCell(0);
    • Через итератор

    Iterator cellIter = row.cellIterator(); while (cellIter.hasNext())

    • Логическое значение
      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.

    Источник

Оцените статью