Apache POI – Обзор
Часто для создания отчетов в формате файлов Microsoft Excel требуется программное приложение. Иногда даже ожидается, что приложение получит файлы Excel в качестве входных данных. Например, приложение, разработанное для финансового отдела компании, должно будет генерировать все свои результаты в Excel.
Любой программист на Java, желающий создавать файлы MS Office в качестве выходных данных, должен использовать для этого предопределенный API только для чтения.
Что такое Apache POI?
Apache POI – это популярный API, который позволяет программистам создавать, изменять и отображать файлы MS Office с помощью программ Java. Это библиотека с открытым исходным кодом, разработанная и распространяемая Apache Software Foundation для разработки или изменения файлов Microsoft Office с использованием программы Java. Он содержит классы и методы для декодирования вводимых пользователем данных или файла в документы MS Office.
Компоненты Apache POI
Apache POI содержит классы и методы для работы со всеми составными документами OLE2 MS Office. Список компонентов этого API приведен ниже.
-
POIFS (Файловая система реализации плохой обфускации ) – этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.
-
HSSF (ужасный формат электронной таблицы) – используется для чтения и записи в формате xls файлов MS-Excel.
-
XSSF (XML Spreadsheet Format) – используется для формата файлов xlsx MS-Excel.
-
HPSF (формат набора ужасных свойств) – используется для извлечения наборов свойств из файлов MS-Office.
-
HWPF (формат ужасного текстового процессора) – используется для чтения и записи файлов расширений doc MS-Word.
-
XWPF (XML-формат текстового процессора) – используется для чтения и записи файлов расширения docx в MS-Word.
-
HSLF (ужасный формат макета слайда) – используется для чтения, создания и редактирования презентаций PowerPoint.
-
HDGF (формат Horrible DiaGram) – содержит классы и методы для двоичных файлов MS-Visio .
-
HPBF (формат Horrible PuBlisher) – используется для чтения и записи файлов MS-Publisher .
POIFS (Файловая система реализации плохой обфускации ) – этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.
HSSF (ужасный формат электронной таблицы) – используется для чтения и записи в формате xls файлов MS-Excel.
XSSF (XML Spreadsheet Format) – используется для формата файлов xlsx MS-Excel.
HPSF (формат набора ужасных свойств) – используется для извлечения наборов свойств из файлов MS-Office.
HWPF (формат ужасного текстового процессора) – используется для чтения и записи файлов расширений doc MS-Word.
XWPF (XML-формат текстового процессора) – используется для чтения и записи файлов расширения docx в MS-Word.
HSLF (ужасный формат макета слайда) – используется для чтения, создания и редактирования презентаций PowerPoint.
HDGF (формат Horrible DiaGram) – содержит классы и методы для двоичных файлов MS-Visio .
HPBF (формат Horrible PuBlisher) – используется для чтения и записи файлов MS-Publisher .
Этот учебник проведет вас через процесс работы с файлами Excel с использованием Java. Поэтому обсуждение ограничивается компонентами HSSF и XSSF.
Примечание. Более старые версии POI поддерживают двоичные форматы файлов, такие как doc, xls, ppt и т. Д. Версия 3.5 и выше, POI поддерживает форматы файлов OOXML MS-Office, такие как docx, xlsx, pptx и т. Д.
Как и в Apache POI, существуют другие библиотеки, предоставляемые различными поставщиками для генерации файлов Excel. К ним относятся ячейки Aspose для Java от Aspose, JXL от Commons Libraries и JExcel от Team Dev.
Apache POI – API Java Excel
В этой главе рассказывается о некоторых разновидностях Java Excel API и их функциях. Есть много поставщиков, которые предоставляют API, связанные с Java Excel; некоторые из них рассматриваются в этой главе.
Aspose Cells для Java
Aspose Cells для Java – это лицензированный API Java Excel, разработанный и распространяемый поставщиком Aspose. Последняя версия этого API – 8.1.2, выпущенная в июле 2014 года. Это богатый и сложный API (комбинация простых классов Java и классов AWT) для разработки компонента Excel, который может читать, писать и манипулировать электронными таблицами.
Общие применения этого API следующие:
- Отчеты Excel, создавать динамические отчеты Excel
- Высококачественный рендеринг и печать Excel
- Импорт и экспорт данных из таблиц Excel
- Создавать, редактировать и конвертировать электронные таблицы
JXL
JXL – это сторонний фреймворк, разработанный для Selenium, который поддерживает автоматизацию на основе данных в веб-браузерах (автоматическое обновление данных в веб-браузерах). Однако он также используется в качестве общей библиотеки поддержки для API JExcel, поскольку он обладает базовыми функциями для создания, чтения и записи электронных таблиц.
Основные функции заключаются в следующем –
- Генерация файлов Excel
- Импорт данных из рабочих книг и электронных таблиц
- Получить общее количество строк и столбцов
Примечание. JXL поддерживает только формат файла .xls и не может обрабатывать большие объемы данных.
JExcel
JExcel – это чисто лицензированный API, предоставляемый Team Dev. Используя это, программисты могут легко читать, писать, отображать и изменять книги Excel в форматах .xls и .xlsx . Этот API может быть легко встроен в Java Swing и AWT. Последняя версия этого API – Jexcel-2.6.12, выпущенная в 2009 году.
Основные характеристики заключаются в следующем –
- Автоматизировать приложение Excel, рабочие тетради, электронные таблицы и т. Д.
- Встраивать книги в приложение Java Swing как обычный компонент Swing
- Добавьте слушателей событий в рабочие книги и таблицы
- Добавьте обработчики событий, чтобы обрабатывать поведение рабочей книги и электронных таблиц
- Добавить нативных пиров для разработки пользовательских функций
Apache POI
Apache POI – это библиотека с открытым исходным кодом, предоставленная Apache Software Foundation. Большинство разработчиков малых и средних приложений сильно зависят от Apache POI (HSSF + XSSF). Он поддерживает все основные функции библиотек Excel; однако рендеринг и извлечение текста являются его основными характеристиками.
Apache POI – Окружающая среда
В этой главе рассказывается о настройке Apache POI в системах на базе Windows и Linux. Apache POI можно легко установить и интегрировать в текущую среду Java, выполнив несколько простых шагов без каких-либо сложных процедур настройки. Администрация пользователя требуется при установке.
Системные Требования
JDK | Java SE 2 JDK 1.5 или выше |
---|---|
объем памяти | 1 ГБ ОЗУ (рекомендуется) |
Дисковое пространство | Нет минимальных требований |
Версия операционной системы | Windows XP или выше, Linux |
Давайте теперь перейдем к этапам установки Apache POI.
Шаг 1. Проверьте вашу установку Java
Прежде всего, вам необходимо установить Java Software Development Kit (SDK) в вашей системе. Чтобы убедиться в этом, выполните любую из двух команд в зависимости от платформы, на которой вы работаете.
Если установка Java была выполнена правильно, то на ней отобразится текущая версия и спецификация вашей установки Java. Пример вывода приведен в следующей таблице.
Платформа | команда | Пример вывода |
---|---|---|
Windows |
Откройте командную консоль и введите – \> Java-версия |
Java версия “1.7.0_60” Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим) |
Linux |
Откройте командный терминал и введите – $ java – версия |
Java-версия “1.7.0_25” Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64) Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим) |
Откройте командную консоль и введите –
\> Java-версия
Java версия “1.7.0_60”
Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)
64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)
Откройте командный терминал и введите –
$ java – версия
Java-версия “1.7.0_25”
Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)
Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)
-
Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.
-
Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.
Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.
Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.
Шаг 2. Установите среду Java
Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена Java на вашем компьютере. Например,
Sr.No. | Платформа и описание |
---|---|
1 |
Windows Установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60 |
2 |
Linux Экспорт JAVA_HOME = / usr / local / java-current |
Windows
Установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux
Экспорт JAVA_HOME = / usr / local / java-current
Добавьте полный путь расположения компилятора Java к системному пути.
Sr.No. | Платформа и описание |
---|---|
1 |
Windows Добавьте строку «C: \ Program Files \ Java \ jdk1.7.0_60 \ bin» в конец системной переменной PATH. |
2 |
Linux Экспорт PATH = $ PATH: $ JAVA_HOME / bin / |
Windows
Добавьте строку «C: \ Program Files \ Java \ jdk1.7.0_60 \ bin» в конец системной переменной PATH.
Linux
Экспорт PATH = $ PATH: $ JAVA_HOME / bin /
Выполните команду java -version из командной строки, как описано выше.
Шаг 3: Установите Apache POI Library
Загрузите последнюю версию Apache POI по адресу https://poi.apache.org/download.html и разархивируйте его содержимое в папку, из которой необходимые библиотеки могут быть связаны с вашей программой Java. Предположим, что файлы собраны в папке на диске C.
На следующих изображениях показаны каталоги и файловая структура внутри загруженной папки.
Добавьте полный путь к пяти банкам, как показано на изображении выше, к CLASSPATH.
Sr.No. | Платформа и описание |
---|---|
1 |
Windows Добавьте следующие строки в конец пользовательской переменной CLASSPATH – «C: \ пои-3,9 \ пои-3.9-20121203.jar;» «C: \ пои-3,9 \ пои-OOXML-3.9-20121203.jar;» «C: \ пои-3,9 \ пои-OOXML-схемы-3.9-20121203.jar;» «C: \ пои-3,9 \ OOXML Пб \ dom4j-1.6.1.jar;» «C:. \ Пои-3,9 \ OOXML Пб \ XMLBeans-2.3.0.jar;»; |
2 |
Linux Экспортировать CLASSPATH = $ CLASSPATH: /usr/share/poi-3.9/poi-3.9-20121203.tar: /usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar: /usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar: /usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar: /usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar |
Windows
Добавьте следующие строки в конец пользовательской переменной
CLASSPATH –
«C: \ пои-3,9 \ пои-3.9-20121203.jar;»
«C: \ пои-3,9 \ пои-OOXML-3.9-20121203.jar;»
«C: \ пои-3,9 \ пои-OOXML-схемы-3.9-20121203.jar;»
«C: \ пои-3,9 \ OOXML Пб \ dom4j-1.6.1.jar;»
«C:. \ Пои-3,9 \ OOXML Пб \ XMLBeans-2.3.0.jar;»;
Linux
Экспортировать CLASSPATH = $ CLASSPATH:
/usr/share/poi-3.9/poi-3.9-20121203.tar:
/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:
/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:
/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:
/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar
Apache POI – основные классы
В этой главе описываются несколько классов и методов в API-интерфейсе Apache POI, которые имеют решающее значение для работы с файлами Excel с помощью программ на Java.
рабочая тетрадь
Это супер-интерфейс всех классов, которые создают или поддерживают книги Excel. Он принадлежит пакету org.apache.poi.ss.usermodel . Два класса, которые реализуют этот интерфейс, следующие:
-
HSSFWorkbook – в этом классе есть методы для чтения и записи файлов Microsoft Excel в формате .xls. Он совместим с версиями MS-Office 97–2003.
-
XSSFWorkbook – в этом классе есть методы для чтения и записи XML-файлов Microsoft Excel и OpenOffice в формате .xls или .xlsx. Это совместимо с версиями MS-Office 2007 или позже.
HSSFWorkbook – в этом классе есть методы для чтения и записи файлов Microsoft Excel в формате .xls. Он совместим с версиями MS-Office 97–2003.
XSSFWorkbook – в этом классе есть методы для чтения и записи XML-файлов Microsoft Excel и OpenOffice в формате .xls или .xlsx. Это совместимо с версиями MS-Office 2007 или позже.
HSSFWorkbook
Это класс высокого уровня в пакете org.apache.poi.hssf.usermodel . Он реализует интерфейс Workbook и используется для файлов Excel в формате .xls. Ниже перечислены некоторые методы и конструкторы этого класса.
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
HSSFWorkbook () Создает новый объект HSSFWorkbook с нуля. |
2 |
HSSFWorkbook (каталог DirectoryNode, логические preserveNodes) Создает новый объект HSSFWworkbook внутри определенного каталога. |
3 |
HSSFWorkbook (каталог DirectoryNode, POIFSFileSystem fs, логические preserveNodes) Учитывая объект POIFSFileSystem и определенный каталог в нем, он создает объект SSFWorkbook для чтения указанной книги. |
4 |
HSSFWorkbook (java.io.InputStream s) Создает новый объект HSSFWorkbook, используя входной поток. |
5 |
HSSFWorkbook (java.io.InputStream s, логические preserveNodes) Создает файловую систему POI вокруг вашего входного потока. |
6 |
HSSFWorkbook (POIFSFileSystem fs) Создает новый объект HSSFWorkbook, используя объект POIFSFileSystem. |
7 |
HSSFWorkbook (POIFSFileSystem fs, логические preserveNodes) Учитывая объект POIFSFileSystem, он создает новый объект HSSFWorkbook для чтения указанной книги. |
HSSFWorkbook ()
Создает новый объект HSSFWorkbook с нуля.
HSSFWorkbook (каталог DirectoryNode, логические preserveNodes)
Создает новый объект HSSFWworkbook внутри определенного каталога.
HSSFWorkbook (каталог DirectoryNode, POIFSFileSystem fs, логические preserveNodes)
Учитывая объект POIFSFileSystem и определенный каталог в нем, он создает объект SSFWorkbook для чтения указанной книги.
HSSFWorkbook (java.io.InputStream s)
Создает новый объект HSSFWorkbook, используя входной поток.
HSSFWorkbook (java.io.InputStream s, логические preserveNodes)
Создает файловую систему POI вокруг вашего входного потока.
HSSFWorkbook (POIFSFileSystem fs)
Создает новый объект HSSFWorkbook, используя объект POIFSFileSystem.
HSSFWorkbook (POIFSFileSystem fs, логические preserveNodes)
Учитывая объект POIFSFileSystem, он создает новый объект HSSFWorkbook для чтения указанной книги.
Часто используемые параметры внутри этих конструкторов:
-
каталог – это каталог файловой системы POI для обработки.
-
fs – это файловая система POI, которая содержит поток рабочей книги.
-
preservenodes – это необязательный параметр, который решает, сохранять ли другие узлы, такие как макросы. Он потребляет много памяти, так как хранит всю систему POIFileSystem в памяти (если установлена).
каталог – это каталог файловой системы POI для обработки.
fs – это файловая система POI, которая содержит поток рабочей книги.
preservenodes – это необязательный параметр, который решает, сохранять ли другие узлы, такие как макросы. Он потребляет много памяти, так как хранит всю систему POIFileSystem в памяти (если установлена).
Примечание. Класс HSSFWorkbook содержит несколько методов; однако они совместимы только с форматом xls. В этом руководстве основное внимание уделяется последней версии форматов файлов Excel. Следовательно, методы класса HSSFWorkbook здесь не перечислены. Если вам нужны эти методы класса, обратитесь к API класса POI-HSSFWorkbook по адресу https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html.
XSSFWorkbook
Это класс, который используется для представления форматов файлов Excel как высокого, так и низкого уровня. Он принадлежит пакету org.apache.xssf.usemodel и реализует интерфейс Workbook . Ниже перечислены методы и конструкторы этого класса.
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
XSSFWorkbook () Создает новый объект XSSFworkbook с нуля. |
2 |
XSSFWorkbook (файл java.io.File) Создает объект XSSFWorkbook из заданного файла. |
3 |
XSSFWorkbook (java.io.InputStream is) Создает объект XSSFWorkbook, буферизуя весь входной поток в память и затем открывая для него объект OPCPackage. |
4 |
XSSFWorkbook (путь java.lang.String) Создает объект XSSFWorkbook с полным путем к файлу. |
XSSFWorkbook ()
Создает новый объект XSSFworkbook с нуля.
XSSFWorkbook (файл java.io.File)
Создает объект XSSFWorkbook из заданного файла.
XSSFWorkbook (java.io.InputStream is)
Создает объект XSSFWorkbook, буферизуя весь входной поток в память и затем открывая для него объект OPCPackage.
XSSFWorkbook (путь java.lang.String)
Создает объект XSSFWorkbook с полным путем к файлу.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
createSheet () Создает лист XSSFS для этой книги, добавляет его на листы и возвращает представление высокого уровня. |
2 |
createSheet (имя листа java.lang.String) Создает новый лист для этой рабочей книги и возвращает представление высокого уровня. |
3 |
CreateFont () Создает новый шрифт и добавляет его в таблицу шрифтов рабочей книги. |
4 |
createCellStyle () Создает новый XSSFCellStyle и добавляет его в таблицу стилей рабочей книги. |
5 |
CreateFont () Создает новый шрифт и добавляет его в таблицу шрифтов рабочей книги. |
6 |
setPrintArea (int sheetIndex, int startColumn, int endColumn, int startRow, int endRow) Устанавливает область печати данного листа в соответствии с указанными параметрами. |
createSheet ()
Создает лист XSSFS для этой книги, добавляет его на листы и возвращает представление высокого уровня.
createSheet (имя листа java.lang.String)
Создает новый лист для этой рабочей книги и возвращает представление высокого уровня.
CreateFont ()
Создает новый шрифт и добавляет его в таблицу шрифтов рабочей книги.
createCellStyle ()
Создает новый XSSFCellStyle и добавляет его в таблицу стилей рабочей книги.
CreateFont ()
Создает новый шрифт и добавляет его в таблицу шрифтов рабочей книги.
setPrintArea (int sheetIndex, int startColumn, int endColumn, int startRow, int endRow)
Устанавливает область печати данного листа в соответствии с указанными параметрами.
Остальные методы этого класса см. В полном документе API по адресу: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html. для полного списка методов.
Простынь
Sheet – это интерфейс в пакете org.apache.poi.ss.usermodel , и это суперинтерфейс всех классов, которые создают электронные таблицы высокого или низкого уровня с конкретными именами. Наиболее распространенным типом электронной таблицы является рабочий лист, который представлен в виде сетки ячеек.
HSSFSheet
Это класс в пакете org.apache.poi.hssf.usermodel . Он может создавать таблицы Excel и позволяет форматировать стиль листа и данные листа.
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
HSSFSheet (рабочая книга HSSFWorkbook) Создает новый лист HSSFS, вызываемый HSSFWorkbook для создания листа с нуля. |
2 |
HSSFSheet (рабочая книга HSSFWorkbook, лист InternalSheet) Создает лист HSSFS, представляющий данный объект листа. |
HSSFSheet (рабочая книга HSSFWorkbook)
Создает новый лист HSSFS, вызываемый HSSFWorkbook для создания листа с нуля.
HSSFSheet (рабочая книга HSSFWorkbook, лист InternalSheet)
Создает лист HSSFS, представляющий данный объект листа.
XSSFSheet
Это класс, который представляет высокоуровневое представление таблицы Excel. Он находится в пакете org.apache.poi.hssf.usermodel .
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
XSSFSheet () Создает новый лист XSSFS – вызывается XSSFWorkbook для создания листа с нуля. |
2 |
XSSFSheet (часть PackagePart, rel) Создает XSSFSheet, представляющий данную часть пакета и отношения. |
XSSFSheet ()
Создает новый лист XSSFS – вызывается XSSFWorkbook для создания листа с нуля.
XSSFSheet (часть PackagePart, rel)
Создает XSSFSheet, представляющий данную часть пакета и отношения.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
addMergedRegion (CellRangeAddress region) Добавляет объединенную область ячеек (следовательно, эти ячейки образуют единицу). |
2 |
autoSizeColumn (столбец int) Регулирует ширину столбца в соответствии с содержимым. |
3 |
итератора () Этот метод является псевдонимом для rowIterator (), чтобы разрешить циклы foreach. |
4 |
addHyperlink (гиперссылка XSSFHyperlink) Регистрирует гиперссылку в коллекции гиперссылок на этом листе |
addMergedRegion (CellRangeAddress region)
Добавляет объединенную область ячеек (следовательно, эти ячейки образуют единицу).
autoSizeColumn (столбец int)
Регулирует ширину столбца в соответствии с содержимым.
итератора ()
Этот метод является псевдонимом для rowIterator (), чтобы разрешить циклы foreach.
addHyperlink (гиперссылка XSSFHyperlink)
Регистрирует гиперссылку в коллекции гиперссылок на этом листе
Для остальных методов этого класса, обратитесь к полному API по адресу: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html.
Строка
Это интерфейс в пакете org.apache.poi.ss.usermodel . Он используется для высокоуровневого представления строки электронной таблицы. Это суперинтерфейс всех классов, которые представляют строки в библиотеке POI.
XSSFRow
Это класс в пакете org.apache.poi.xssf.usermodel . Он реализует интерфейс строк, поэтому он может создавать строки в электронной таблице. Ниже перечислены методы и конструкторы этого класса.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
createCell (int columnIndex) Создает новые ячейки в строке и возвращает ее. |
2 |
setHeight (короткая высота) Устанавливает высоту в коротких единицах. |
createCell (int columnIndex)
Создает новые ячейки в строке и возвращает ее.
setHeight (короткая высота)
Устанавливает высоту в коротких единицах.
Для остальных методов этого класса перейдите по указанной ссылке https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html.
клетка
Это интерфейс в пакете org.apache.poi.ss.usermodel . Это суперинтерфейс всех классов, которые представляют ячейки в строках электронной таблицы.
Ячейки могут иметь различные атрибуты, такие как пустое, числовое, дата, ошибка и т. Д. Ячейки должны иметь свои собственные номера (на основе 0) перед добавлением в строку.
XSSFCell
Это класс в пакете org.apache.poi.xssf.usermodel . Он реализует интерфейс Cell. Это высокоуровневое представление ячеек в строках электронной таблицы.
Сводка по полю
Ниже перечислены некоторые поля класса XSSFCell вместе с их описанием.
Sr.No. | Тип ячейки и описание |
---|---|
1 |
CELL_TYPE_BLANK Представляет пустую ячейку |
2 |
CELL_TYPE_BOOLEAN Представляет логическую ячейку (true или false) |
3 |
CELL_TYPE_ERROR Представляет значение ошибки в ячейке |
4 |
CELL_TYPE_FORMULA Представляет результат формулы в ячейке |
5 |
CELL_TYPE_NUMERIC Представляет числовые данные в ячейке |
6 |
CELL_TYPE_STRING Представляет строку (текст) в ячейке |
CELL_TYPE_BLANK
Представляет пустую ячейку
CELL_TYPE_BOOLEAN
Представляет логическую ячейку (true или false)
CELL_TYPE_ERROR
Представляет значение ошибки в ячейке
CELL_TYPE_FORMULA
Представляет результат формулы в ячейке
CELL_TYPE_NUMERIC
Представляет числовые данные в ячейке
CELL_TYPE_STRING
Представляет строку (текст) в ячейке
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
setCellStyle (стиль CellStyle) Устанавливает стиль для ячейки. |
2 |
setCellType (int cellType) Устанавливает тип ячеек (числовой, формулы или строки). |
3 |
setCellValue (логическое значение) Устанавливает логическое значение для ячейки. |
4 |
setCellValue (значение java.util.Calendar) Устанавливает значение даты для ячейки. |
5 |
setCellValue (двойное значение) Устанавливает числовое значение для ячейки. |
6 |
setCellValue (java.lang.String str) Устанавливает строковое значение для ячейки. |
7 |
setHyperlink (гиперссылка гиперссылки) Назначает гиперссылку на эту ячейку. |
setCellStyle (стиль CellStyle)
Устанавливает стиль для ячейки.
setCellType (int cellType)
Устанавливает тип ячеек (числовой, формулы или строки).
setCellValue (логическое значение)
Устанавливает логическое значение для ячейки.
setCellValue (значение java.util.Calendar)
Устанавливает значение даты для ячейки.
setCellValue (двойное значение)
Устанавливает числовое значение для ячейки.
setCellValue (java.lang.String str)
Устанавливает строковое значение для ячейки.
setHyperlink (гиперссылка гиперссылки)
Назначает гиперссылку на эту ячейку.
Для остальных методов и полей этого класса перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCell.html.
XSSFCellStyle
Это класс в пакете org.apache.poi.xssf.usermodel . Он предоставит возможную информацию о формате содержимого в ячейке электронной таблицы. Он также предоставляет варианты для изменения этого формата. Он реализует интерфейс CellStyle.
Сводка по полю
В следующей таблице перечислены несколько полей, которые унаследованы от интерфейса CellStyle.
Sr.No. | Поле и описание |
---|---|
1 |
ALIGN_CENTER Центр выровнять содержимое ячейки |
2 |
ALIGN_CENTER_SELECTION Горизонтальное выравнивание по центру |
3 |
ALIGN_FILL Ячейка соответствует размеру контента |
4 |
ALIGN_JUSTIFY Подогнать содержимое ячейки по ширине |
5 |
ВЫРОВНЯТЬ ПО ЛЕВОМУ КРАЮ Выровнять по левому краю содержимое ячейки |
6 |
ALIGN_RIGHT Выровняйте содержимое ячейки вправо |
7 |
BORDER_DASH_DOT Стиль ячейки с тире и точкой |
8 |
BORDER_DOTTED Стиль ячейки с пунктирной рамкой |
9 |
BORDER_DASHED Стиль ячейки с пунктирной каймой |
10 |
BORDER_THICK Стиль ячейки с толстой каймой |
11 |
BORDER_THIN Стиль ячейки с тонкой каймой |
12 |
VERTICAL_BOTTOM Выровняйте содержимое ячейки по вертикали |
13 |
VERTICAL_CENTER Выровняйте содержимое ячейки по центру |
15 |
VERTICAL_JUSTIFY Выровняйте и выровняйте содержимое ячейки по вертикали |
16 |
VERTICAL_TOP Вертикальное выравнивание сверху |
ALIGN_CENTER
Центр выровнять содержимое ячейки
ALIGN_CENTER_SELECTION
Горизонтальное выравнивание по центру
ALIGN_FILL
Ячейка соответствует размеру контента
ALIGN_JUSTIFY
Подогнать содержимое ячейки по ширине
ВЫРОВНЯТЬ ПО ЛЕВОМУ КРАЮ
Выровнять по левому краю содержимое ячейки
ALIGN_RIGHT
Выровняйте содержимое ячейки вправо
BORDER_DASH_DOT
Стиль ячейки с тире и точкой
BORDER_DOTTED
Стиль ячейки с пунктирной рамкой
BORDER_DASHED
Стиль ячейки с пунктирной каймой
BORDER_THICK
Стиль ячейки с толстой каймой
BORDER_THIN
Стиль ячейки с тонкой каймой
VERTICAL_BOTTOM
Выровняйте содержимое ячейки по вертикали
VERTICAL_CENTER
Выровняйте содержимое ячейки по центру
VERTICAL_JUSTIFY
Выровняйте и выровняйте содержимое ячейки по вертикали
VERTICAL_TOP
Вертикальное выравнивание сверху
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
XSSFCellStyle (int cellXfId, int cellStyleXfId, StylesTable stylesSource, тема ThemesTable) Создает стиль ячейки из поставляемых частей |
2 |
XSSFCellStyle (StylesTable stylesSource) Создает пустую ячейку Стиль |
XSSFCellStyle (int cellXfId, int cellStyleXfId, StylesTable stylesSource, тема ThemesTable)
Создает стиль ячейки из поставляемых частей
XSSFCellStyle (StylesTable stylesSource)
Создает пустую ячейку Стиль
Методы класса
S.No | Метод и описание |
---|---|
1 |
setAlignment (короткое выравнивание) Устанавливает тип горизонтального выравнивания для ячейки |
2 |
setBorderBottom (короткая граница) Устанавливает тип границы для нижней границы ячейки |
3 |
setBorderColor (сторона XSSFCellBorder.BorderSide, цвет XSSFColor) Устанавливает цвет для выбранной границы |
4 |
setBorderLeft (Короткая граница) Устанавливает тип границы для левой границы ячейки |
5 |
setBorderRight (короткая граница) Устанавливает тип границы для правой границы ячейки |
6 |
setBorderTop (короткая граница) Устанавливает тип границы для верхней границы ячейки |
7 |
setFillBackgroundColor (цвет XSSFColor) Устанавливает цвет заливки фона, представленный в виде значения XSSFColor. |
8 |
setFillForegroundColor (цвет XSSFColor) Устанавливает цвет заливки переднего плана, представленный в виде значения XSSFColor. |
9 |
setFillPattern (короткий фп) Определяет информацию о заливке ячеек для заливки ячеек по шаблону и сплошному цвету. |
10 |
setFont (шрифт шрифта) Устанавливает шрифт для этого стиля. |
11 |
setRotation (короткое вращение) Устанавливает степень поворота для текста в ячейке. |
12 |
setVerticalAlignment (короткое выравнивание) Устанавливает тип вертикального выравнивания для ячейки. |
setAlignment (короткое выравнивание)
Устанавливает тип горизонтального выравнивания для ячейки
setBorderBottom (короткая граница)
Устанавливает тип границы для нижней границы ячейки
setBorderColor (сторона XSSFCellBorder.BorderSide, цвет XSSFColor)
Устанавливает цвет для выбранной границы
setBorderLeft (Короткая граница)
Устанавливает тип границы для левой границы ячейки
setBorderRight (короткая граница)
Устанавливает тип границы для правой границы ячейки
setBorderTop (короткая граница)
Устанавливает тип границы для верхней границы ячейки
setFillBackgroundColor (цвет XSSFColor)
Устанавливает цвет заливки фона, представленный в виде значения XSSFColor.
setFillForegroundColor (цвет XSSFColor)
Устанавливает цвет заливки переднего плана, представленный в виде значения XSSFColor.
setFillPattern (короткий фп)
Определяет информацию о заливке ячеек для заливки ячеек по шаблону и сплошному цвету.
setFont (шрифт шрифта)
Устанавливает шрифт для этого стиля.
setRotation (короткое вращение)
Устанавливает степень поворота для текста в ячейке.
setVerticalAlignment (короткое выравнивание)
Устанавливает тип вертикального выравнивания для ячейки.
Для остальных методов и полей в этом классе перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html.
HSSFColor
Это класс в пакете org.apache.poi.hssf.util . Он предоставляет разные цвета как вложенные классы. Обычно эти вложенные классы представлены с использованием своих собственных индексов. Он реализует интерфейс Color.
Вложенные классы
Все вложенные классы этого класса являются статическими, и у каждого класса есть свой индекс. Эти вложенные цветовые классы используются для форматирования ячеек, такого как содержимое ячейки, границы, передний план и фон. Ниже перечислены некоторые из вложенных классов.
Sr.No. | Имена классов (цвета) |
---|---|
1 | HSSFColor.AQUA |
2 | HSSFColor.AUTOMATIC |
3 | HSSFColor.BLACK |
4 | HSSFColor.BLUE |
5 | HSSFColor.BRIGHT_GREEN |
6 | HSSFColor.BRIGHT_GRAY |
7 | HSSFColor.CORAL |
8 | HSSFColor.DARK_BLUE |
9 | HSSFColor.DARK_GREEN |
10 | HSSFColor.SKY_BLUE |
11 | HSSFColor.WHITE |
12 | HSSFColor.YELLOW |
Методы класса
Важен только один метод этого класса, который используется для получения значения индекса.
Sr.No. | Метод и описание |
---|---|
1 |
GetIndex () Этот метод используется для получения значения индекса вложенного класса. |
GetIndex ()
Этот метод используется для получения значения индекса вложенного класса.
Остальные методы и вложенные классы см. По следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html.
XSSFColor
Это класс в пакете org.apache.poi.xssf.usermodel . Он используется для представления цвета в электронной таблице. Он реализует интерфейс Color. Ниже перечислены некоторые из его методов и конструкторов.
Конструкторы классов
Sr.No. | Конструктор и описание |
---|---|
1 |
XSSFColor () Создает новый экземпляр XSSFColor. |
2 |
XSSFColor (byte [] rgb) Создает новый экземпляр XSSFColor, используя RGB. |
3 |
XSSFColor (java.awt.Color clr) Создает новый экземпляр XSSFColor, используя класс Color из пакета awt. |
XSSFColor ()
Создает новый экземпляр XSSFColor.
XSSFColor (byte [] rgb)
Создает новый экземпляр XSSFColor, используя RGB.
XSSFColor (java.awt.Color clr)
Создает новый экземпляр XSSFColor, используя класс Color из пакета awt.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
setAuto (логическое авто) Устанавливает логическое значение, указывающее, что ctColor является автоматическим и системный ctColor является зависимым. |
2 |
setIndexed (int indexed) Устанавливает индексированное значение ctColor как системный ctColor. |
setAuto (логическое авто)
Устанавливает логическое значение, указывающее, что ctColor является автоматическим и системный ctColor является зависимым.
setIndexed (int indexed)
Устанавливает индексированное значение ctColor как системный ctColor.
Для остальных методов перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFColor.html.
XSSFFont
Это класс в пакете org.apache.poi.xssf.usermodel . Он реализует интерфейс Font и поэтому может обрабатывать разные шрифты в книге.
Конструктор классов
Sr.No. | Конструктор и описание |
---|---|
1 |
XSSFFont () Создает новый экземпляр XSSFont. |
XSSFFont ()
Создает новый экземпляр XSSFont.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
setBold (логическое полужирное) Устанавливает логическое значение для атрибута «полужирный». |
2 |
setColor (короткий цвет) Устанавливает индексированный цвет для шрифта. |
3 |
setColor (XSSFColor color) Устанавливает цвет для шрифта в стандартном альфа RGB цветовом значении. |
4 |
setFontHeight (короткая высота) Устанавливает высоту шрифта в пунктах. |
5 |
setFontName (имя java.lang.String) Устанавливает имя для шрифта. |
6 |
setItalic (логический курсив) Устанавливает логическое значение для свойства ‘italic’. |
setBold (логическое полужирное)
Устанавливает логическое значение для атрибута «полужирный».
setColor (короткий цвет)
Устанавливает индексированный цвет для шрифта.
setColor (XSSFColor color)
Устанавливает цвет для шрифта в стандартном альфа RGB цветовом значении.
setFontHeight (короткая высота)
Устанавливает высоту шрифта в пунктах.
setFontName (имя java.lang.String)
Устанавливает имя для шрифта.
setItalic (логический курсив)
Устанавливает логическое значение для свойства ‘italic’.
Для остальных методов перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFFont.html.
XSSFHyperlink
Это класс в пакете org.apache.poi.xssf.usermodel . Он реализует интерфейс Hyperlink. Он используется для установки гиперссылки на содержимое ячейки электронной таблицы.
поля
Поля этого класса следующие. Здесь поля означают типы используемых гиперссылок.
Sr.No. | Поле и описание |
---|---|
1 |
LINK_DOCUMENT Используется для ссылки на любой другой документ |
2 |
LINK_EMAIL Используется для ссылки на электронную почту |
3 |
LINK_FILE Используется для связи любого другого файла в любом формате |
4 |
LINK_URL Используется для ссылки на веб-URL |
LINK_DOCUMENT
Используется для ссылки на любой другой документ
LINK_EMAIL
Используется для ссылки на электронную почту
LINK_FILE
Используется для связи любого другого файла в любом формате
LINK_URL
Используется для ссылки на веб-URL
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
setAddress (адрес java.lang.String) Адрес гиперссылки. |
setAddress (адрес java.lang.String)
Адрес гиперссылки.
Для остальных методов перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFHyperlink.html.
XSSFCreationHelper
Это класс в пакете org.apache.poi.xssf.usermodel . Он реализует интерфейс CreationHelper. Он используется в качестве класса поддержки для оценки формул и настройки гиперссылок.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
createFormulaEvaluator () Создает экземпляр XSSFFormulaEvaluator, объект, который оценивает ячейки формулы. |
2 |
createHyperlink (тип int) Создает новый XSSFHyperlink. |
createFormulaEvaluator ()
Создает экземпляр XSSFFormulaEvaluator, объект, который оценивает ячейки формулы.
createHyperlink (тип int)
Создает новый XSSFHyperlink.
Остальные методы см. По следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCreationHelper.html.
XSSFPrintSetup
Это класс в пакете org.apache.poi.xsssf.usermodel . Он реализует интерфейс PrintSetup . Он используется для установки размера страницы печати, области, параметров и настроек.
Методы класса
Sr.No. | Метод и описание |
---|---|
1 |
setLandscape (логическое значение ls) Устанавливает логическое значение, чтобы разрешить или заблокировать альбомную печать. |
2 |
setLeftToRight (логический ltor) Устанавливает, идти ли слева направо или сверху вниз при заказе во время печати. |
3 |
setPaperSize (короткий размер) Устанавливает размер бумаги. |
setLandscape (логическое значение ls)
Устанавливает логическое значение, чтобы разрешить или заблокировать альбомную печать.
setLeftToRight (логический ltor)
Устанавливает, идти ли слева направо или сверху вниз при заказе во время печати.
setPaperSize (короткий размер)
Устанавливает размер бумаги.
Для остальных методов перейдите по следующей ссылке: https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFPrintSetup.html.
Apache POI – рабочие книги
Здесь термин «Рабочая книга» означает файл Microsoft Excel. После завершения этой главы вы сможете создавать новые рабочие книги и открывать существующие рабочие книги с помощью Java-программы.
Создать пустую книгу
Следующая простая программа используется для создания пустой книги Microsoft Excel.
import java.io.*; import org.apache.poi.xssf.usermodel.*; public class CreateWorkBook { public static void main(String[] args)throws Exception { //Create Blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create file system using specific name FileOutputStream out = new FileOutputStream(new File("createworkbook.xlsx")); //write operation workbook using file out object workbook.write(out); out.close(); System.out.println("createworkbook.xlsx written successfully"); } }
Давайте сохраним указанный выше Java-код как CreateWorkBook.java , а затем скомпилируем и выполним его из командной строки следующим образом:
$javac CreateWorkBook.java $java CreateWorkBook
Если ваша системная среда сконфигурирована с библиотекой POI, она скомпилируется и выполнится, чтобы создать пустой файл Excel с именем createworkbook.xlsx в вашем текущем каталоге и отобразить следующий вывод в командной строке.
createworkbook.xlsx written successfully
Открыть существующую книгу
Используйте следующий код, чтобы открыть существующую книгу.
import java.io.*; import org.apache.poi.xssf.usermodel.*; public class OpenWorkBook { public static void main(String args[])throws Exception { File file = new File("openworkbook.xlsx"); FileInputStream fIP = new FileInputStream(file); //Get the workbook instance for XLSX file XSSFWorkbook workbook = new XSSFWorkbook(fIP); if(file.isFile() && file.exists()) { System.out.println("openworkbook.xlsx file open successfully."); } else { System.out.println("Error to open openworkbook.xlsx file."); } } }
Сохраните приведенный выше Java-код как OpenWorkBook.java , а затем скомпилируйте и выполните его из командной строки следующим образом:
$javac OpenWorkBook.java $java OpenWorkBook
Он будет скомпилирован и выполнен для генерации следующего вывода.
openworkbook.xlsx file open successfully.
После открытия рабочей книги вы можете выполнять операции чтения и записи на ней.
Apache POI – электронные таблицы
В этой главе объясняется, как создать электронную таблицу и управлять ею с помощью Java. Электронная таблица – это страница в файле Excel; он содержит строки и столбцы с конкретными именами.
После прочтения этой главы вы сможете создать электронную таблицу и выполнить операции чтения с ней.
Создать электронную таблицу
Прежде всего, давайте создадим электронную таблицу, используя ссылочные классы, которые обсуждались в предыдущих главах. Следуя предыдущей главе, сначала создайте рабочую книгу, а затем мы можем продолжить и создать лист.
Следующий фрагмент кода используется для создания электронной таблицы.
//Create Blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create a blank spreadsheet XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");
Строки в таблице
Электронные таблицы имеют сетку. Строки и столбцы обозначены конкретными именами. Столбцы обозначены алфавитами, а строки – номерами.
Следующий фрагмент кода используется для создания строки.
XSSFRow row = spreadsheet.createRow((short)1);
Написать в электронную таблицу
Давайте рассмотрим пример данных о сотрудниках. Здесь данные о сотрудниках приведены в табличной форме.
Emp Id | Имя Эмпайра | обозначение |
---|---|---|
TP01 | Гопал | Технический менеджер |
TP02 | Маниша | Proof Reader |
Tp03 | Masthan | Технический писатель |
Tp04 | Сатиш | Технический писатель |
Tp05 | Кришна | Технический писатель |
Следующий код используется для записи вышеуказанных данных в электронную таблицу.
import java.io.File; import java.io.FileOutputStream; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Writesheet { public static void main(String[] args) throws Exception { //Create blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create a blank sheet XSSFSheet spreadsheet = workbook.createSheet(" Employee Info "); //Create row object XSSFRow row; //This data needs to be written (Object[]) Map < String, Object[] > empinfo = new TreeMap < String, Object[] >(); empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" }); empinfo.put( "2", new Object[] { "tp01", "Gopal", "Technical Manager" }); empinfo.put( "3", new Object[] { "tp02", "Manisha", "Proof Reader" }); empinfo.put( "4", new Object[] { "tp03", "Masthan", "Technical Writer" }); empinfo.put( "5", new Object[] { "tp04", "Satish", "Technical Writer" }); empinfo.put( "6", new Object[] { "tp05", "Krishna", "Technical Writer" }); //Iterate over data and write to sheet Set < String > keyid = empinfo.keySet(); int rowid = 0; for (String key : keyid) { row = spreadsheet.createRow(rowid++); Object [] objectArr = empinfo.get(key); int cellid = 0; for (Object obj : objectArr) { Cell cell = row.createCell(cellid++); cell.setCellValue((String)obj); } } //Write the workbook in file system FileOutputStream out = new FileOutputStream(new File("Writesheet.xlsx")); workbook.write(out); out.close(); System.out.println("Writesheet.xlsx written successfully"); } }
Сохраните приведенный выше Java-код как Writesheet.java , а затем скомпилируйте и запустите его из командной строки следующим образом:
$javac Writesheet.java $java Writesheet
Он скомпилируется и выполнится для создания файла Excel с именем Writesheet.xlsx в вашем текущем каталоге, и вы получите следующий вывод в командной строке.
Writesheet.xlsx written successfully
Файл Writesheet.xlsx выглядит следующим образом.
Читать из таблицы
Давайте рассмотрим вышеупомянутый файл Excel с именем Writesheet.xslx в качестве входных данных. Соблюдайте следующий код; он используется для чтения данных из электронной таблицы.
import java.io.File; import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Readsheet { static XSSFRow row; public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream(new File("WriteSheet.xlsx")); XSSFWorkbook workbook = new XSSFWorkbook(fis); XSSFSheet spreadsheet = workbook.getSheetAt(0); Iterator < Row > rowIterator = spreadsheet.iterator(); while (rowIterator.hasNext()) { row = (XSSFRow) rowIterator.next(); Iterator < Cell > cellIterator = row.cellIterator(); while ( cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + " \t\t "); break; case Cell.CELL_TYPE_STRING: System.out.print( cell.getStringCellValue() + " \t\t "); break; } } System.out.println(); } fis.close(); } }
Давайте сохраним приведенный выше код в файле Readsheet.java , а затем скомпилируем и запустим его из командной строки следующим образом:
$javac Readsheet.java $java Readsheet
Если ваша системная среда сконфигурирована с библиотекой POI, она будет скомпилирована и выполнена для генерации следующего вывода в командной строке.
EMP ID EMP NAME DESIGNATION tp01 Gopal Technical Manager tp02 Manisha Proof Reader tp03 Masthan Technical Writer tp04 Satish Technical Writer tp05 Krishna Technical Writer
Apache POI – Клетки
Любые данные, которые вы вводите в электронную таблицу, всегда хранятся в ячейке. Мы используем метки строк и столбцов, чтобы идентифицировать ячейку. В этой главе описывается, как манипулировать данными в ячейках электронной таблицы с помощью Java-программирования.
Создать ячейку
Вам нужно создать строку перед созданием ячейки. Ряд – это не что иное, как набор ячеек.
Следующий фрагмент кода используется для создания ячейки.
//create new workbook XSSFWorkbook workbook = new XSSFWorkbook(); //create spreadsheet with a name XSSFSheet spreadsheet = workbook.createSheet("new sheet"); //create first row on a created spreadsheet XSSFRow row = spreadsheet.createRow(0); //create first cell on created row XSSFCell cell = row.createCell(0);
Типы клеток
Тип ячейки указывает, может ли ячейка содержать строки, числовые значения или формулы. Строковая ячейка не может содержать числовые значения, а числовая ячейка не может содержать строки. Ниже приведены типы ячеек, их значения и синтаксис типов.
Тип значения ячейки | Введите Синтаксис |
---|---|
Пустое значение ячейки | XSSFCell.CELL_TYPE_BLANK |
Булево значение ячейки | XSSFCell.CELL.TYPE_BOOLEAN |
Значение ячейки ошибки | XSSFCell.CELL_TYPE_ERROR |
Числовое значение ячейки | XSSFCell.CELL_TYPE_NUMERIC |
Строковое значение ячейки | XSSFCell.CELL_TYPE_STRING |
Следующий код используется для создания различных типов ячеек в электронной таблице.
import java.io.File; import java.io.FileOutputStream; import java.util.Date; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TypesofCells { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("cell types"); XSSFRow row = spreadsheet.createRow((short) 2); row.createCell(0).setCellValue("Type of Cell"); row.createCell(1).setCellValue("cell value"); row = spreadsheet.createRow((short) 3); row.createCell(0).setCellValue("set cell type BLANK"); row.createCell(1); row = spreadsheet.createRow((short) 4); row.createCell(0).setCellValue("set cell type BOOLEAN"); row.createCell(1).setCellValue(true); row = spreadsheet.createRow((short) 5); row.createCell(0).setCellValue("set cell type ERROR"); row.createCell(1).setCellValue(XSSFCell.CELL_TYPE_ERROR ); row = spreadsheet.createRow((short) 6); row.createCell(0).setCellValue("set cell type date"); row.createCell(1).setCellValue(new Date()); row = spreadsheet.createRow((short) 7); row.createCell(0).setCellValue("set cell type numeric"); row.createCell(1).setCellValue(20 ); row = spreadsheet.createRow((short) 8); row.createCell(0).setCellValue("set cell type string"); row.createCell(1).setCellValue("A String"); FileOutputStream out = new FileOutputStream(new File("typesofcells.xlsx")); workbook.write(out); out.close(); System.out.println("typesofcells.xlsx written successfully"); } }
Сохраните приведенный выше код в файле с именем TypesofCells.java , скомпилируйте и выполните его из командной строки следующим образом.
$javac TypesofCells.java $java TypesofCells
Если ваша система сконфигурирована с библиотекой POI, то она скомпилируется и выполнится, чтобы сгенерировать файл Excel с именем typesofcells.xlsx в вашем текущем каталоге и отобразить следующий вывод.
typesofcells.xlsx written successfully
Файл typesofcells.xlsx выглядит следующим образом.
Cell Styles
Здесь вы можете узнать, как выполнять форматирование ячеек и применять различные стили, такие как объединение смежных ячеек, добавление границ, настройка выравнивания ячеек и заливка цветами.
Следующий код используется для применения различных стилей к ячейкам с помощью Java-программирования.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CellStyle { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("cellstyle"); XSSFRow row = spreadsheet.createRow((short) 1); row.setHeight((short) 800); XSSFCell cell = (XSSFCell) row.createCell((short) 1); cell.setCellValue("test of merging"); //MEARGING CELLS //this statement for merging cells spreadsheet.addMergedRegion( new CellRangeAddress( 1, //first row (0-based) 1, //last row (0-based) 1, //first column (0-based) 4 //last column (0-based) ) ); //CELL Alignment row = spreadsheet.createRow(5); cell = (XSSFCell) row.createCell(0); row.setHeight((short) 800); // Top Left alignment XSSFCellStyle style1 = workbook.createCellStyle(); spreadsheet.setColumnWidth(0, 8000); style1.setAlignment(XSSFCellStyle.ALIGN_LEFT); style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP); cell.setCellValue("Top Left"); cell.setCellStyle(style1); row = spreadsheet.createRow(6); cell = (XSSFCell) row.createCell(1); row.setHeight((short) 800); // Center Align Cell Contents XSSFCellStyle style2 = workbook.createCellStyle(); style2.setAlignment(XSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); cell.setCellValue("Center Aligned"); cell.setCellStyle(style2); row = spreadsheet.createRow(7); cell = (XSSFCell) row.createCell(2); row.setHeight((short) 800); // Bottom Right alignment XSSFCellStyle style3 = workbook.createCellStyle(); style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT); style3.setVerticalAlignment(XSSFCellStyle.VERTICAL_BOTTOM); cell.setCellValue("Bottom Right"); cell.setCellStyle(style3); row = spreadsheet.createRow(8); cell = (XSSFCell) row.createCell(3); // Justified Alignment XSSFCellStyle style4 = workbook.createCellStyle(); style4.setAlignment(XSSFCellStyle.ALIGN_JUSTIFY); style4.setVerticalAlignment(XSSFCellStyle.VERTICAL_JUSTIFY); cell.setCellValue("Contents are Justified in Alignment"); cell.setCellStyle(style4); //CELL BORDER row = spreadsheet.createRow((short) 10); row.setHeight((short) 800); cell = (XSSFCell) row.createCell((short) 1); cell.setCellValue("BORDER"); XSSFCellStyle style5 = workbook.createCellStyle(); style5.setBorderBottom(XSSFCellStyle.BORDER_THICK); style5.setBottomBorderColor(IndexedColors.BLUE.getIndex()); style5.setBorderLeft(XSSFCellStyle.BORDER_DOUBLE); style5.setLeftBorderColor(IndexedColors.GREEN.getIndex()); style5.setBorderRight(XSSFCellStyle.BORDER_HAIR); style5.setRightBorderColor(IndexedColors.RED.getIndex()); style5.setBorderTop(XSSFCellStyle.BIG_SPOTS); style5.setTopBorderColor(IndexedColors.CORAL.getIndex()); cell.setCellStyle(style5); //Fill Colors //background color row = spreadsheet.createRow((short) 10 ); cell = (XSSFCell) row.createCell((short) 1); XSSFCellStyle style6 = workbook.createCellStyle(); style6.setFillBackgroundColor(HSSFColor.LEMON_CHIFFON.index ); style6.setFillPattern(XSSFCellStyle.LESS_DOTS); style6.setAlignment(XSSFCellStyle.ALIGN_FILL); spreadsheet.setColumnWidth(1,8000); cell.setCellValue("FILL BACKGROUNG/FILL PATTERN"); cell.setCellStyle(style6); //Foreground color row = spreadsheet.createRow((short) 12); cell = (XSSFCell) row.createCell((short) 1); XSSFCellStyle style7 = workbook.createCellStyle(); style7.setFillForegroundColor(HSSFColor.BLUE.index); style7.setFillPattern( XSSFCellStyle.LESS_DOTS); style7.setAlignment(XSSFCellStyle.ALIGN_FILL); cell.setCellValue("FILL FOREGROUND/FILL PATTERN"); cell.setCellStyle(style7); FileOutputStream out = new FileOutputStream(new File("cellstyle.xlsx")); workbook.write(out); out.close(); System.out.println("cellstyle.xlsx written successfully"); } }
Сохраните приведенный выше код в файле с именем CellStyle.java , скомпилируйте и выполните его из командной строки следующим образом.
$javac CellStyle.java $java CellStyle
Он создаст файл Excel с именем cellstyle.xlsx в вашем текущем каталоге и отобразит следующий вывод.
cellstyle.xlsx written successfully
Файл cellstyle.xlsx выглядит следующим образом.
Apache POI – Шрифты
В этой главе объясняется, как устанавливать разные шрифты, применять стили и отображать текст под разными углами в электронной таблице Excel.
Каждая система поставляется в комплекте с огромной коллекцией шрифтов, таких как Arial, Impact, Times New Roman и т. Д. При необходимости коллекция также может быть обновлена новыми шрифтами. Точно так же существуют различные стили, в которых может отображаться шрифт, например, жирный, курсив, подчеркивание, вычеркивание и т. Д.
Шрифты и стили шрифтов
Следующий код используется для применения определенного шрифта и стиля к содержимому ячейки.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class FontStyle { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("Fontstyle"); XSSFRow row = spreadsheet.createRow(2); //Create a new font and alter it. XSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 30); font.setFontName("IMPACT"); font.setItalic(true); font.setColor(HSSFColor.BRIGHT_GREEN.index); //Set font into style XSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); // Create a cell with a value and set style to it. XSSFCell cell = row.createCell(1); cell.setCellValue("Font Style"); cell.setCellStyle(style); FileOutputStream out = new FileOutputStream(new File("fontstyle.xlsx")); workbook.write(out); out.close(); System.out.println("fontstyle.xlsx written successfully"); } }
Давайте сохраним приведенный выше код в файле с именем FontStyle.java . Скомпилируйте и выполните его из командной строки следующим образом.
$javac FontStyle.java $java FontStyle
Он генерирует файл Excel с именем fontstyle.xlsx в вашем текущем каталоге и отображает следующий вывод в командной строке.
fontstyle.xlsx written successfully
Файл fontstyle.xlsx выглядит следующим образом.
Направление текста
Здесь вы можете узнать, как установить направление текста под разными углами. Обычно содержимое ячейки отображается горизонтально, слева направо и под углом 00; однако вы можете использовать следующий код для поворота направления текста, если это необходимо.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TextDirection { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("Text direction"); XSSFRow row = spreadsheet.createRow(2); XSSFCellStyle myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 0); XSSFCell cell = row.createCell(1); cell.setCellValue("0D angle"); cell.setCellStyle(myStyle); //30 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 30); cell = row.createCell(3); cell.setCellValue("30D angle"); cell.setCellStyle(myStyle); //90 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 90); cell = row.createCell(5); cell.setCellValue("90D angle"); cell.setCellStyle(myStyle); //120 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 120); cell = row.createCell(7); cell.setCellValue("120D angle"); cell.setCellStyle(myStyle); //270 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 270); cell = row.createCell(9); cell.setCellValue("270D angle"); cell.setCellStyle(myStyle); //360 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 360); cell = row.createCell(12); cell.setCellValue("360D angle"); cell.setCellStyle(myStyle); FileOutputStream out = new FileOutputStream(new File("textdirection.xlsx")); workbook.write(out); out.close(); System.out.println("textdirection.xlsx written successfully"); } }
Сохраните приведенный выше код в файле TextDirectin.java , затем скомпилируйте и выполните его из командной строки следующим образом.
$javac TextDirection.java $java TextDirection
Он скомпилируется и выполнится для создания файла Excel с именем textdirection.xlsx в вашем текущем каталоге и отобразит следующий вывод в командной строке.
textdirection.xlsx written successfully
Файл textdirection.xlsx выглядит следующим образом.
Apache POI – Формула
Эта глава проведет вас через процесс применения различных формул к ячейкам с помощью Java-программирования. Основная цель приложения Excel – поддерживать числовые данные, применяя к ним формулы.
В формуле мы передаем динамические значения или местоположения значений на листе Excel. Выполнив эту формулу, вы получите желаемый результат. В следующей таблице перечислены несколько основных формул, которые часто используются в Excel.
операция | Синтаксис |
---|---|
Добавление нескольких номеров | = SUM (Loc1: Locn) или = SUM (n1, n2,) |
подсчитывать | = COUNT (Loc1: Locn) или = COUNT (n1, n2,) |
Сила двух чисел | = POWER (Loc1, Loc2) или = POWER (число, мощность) |
Макс нескольких номеров | = MAX (Loc1: Locn) или = MAX (n1, n2,) |
Товар | = ПРОДУКТ (Loc1: Locn) или = ПРОДУКТ (n1, n2,) |
Факториал | = ФАКТ (Locn) или = ФАКТ (число) |
Абсолютное число | = ABS (Locn) или = ABS (число) |
Сегодня дата | = СЕГОДНЯ () |
Преобразует строчные | = НИЖНЯЯ (Locn) или = НИЖНЯЯ (текст) |
Квадратный корень | = SQRT (locn) или = SQRT (число) |
Следующий код используется для добавления формул в ячейку и их выполнения.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Formula { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("formula"); XSSFRow row = spreadsheet.createRow(1); XSSFCell cell = row.createCell(1); cell.setCellValue("A = "); cell = row.createCell(2); cell.setCellValue(2); row = spreadsheet.createRow(2); cell = row.createCell(1); cell.setCellValue("B = "); cell = row.createCell(2); cell.setCellValue(4); row = spreadsheet.createRow(3); cell = row.createCell(1); cell.setCellValue("Total = "); cell = row.createCell(2); // Create SUM formula cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("SUM(C2:C3)"); cell = row.createCell(3); cell.setCellValue("SUM(C2:C3)"); row = spreadsheet.createRow(4); cell = row.createCell(1); cell.setCellValue("POWER ="); cell=row.createCell(2); // Create POWER formula cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("POWER(C2,C3)"); cell = row.createCell(3); cell.setCellValue("POWER(C2,C3)"); row = spreadsheet.createRow(5); cell = row.createCell(1); cell.setCellValue("MAX = "); cell = row.createCell(2); // Create MAX formula cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("MAX(C2,C3)"); cell = row.createCell(3); cell.setCellValue("MAX(C2,C3)"); row = spreadsheet.createRow(6); cell = row.createCell(1); cell.setCellValue("FACT = "); cell = row.createCell(2); // Create FACT formula cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("FACT(C3)"); cell = row.createCell(3); cell.setCellValue("FACT(C3)"); row = spreadsheet.createRow(7); cell = row.createCell(1); cell.setCellValue("SQRT = "); cell = row.createCell(2); // Create SQRT formula cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("SQRT(C5)"); cell = row.createCell(3); cell.setCellValue("SQRT(C5)"); workbook.getCreationHelper().createFormulaEvaluator().evaluateAll(); FileOutputStream out = new FileOutputStream(new File("formula.xlsx")); workbook.write(out); out.close(); System.out.println("fromula.xlsx written successfully"); } }
Сохраните приведенный выше код как Formula.java, а затем скомпилируйте и выполните его из командной строки следующим образом.
$javac Formula.java $java Formula
Он создаст файл Excel с именем Formula.xlsx в вашем текущем каталоге и отобразит следующий вывод в командной строке.
fromula.xlsx written successfully
Файл формула.xlsx выглядит следующим образом.
Apache POI – Гиперссылка
В этой главе объясняется, как добавить гиперссылки на содержимое в ячейке. Обычно гиперссылки используются для доступа к любому веб-URL, электронной почте или внешнему файлу.
Следующий код показывает, как создавать гиперссылки на ячейки.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.common.usermodel.Hyperlink; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFHyperlink; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class HyperlinkEX { public static void main(String[] args) throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("Hyperlinks"); XSSFCell cell; CreationHelper createHelper = workbook.getCreationHelper(); XSSFCellStyle hlinkstyle = workbook.createCellStyle(); XSSFFont hlinkfont = workbook.createFont(); hlinkfont.setUnderline(XSSFFont.U_SINGLE); hlinkfont.setColor(HSSFColor.BLUE.index); hlinkstyle.setFont(hlinkfont); //URL Link cell = spreadsheet.createRow(1).createCell((short) 1); cell.setCellValue("URL Link"); XSSFHyperlink link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_URL); link.setAddress("http://www.tutorialspoint.com/"); cell.setHyperlink((XSSFHyperlink) link); cell.setCellStyle(hlinkstyle); //Hyperlink to a file in the current directory cell = spreadsheet.createRow(2).createCell((short) 1); cell.setCellValue("File Link"); link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_FILE); link.setAddress("cellstyle.xlsx"); cell.setHyperlink(link); cell.setCellStyle(hlinkstyle); //e-mail link cell = spreadsheet.createRow(3).createCell((short) 1); cell.setCellValue("Email Link"); link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_EMAIL); link.setAddress("mailto:contact@coderlessons.com?" + "subject = Hyperlink"); cell.setHyperlink(link); cell.setCellStyle(hlinkstyle); FileOutputStream out = new FileOutputStream(new File("hyperlink.xlsx")); workbook.write(out); out.close(); System.out.println("hyperlink.xlsx written successfully"); } }
Сохраните приведенный выше код как HyperlinkEX.java . Скомпилируйте и выполните его из командной строки следующим образом.
$javac HyperlinkEX.java $java HyperlinkEX
Он создаст файл Excel с именем hyperlink.xlsx в вашем текущем каталоге и отобразит следующий вывод в командной строке.
hyperlink.xlsx written successfully
Файл hyperlink.xlsx выглядит следующим образом.
Apache POI – область печати
В этой главе объясняется, как установить область печати в электронной таблице. Обычная область печати находится слева направо в электронных таблицах Excel. Область печати может быть настроена в соответствии с вашими требованиями. Это означает, что вы можете распечатать определенный диапазон ячеек из всей электронной таблицы, настроить размер бумаги, распечатать содержимое с включенными линиями сетки и т. Д.
Следующий код используется для настройки области печати в электронной таблице.
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFPrintSetup; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class PrintArea { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("Print Area"); //set print area with indexes workbook.setPrintArea( 0, //sheet index 0, //start column 5, //end column 0, //start row 5 //end row ); //set paper size spreadsheet.getPrintSetup().setPaperSize(XSSFPrintSetup.A4_PAPERSIZE); //set display grid lines or not spreadsheet.setDisplayGridlines(true); //set print grid lines or not spreadsheet.setPrintGridlines(true); FileOutputStream out = new FileOutputStream(new File("printarea.xlsx")); workbook.write(out); out.close(); System.out.println("printarea.xlsx written successfully"); } }
Давайте сохраним приведенный выше код как PrintArea.java . Скомпилируйте и выполните его из командной строки следующим образом.
$javac PrintArea.java $java PrintArea
Он создаст файл с именем printarea.xlsx в вашем текущем каталоге и отобразит следующий вывод в командной строке.
printarea.xlsx written successfully
В приведенном выше коде мы не добавили никаких значений ячеек. Следовательно, printarea.xlsx – это пустой файл. Но вы можете наблюдать на следующем рисунке, что предварительный просмотр печати показывает область печати с линиями сетки.
Apache POI – База данных
В этой главе объясняется, как библиотека POI взаимодействует с базой данных. С помощью JDBC вы можете извлечь данные из базы данных и вставить эти данные в электронную таблицу, используя библиотеку POI. Давайте рассмотрим базу данных MySQL для операций SQL.
Написать в Excel из базы данных
Предположим, что следующая таблица данных о сотрудниках emp_tbl должна быть получена из теста базы данных MySQL.
EMP ID | EMP NAME | DEG | ОПЛАТА ТРУДА | DEPT |
---|---|---|---|---|
1201 | Гопал | Технический менеджер | 45000 | ЭТО |
1202 | Маниша | Корректор | 45000 | тестирование |
1203 | Masthanvali | Технический писатель | 45000 | ЭТО |
1204 | Киран | Админ | 40000 | HR |
1205 | Kranthi | Оператор | 30000 | Администратор |
Используйте следующий код для извлечения данных из базы данных и вставки их в электронную таблицу.
import java.io.File; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelDatabase { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection connect = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test" , "root" , "root" ); Statement statement = connect.createStatement(); ResultSet resultSet = statement.executeQuery("select * from emp_tbl"); XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("employe db"); XSSFRow row = spreadsheet.createRow(1); XSSFCell cell; cell = row.createCell(1); cell.setCellValue("EMP ID"); cell = row.createCell(2); cell.setCellValue("EMP NAME"); cell = row.createCell(3); cell.setCellValue("DEG"); cell = row.createCell(4); cell.setCellValue("SALARY"); cell = row.createCell(5); cell.setCellValue("DEPT"); int i = 2; while(resultSet.next()) { row = spreadsheet.createRow(i); cell = row.createCell(1); cell.setCellValue(resultSet.getInt("eid")); cell = row.createCell(2); cell.setCellValue(resultSet.getString("ename")); cell = row.createCell(3); cell.setCellValue(resultSet.getString("deg")); cell = row.createCell(4); cell.setCellValue(resultSet.getString("salary")); cell = row.createCell(5); cell.setCellValue(resultSet.getString("dept")); i++; } FileOutputStream out = new FileOutputStream(new File("exceldatabase.xlsx")); workbook.write(out); out.close(); System.out.println("exceldatabase.xlsx written successfully"); } }
Давайте сохраним приведенный выше код как ExcelDatabase.java . Скомпилируйте и выполните его из командной строки следующим образом.
$javac ExcelDatabase.java $java ExcelDatabase
Он создаст файл Excel с именем exceldatabase.xlsx в вашем текущем каталоге и отобразит следующий вывод в командной строке.
exceldatabase.xlsx written successfully
Файл exceldatabase.xlsx выглядит следующим образом.
Афоризм
Рецепт молодости — радуйтесь каждой мелочи, и не нервничайте из-за каждой сволочи.
Поддержка проекта
Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
• Yandex.Деньги
410013796724260
• Webmoney
R335386147728
Z369087728698
Apache POI, взаимодействие с Excel
Apache POI представляет собой API, который позволяет использовать файлы MS Office в Java приложениях.
Данная библиотека разрабатывается и распространяется Apache Software Foundation и носит открытый характер.
Apache POI включает классы и методы для чтения и записи информации в документы MS Office.
Описание компонентов
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, то необходимо установить одну из
следующих зависимостей (версия может быть более новой) :
<!-- 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.
- рабочая книга — HSSFWorkbook, XSSFWorkbook
- лист книги — HSSFSheet, XSSFSheet
- строка — HSSFRow, XSSFRow
- ячейка — HSSFCell, XSSFCell
- стиль — стили ячеек HSSFCellStyle, XSSFCellStyle
- шрифт — шрифт ячеек HSSFFont, XSSFFont
Поскольку описание всех классов и методов не разместить на одной
странице, то ниже по тексту приводятся ссылки для перехода к исходной документации.
Классы и методы 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 и определение стилей ячеек рассмотрены
здесь.
Автор оригинала: Pankaj Kumar.
Добро пожаловать в учебник по POI Apache. Иногда нам нужно считывать данные из Файлов Microsoft Excel или создавать отчеты в формате Excel, в основном для деловых или финансовых целей. Java не предоставляет встроенной поддержки для работы с файлами excel, поэтому нам нужно искать API с открытым исходным кодом для этой работы. Когда я начал поиск Java API для excel, большинство людей рекомендовали Excel или Apache POI.
После дальнейших исследований я обнаружил, что Apache POI-это правильный путь по следующим основным причинам. Есть и некоторые другие причины, связанные с расширенными функциями, но давайте не будем вдаваться в такие подробности.
- Поддержка фонда Apache.
- Excel не поддерживает формат xlsx, в то время как POI поддерживает форматы xls и xlsx.
- Apache POI обеспечивает потоковую обработку, которая подходит для больших файлов и требует меньше памяти.
Apache POI обеспечивает отличную поддержку для работы с документами Microsoft Excel. Apache POI способен обрабатывать электронные таблицы в форматах XLS и XLSX.
Некоторые важные моменты, касающиеся API POI Apache, заключаются в следующем:
- POI Apache содержит реализацию HSSF для формата файлов Excel ’97(-2007), т. е. XLS.
- Реализация Apache POI XSSF должна использоваться для формата файлов Excel 2007 OOXML (.xlsx).
- API Apache POI HSSF и XSSF предоставляет механизмы для чтения, записи или изменения электронных таблиц Excel.
- Apache POI также предоставляет API SXSSF, который является расширением XSSF для работы с очень большими листами excel. API SXSSF требует меньше памяти и подходит для работы с очень большими электронными таблицами, а объем оперативной памяти ограничен.
- Есть две модели на выбор – модель событий и модель пользователя. Модель событий требует меньше памяти, поскольку файл excel считывается в токенах и требует их обработки. Модель пользователя более объектно-ориентирована и проста в использовании, и мы будем использовать это в наших примерах.
- Apache POI обеспечивает отличную поддержку дополнительных функций excel, таких как работа с формулами, создание стилей ячеек путем заполнения цветов и границ, шрифтов, верхних и нижних колонтитулов, проверки данных, изображений, гиперссылок и т.д.
Зависимости Apache POI Maven
Если вы используете maven, добавьте ниже зависимости POI Apache.
org.apache.poi poi 3.10-FINAL org.apache.poi poi-ooxml 3.10-FINAL
Текущая версия POI Apache 3.10-ОКОНЧАТЕЛЬНАЯ. Если у вас есть автономное java-приложение, включите банки из изображения ниже.
Пример POI Apache – Чтение файла Excel
Допустим, у нас есть файл excel “Sample.xlsx” с двумя листами и данными, как показано на рисунке ниже. Мы хотим прочитать файл excel и создать список стран. Лист1 содержит некоторые дополнительные данные, которые мы будем игнорировать при его анализе.
Код java-бина нашей страны является:
Код java-бина нашей страны является:
package com.journaldev.excel.read; public class Country { private String name; private String shortCode; public Country(String n, String c){ this.name=n; this.shortCode=c; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getShortCode() { return shortCode; } public void setShortCode(String shortCode) { this.shortCode = shortCode; } @Override public String toString(){ return name + "::" + shortCode; } }
Пример программы Apache POI для чтения файла excel в список стран выглядит следующим образом.
Пример программы Apache POI для чтения файла excel в список стран выглядит следующим образом.
package com.journaldev.excel.read; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadExcelFileToList { public static List readExcelData(String fileName) { List countriesList = new ArrayList(); try { //Create the input stream from the xlsx/xls file FileInputStream fis = new FileInputStream(fileName); //Create Workbook instance for xlsx/xls file input stream Workbook workbook = null; if(fileName.toLowerCase().endsWith("xlsx")){ workbook = new XSSFWorkbook(fis); }else if(fileName.toLowerCase().endsWith("xls")){ workbook = new HSSFWorkbook(fis); } //Get the number of sheets in the xlsx file int numberOfSheets = workbook.getNumberOfSheets(); //loop through each of the sheets for(int i=0; i < numberOfSheets; i++){ //Get the nth sheet from the workbook Sheet sheet = workbook.getSheetAt(i); //every sheet has rows, iterate over them Iterator rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { String name = ""; String shortCode = ""; //Get the row object Row row = rowIterator.next(); //Every row has columns, get the column iterator and iterate over them Iterator cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { //Get the Cell object Cell cell = cellIterator.next(); //check the cell type and process accordingly switch(cell.getCellType()){ case Cell.CELL_TYPE_STRING: if(shortCode.equalsIgnoreCase("")){ shortCode = cell.getStringCellValue().trim(); }else if(name.equalsIgnoreCase("")){ //2nd column name = cell.getStringCellValue().trim(); }else{ //random data, leave it System.out.println("Random data::"+cell.getStringCellValue()); } break; case Cell.CELL_TYPE_NUMERIC: System.out.println("Random data::"+cell.getNumericCellValue()); } } //end of cell iterator Country c = new Country(name, shortCode); countriesList.add(c); } //end of rows iterator } //end of sheets for loop //close file input stream fis.close(); } catch (IOException e) { e.printStackTrace(); } return countriesList; } public static void main(String args[]){ List list = readExcelData("Sample.xlsx"); System.out.println("Country List\n"+list); } }
Программа очень проста для понимания и содержит следующие шаги:
- Создайте
Экземпляр рабочей книги
на основе типа файла.XSSFWorkbook
для формата xlsx иHSSFWorkbook
для формата xls. Обратите внимание, что мы могли бы создать класс-оболочку с заводским шаблоном , чтобы получить экземпляр книги на основе имени файла. - Используйте workbook getNumberOfSheets (), чтобы получить количество листов, а затем используйте цикл for для анализа каждого из листов. Получите экземпляр
Sheet
с помощью метода getSheetAt(int i). - Получите
Строку
итератор, а затемЯчейку
итератор, чтобы получить объект ячейки. POI Apache использует шаблон итератора здесь. - Используйте переключатель для считывания типа ячейки и соответствующей обработки.
Теперь, когда мы запускаем примерную программу Apache POI, она выдает следующий вывод на консоль.
Random data::1.0 Random data::2.0 Random data::3.0 Random data::4.0 Country List [India::IND, Afghanistan::AFG, United States of America::USA, Anguilla::AIA, Denmark ::DNK, Dominican Republic ::DOM, Algeria ::DZA, Ecuador ::ECU]
Пример POI Apache – Запись файла Excel
Запись файла excel в apache POI аналогична чтению, за исключением того, что здесь мы сначала создаем книгу. Затем задайте значения листов, строк и ячеек и используйте FileOutputStream для записи в файл. Давайте напишем простой пример POI apache, в котором мы будем использовать список стран из приведенного выше метода для сохранения в другой файл на одном листе.
Запись файла excel в apache POI аналогична чтению, за исключением того, что здесь мы сначала создаем книгу. Затем задайте значения листов, строк и ячеек и используйте FileOutputStream для записи в файл. Давайте напишем простой пример POI apache, в котором мы будем использовать список стран из приведенного выше метода для сохранения в другой файл на одном листе.
package com.journaldev.excel.read; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WriteListToExcelFile { public static void writeCountryListToFile(String fileName, List countryList) throws Exception{ Workbook workbook = null; if(fileName.endsWith("xlsx")){ workbook = new XSSFWorkbook(); }else if(fileName.endsWith("xls")){ workbook = new HSSFWorkbook(); }else{ throw new Exception("invalid file name, should be xls or xlsx"); } Sheet sheet = workbook.createSheet("Countries"); Iterator iterator = countryList.iterator(); int rowIndex = 0; while(iterator.hasNext()){ Country country = iterator.next(); Row row = sheet.createRow(rowIndex++); Cell cell0 = row.createCell(0); cell0.setCellValue(country.getName()); Cell cell1 = row.createCell(1); cell1.setCellValue(country.getShortCode()); } //lets write the excel data to file now FileOutputStream fos = new FileOutputStream(fileName); workbook.write(fos); fos.close(); System.out.println(fileName + " written successfully"); } public static void main(String args[]) throws Exception{ List list = ReadExcelFileToList.readExcelData("Sample.xlsx"); WriteListToExcelFile.writeCountryListToFile("Countries.xls", list); } }
Когда я выполняю пример программы apache POI, сгенерированный файл excel выглядит так, как показано на рисунке ниже.
Пример POI Apache – Прочитайте Формулу Excel
Иногда нам нужно обрабатывать сложные файлы excel с формулами, давайте рассмотрим простой пример apache POI, чтобы прочитать формулу ячейки с ее значением.
Иногда нам нужно обрабатывать сложные файлы excel с формулами, давайте рассмотрим простой пример apache POI, чтобы прочитать формулу ячейки с ее значением.
package com.journaldev.excel.read; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadExcelFormula { public static void readExcelFormula(String fileName) throws IOException{ FileInputStream fis = new FileInputStream(fileName); //assuming xlsx file Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); Iterator rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch(cell.getCellType()){ case Cell.CELL_TYPE_NUMERIC: System.out.println(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_FORMULA: System.out.println("Cell Formula="+cell.getCellFormula()); System.out.println("Cell Formula Result Type="+cell.getCachedFormulaResultType()); if(cell.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC){ System.out.println("Formula Value="+cell.getNumericCellValue()); } } } } } public static void main(String args[]) throws IOException { readExcelFormula("FormulaMultiply.xlsx"); } }
Когда мы выполняем приведенный выше пример программы apache poi, мы получаем следующий вывод.
1.0 2.0 3.0 4.0 Cell Formula=A1*A2*A3*A4 Cell Formula Result Type=0 Formula Value=24.0
Пример POI Apache – Формула записи в Excel
Иногда нам нужно выполнить некоторые вычисления, а затем записать значения ячеек. Мы можем использовать формулы excel для выполнения этого расчета, и это сделает его более точным, потому что значения изменятся, если будут изменены значения ячеек, используемые в расчетах.
Давайте рассмотрим простой пример записи файла excel с формулами с помощью api apache poi.
Давайте рассмотрим простой пример записи файла excel с формулами с помощью api apache poi.
package com.journaldev.excel.read; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WriteExcelWithFormula { public static void writeExcelWithFormula(String fileName) throws IOException{ Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Numbers"); Row row = sheet.createRow(0); row.createCell(0).setCellValue(10); row.createCell(1).setCellValue(20); row.createCell(2).setCellValue(30); //set formula cell row.createCell(3).setCellFormula("A1*B1*C1"); //lets write to file FileOutputStream fos = new FileOutputStream(fileName); workbook.write(fos); fos.close(); System.out.println(fileName + " written successfully"); } public static void main(String[] args) throws IOException { writeExcelWithFormula("Formulas.xlsx"); } }
Файл excel, созданный с помощью приведенного выше примера программы Apache POI API, выглядит следующим образом.
Это все в учебнике Apache POI по работе с файлами Excel, ознакомьтесь с методами классов Apache POI, чтобы узнать больше об их функциях.
Ссылки : Руководство для разработчиков POI Apache
Learn to read excel, write excel, evaluate formula cells and apply custom formatting to the generated excel files using Apache POI library with examples.
If we are building software for the HR or Finance domain, there is usually a requirement for generating excel reports across management levels. Apart from reports, we can also expect some input data for the applications coming in the form of excel sheets and the application is expected to support this requirement.
Apache POI is a well-trusted library among many other open-source libraries to handle such usecases involving excel files. Please note that, in addition, we can read and write MS Word and MS PowerPoint files also using the Apache POI library.
This Apache POI tutorial will discuss some everyday excel operations in real-life applications.
1. Maven
If we are working on a maven project, we can include the Apache POI dependencies in pom.xml
file using this:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
2. Core Classes in POI Library
-
HSSF, XSSF and XSSF classes
Apache POI main classes usually start with either HSSF, XSSF or SXSSF.
- HSSF – is the POI Project’s pure Java implementation of the Excel 97(-2007) file format. e.g., HSSFWorkbook, HSSFSheet.
- XSSF – is the POI Project’s pure Java implementation of the Excel 2007 OOXML (.xlsx) file format. e.g., XSSFWorkbook, XSSFSheet.
- SXSSF (since 3.8-beta3) – is an API-compatible streaming extension of XSSF to be used when huge spreadsheets have to be produced and heap space is limited. e.g., SXSSFWorkbook, SXSSFSheet. SXSSF achieves its low memory footprint by limiting access to the rows within a sliding window, while XSSF gives access to all rows in the document.
-
Row and Cell
Apart from the above classes, Row and Cell interact with a particular row and a particular cell in an excel sheet.
-
Styling Related Classes
A wide range of classes like CellStyle, BuiltinFormats, ComparisonOperator, ConditionalFormattingRule, FontFormatting, IndexedColors, PatternFormatting, SheetConditionalFormatting etc. are used when you have to add formatting to a sheet, primarily based on some rules.
-
FormulaEvaluator
Another helpful class FormulaEvaluator is used to evaluate the formula cells in an excel sheet.
3. Write to an Excel File
I am taking this example first so we can reuse the excel sheet created by this code in further examples.
Writing excel using POI is very simple and involves the following steps:
- Create a workbook
- Create a sheet in the workbook
- Create a row in the sheet
- Add cells to the sheet
- Repeat steps 3 and 4 to write more data
It seems very simple, right? Let’s have a look at the code doing these steps.
Java program to write an excel file using Apache POI library.
//Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//Create a blank sheet
XSSFSheet sheet = workbook.createSheet("Employee Data");
//Prepare data to be written as an Object[]
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("1", new Object[] {"ID", "NAME", "LASTNAME"});
data.put("2", new Object[] {1, "Amit", "Shukla"});
data.put("3", new Object[] {2, "Lokesh", "Gupta"});
data.put("4", new Object[] {3, "John", "Adwards"});
data.put("5", new Object[] {4, "Brian", "Schultz"});
//Iterate over data and write to sheet
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
Row row = sheet.createRow(rownum++);
Object [] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr)
{
Cell cell = row.createCell(cellnum++);
if(obj instanceof String)
cell.setCellValue((String)obj);
else if(obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
}
//Write the workbook in file system
try {
FileOutputStream out = new FileOutputStream(new File("howtodoinjava_demo.xlsx"));
workbook.write(out);
out.close();
System.out.println("howtodoinjava_demo.xlsx written successfully on disk.");
}
catch (Exception e) {
e.printStackTrace();
}
See Also: Appending Rows to Excel
4. Reading an Excel File
Reading an excel file using POI is also very simple if we divide this into steps.
- Create a workbook instance from an excel sheet
- Get to the desired sheet
- Increment row number
- Iterate over all cells in a row
- Repeat steps 3 and 4 until all data is read
Let’s see all the above steps in the code. I am writing the code to read the excel file created in the above example. It will read all the column names and the values in it – cell by cell.
Java program to read an excel file using Apache POI library.
FileInputStream file = new FileInputStream(new File("howtodoinjava_demo.xlsx"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println("");
}
file.close();
Program Output:
ID NAME LASTNAME
1.0 Amit Shukla
2.0 Lokesh Gupta
3.0 John Adwards
4.0 Brian Schultz
See Also: Apache POI – Read an Excel File using SAX Parser
5. Add and Evaluate Formula Cells
When working on complex excel sheets, we encounter many cells with formulas to calculate their values. These are formula cells. Apache POI also has excellent support for adding formula cells and evaluating already present formula cells.
Let’s see one example of how to add formula cells in excel?
The sheet has four cells in a row and the fourth one in the multiplication of all the previous 3 rows. So the formula will be: A2*B2*C2 (in the second row)
Java program to add formulas in an excel file using Apache POI library.
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Calculate Simple Interest");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Pricipal");
header.createCell(1).setCellValue("RoI");
header.createCell(2).setCellValue("T");
header.createCell(3).setCellValue("Interest (P r t)");
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue(14500d);
dataRow.createCell(1).setCellValue(9.25);
dataRow.createCell(2).setCellValue(3d);
dataRow.createCell(3).setCellFormula("A2*B2*C2");
try {
FileOutputStream out = new FileOutputStream(new File("formulaDemo.xlsx"));
workbook.write(out);
out.close();
System.out.println("Excel with foumula cells written successfully");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Similarly, we want to read a file with formula cells and use the following logic to evaluate formula cells.
Java program to evaluate formulas in an excel file using Apache POI library.
FileInputStream file = new FileInputStream(new File("formulaDemo.xlsx"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type after eveluating formulae
//If it is formula cell, it will be evaluated otherwise no change will happen
switch (evaluator.evaluateInCell(cell).getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "tt");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "tt");
break;
case Cell.CELL_TYPE_FORMULA:
//Not again
break;
}
}
System.out.println("");
}
file.close();
Program Output:
Pricipal RoI T Interest (P r t)
14500.0 9.25 3.0 402375.0
6. Formatting the Cells
So far we have seen examples of reading/writing and excel files using Apache POI. But, when creating a report in an excel file, it is essential to add formatting on cells that fit into any pre-determined criteria.
This formatting can be a different coloring based on a specific value range, expiry date limit etc.
In the below examples, we are taking a couple of such cell formatting examples for various purposes.
6.1. Cell value in a specific range
This code will color any cell in a range whose value is between a configured range. [e.g., between 50 and 70]
static void basedOnValue(Sheet sheet)
{
//Creating some random values
sheet.createRow(0).createCell(0).setCellValue(84);
sheet.createRow(1).createCell(0).setCellValue(74);
sheet.createRow(2).createCell(0).setCellValue(50);
sheet.createRow(3).createCell(0).setCellValue(51);
sheet.createRow(4).createCell(0).setCellValue(49);
sheet.createRow(5).createCell(0).setCellValue(41);
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
//Condition 1: Cell Value Is greater than 70 (Blue Fill)
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.GT, "70");
PatternFormatting fill1 = rule1.createPatternFormatting();
fill1.setFillBackgroundColor(IndexedColors.BLUE.index);
fill1.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
//Condition 2: Cell Value Is less than 50 (Green Fill)
ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.LT, "50");
PatternFormatting fill2 = rule2.createPatternFormatting();
fill2.setFillBackgroundColor(IndexedColors.GREEN.index);
fill2.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
CellRangeAddress[] regions = {
CellRangeAddress.valueOf("A1:A6")
};
sheetCF.addConditionalFormatting(regions, rule1, rule2);
}
6.2. Highlight Duplicate Values
Highlight all cells which have duplicate values in observed cells.
static void formatDuplicates(Sheet sheet) {
sheet.createRow(0).createCell(0).setCellValue("Code");
sheet.createRow(1).createCell(0).setCellValue(4);
sheet.createRow(2).createCell(0).setCellValue(3);
sheet.createRow(3).createCell(0).setCellValue(6);
sheet.createRow(4).createCell(0).setCellValue(3);
sheet.createRow(5).createCell(0).setCellValue(5);
sheet.createRow(6).createCell(0).setCellValue(8);
sheet.createRow(7).createCell(0).setCellValue(0);
sheet.createRow(8).createCell(0).setCellValue(2);
sheet.createRow(9).createCell(0).setCellValue(8);
sheet.createRow(10).createCell(0).setCellValue(6);
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
// Condition 1: Formula Is =A2=A1 (White Font)
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("COUNTIF($A$2:$A$11,A2)>1");
FontFormatting font = rule1.createFontFormatting();
font.setFontStyle(false, true);
font.setFontColorIndex(IndexedColors.BLUE.index);
CellRangeAddress[] regions = {
CellRangeAddress.valueOf("A2:A11")
};
sheetCF.addConditionalFormatting(regions, rule1);
sheet.getRow(2).createCell(1).setCellValue("<== Duplicates numbers in the column are highlighted. " +
"Condition: Formula Is =COUNTIF($A$2:$A$11,A2)>1 (Blue Font)");
}
6.3. Alternate Color Rows in Different Colors
A simple code to color each alternate row in a different color.
static void shadeAlt(Sheet sheet) {
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
// Condition 1: Formula Is =A2=A1 (White Font)
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("MOD(ROW(),2)");
PatternFormatting fill1 = rule1.createPatternFormatting();
fill1.setFillBackgroundColor(IndexedColors.LIGHT_GREEN.index);
fill1.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
CellRangeAddress[] regions = {
CellRangeAddress.valueOf("A1:Z100")
};
sheetCF.addConditionalFormatting(regions, rule1);
sheet.createRow(0).createCell(1).setCellValue("Shade Alternating Rows");
sheet.createRow(1).createCell(1).setCellValue("Condition: Formula Is =MOD(ROW(),2) (Light Green Fill)");
}
6.4. Color amounts that are going to expire in the next 30 days
A handy code for financial projects which keeps track of deadlines.
static void expiryInNext30Days(Sheet sheet)
{
CellStyle style = sheet.getWorkbook().createCellStyle();
style.setDataFormat((short)BuiltinFormats.getBuiltinFormat("d-mmm"));
sheet.createRow(0).createCell(0).setCellValue("Date");
sheet.createRow(1).createCell(0).setCellFormula("TODAY()+29");
sheet.createRow(2).createCell(0).setCellFormula("A2+1");
sheet.createRow(3).createCell(0).setCellFormula("A3+1");
for(int rownum = 1; rownum <= 3; rownum++) sheet.getRow(rownum).getCell(0).setCellStyle(style);
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
// Condition 1: Formula Is =A2=A1 (White Font)
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("AND(A2-TODAY()>=0,A2-TODAY()<=30)");
FontFormatting font = rule1.createFontFormatting();
font.setFontStyle(false, true);
font.setFontColorIndex(IndexedColors.BLUE.index);
CellRangeAddress[] regions = {
CellRangeAddress.valueOf("A2:A4")
};
sheetCF.addConditionalFormatting(regions, rule1);
sheet.getRow(0).createCell(1).setCellValue("Dates within the next 30 days are highlighted");
}
I am ending this apache poi tutorial here to keep the post within a limit.
7. Conclusion
In this tutorial, we learned to read excel, write excel, set and evaluate formula cells, and format the cells with color codings using the Apache POI library.
Happy Learning !!
Source Code on Github
Apache POI is an open-source java library to create and manipulate various file formats based on Microsoft Office. Using POI, one should be able to perform create, modify and display/read operations on the following file formats. For Example, Java doesn’t provide built-in support for working with excel files, so we need to look for open-source APIs for the job.
Apache POI provides Java API for manipulating various file formats based on the Office Open XML (OOXML) standard and OLE2 standard from Microsoft. Apache POI releases are available under the Apache License (V2.0).
Some important features of Apache POI are as follows:
- Apache POI provides stream-based processing, that is suitable for large files and requires less memory.
- Apache POI is able to handle both XLS and XLSX formats of spreadsheets.
- Apache POI contains HSSF implementation for Excel ’97(-2007) file format i.e XLS.
- Apache POI XSSF implementation should be used for Excel 2007 OOXML (.xlsx) file format.
- Apache POI HSSF and XSSF API provide mechanisms to read, write or modify excel spreadsheets.
- Apache POI also provides SXSSF API that is an extension of XSSF to work with very large excel sheets.
- SXSSF API requires less memory and is suitable when working with very large spreadsheets and heap memory is limited.
- There are two models to choose from – the event model and the user model. The event model requires less memory because the excel file is read in tokens and requires processing. The user model is more object-oriented and easy to use.
- Apache POI provides excellent support for additional excel features such as working with Formulas, creating cell styles by filling colors and borders, fonts, headers and footers, data validations, images, hyperlinks, etc.
Commonly used components of Apache POI
- HSSF (Horrible Spreadsheet Format): It is used to read and write xls format of MS-Excel files.
- XSSF (XML Spreadsheet Format): It is used for xlsx file format of MS-Excel.
- POIFS (Poor Obfuscation Implementation File System): This component is the basic factor of all other POI elements. It is used to read different files explicitly.
- HWPF (Horrible Word Processor Format): It is used to read and write doc extension files of MS-Word.
- HSLF (Horrible Slide Layout Format): It is used for read, create, and edit PowerPoint presentations.
Environment
Apache POI runtime dependencies: If you are working on a Maven project, you can include the POI dependency in the pom.xml file using the below set of lines of code.
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency>
Now, in order to add this in eclipse, go to
Window -> Show View -> Other -> Maven -> Maven Repositories
If you are not using maven, then you can download maven jar files from the POI download page. Include the following jar files minimum to run the sample code:
- poi-3.10-FINAL.jar
- poi-ooxml-3.10-FINAL.jar
- commons-codec-1.5.jar
- poi-ooxml-schemas-3.10-FINAL.jar
- xml-apis-1.0.b2.jar
- stax-api-1.0.1.jar
- xmlbeans-2.3.0.jar
- dom4j-1.6.1.jar
Follow this Link to see how to add external jars in eclipse.
This article is contributed by Pankaj Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Last Updated :
11 Jul, 2022
Like Article
Save Article