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
XSSFXML Spreadsheet Format Компонент чтения и записи файлов MS-Excel, формат XLSX
HPSFHorrible Property Set Format Компонент получения наборов свойств файлов MS-Office
HWPFHorrible Word Processor FormatКомпонент чтения и записи файлов MS-Word, формат DOC
XWPFXML Word Processor Format Компонент чтения и записи файлов MS-Word, формат DOCX
HSLFHorrible Slide Layout Format Компонент чтения и записи файлов PowerPoint, формат PPT
XSLFXML Slide Layout Format Компонент чтения и записи файлов PowerPoint, формат PPTX
HDGFHorrible DiaGram Format Компонент работы с файлами MS-Visio, формат VSD
XDGFXML DiaGram Format Компонент работы с файлами MS-Visio, формат VSDX

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

Наименование (артифакт)Необходимые компоненты
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, то необходимо установить одну из следующих зависимостей (версия может быть более новой) :

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version>
</dependency>

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

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

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

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

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

  • HSSFWorkbook
    • org.apache.poi.hssf.usermodel
    • класс чтения и записи файлов Microsoft Excel в формате .xls, совместим с версиями MS-Office 97-2003;
  • XSSFWorkbook
    • 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

  • org.apache.poi.hssf.usermodel.HSSFSheet
  • org.apache.poi.xssf.usermodel.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

  • org.apache.poi.hssf.usermodel.HSSFRow
  • org.apache.poi.xssf.usermodel.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 включают свойства и методы работы с ячейками таблицы.

  • org.apache.poi.hssf.usermodel.HSSFCell
  • org.apache.poi.xssf.usermodel.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)
{
    BorderStyle thin  = BorderStyle.THIN;
    short       black = IndexedColors.BLACK.getIndex();

    XSSFCellStyle style = book.createCellStyle();

    style.setWrapText(true);
    style.setAlignment        (HorizontalAlignment.CENTER);
    style.setVerticalAlignment(VerticalAlignment  .CENTER);

    style.setBorderTop        (thin);
    style.setBorderBottom     (thin);
    style.setBorderRight      (thin);
    style.setBorderLeft       (thin);

    style.setTopBorderColor   (black);
    style.setRightBorderColor (black);
    style.setBottomBorderColor(black);
    style.setLeftBorderColor  (black);

    return style;
}

Метод 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 и определение стилей ячеек рассмотрены здесь.

  Рейтинг@Mail.ru