Содержание
- Apache POI, взаимодействие с Excel
- Компоненты Apache POI
- Описание компонентов
- Список компонентов
- Подключение Apache POI к проекту
- Классы и методы Apache POI для работы с файлами Excel
- Рабочая книга HSSFWorkbook, XSSFWorkbook
- Конструкторы класса HSSFWorkbook
- Конструкторы класса XSSFWorkbook
- Основные методы HSSFWorkbook, XSSFWorkbook
- Классы листов книги, HSSFSheet, XSSFSheet
- Основные методы классов работы с листами
- Классы строк HSSFRow, XSSFRow
- Основные методы классов HSSFRow, XSSFRow
- Классы ячеек HSSFCell, XSSFCell
- Основные методы классов HSSFCell, XSSFCell
- Классы стилей ячеек HSSFCellStyle, XSSFCellStyle
- Классы шрифтов HSSFFont, XSSFFont
- Работа с Microsoft Excel в Java
- Работа с Microsoft Excel в Java
- 1. Вступление
- 2. Maven Зависимости
- 3. Apache POI
- 3.1. Чтение из Excel
- 3.2. Запись в Excel
- 4. JExcel
- 4.1. Чтение из Excel
- 4.2. Запись в Excel
- 5. Заключение
Apache POI, взаимодействие с Excel
Apache POI представляет собой API, который позволяет использовать файлы MS Office в Java приложениях. Данная библиотека разрабатывается и распространяется Apache Software Foundation и носит открытый характер. Apache POI включает классы и методы для чтения и записи информации в документы MS Office.
Компоненты Apache POI
Описание компонентов
HSSF | Horrible Spreadsheet Format | Компонент чтения и записи файлов MS-Excel, формат XLS |
XSSF | XML Spreadsheet Format | Компонент чтения и записи файлов MS-Excel, формат XLSX |
HPSF | Horrible Property Set Format | Компонент получения наборов свойств файлов MS-Office |
HWPF | Horrible Word Processor Format | Компонент чтения и записи файлов MS-Word, формат DOC |
XWPF | XML Word Processor Format | Компонент чтения и записи файлов MS-Word, формат DOCX |
HSLF | Horrible Slide Layout Format | Компонент чтения и записи файлов PowerPoint, формат PPT |
XSLF | XML Slide Layout Format | Компонент чтения и записи файлов PowerPoint, формат PPTX |
HDGF | Horrible DiaGram Format | Компонент работы с файлами MS-Visio, формат VSD |
XDGF | XML DiaGram Format | Компонент работы с файлами MS-Visio, формат VSDX |
Список компонентов
Наименование (артeфакт) | Необходимые компоненты |
---|---|
poi | commons-logging, commons-codec, commons-collections, log4j |
poi-scratchpad | poi |
poi-ooxml | poi, poi-ooxml-schemas |
poi-ooxml-schemas | xmlbeans |
poi-examples | poi, poi-scratchpad, poi-ooxml |
ooxml-schemas | xmlbeans |
ooxml-security | xmlbeans |
Подключение Apache POI к проекту
Для подключения Apache POI к проекту необходимо скачать соответствующие библиотеки с официального сайта https://poi.apache.org/download.html.
Если в проекте используется фреймворк maven, то необходимо установить одну из следующих зависимостей (версия может быть более новой) :
На странице описания примера чтения файлов 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
preservenodes является необязательным параметром, который определяет необходимость сохранения узлов типа макросы.
Конструкторы класса XSSFWorkbook
Основные методы 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 включают свойства и методы работы с ячейками таблицы.
Основные методы классов 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
Ниже в качестве примера представлен метод, формирующий стиль ячейки, в которой :
- текст центрируется по вертикали и горизонтали;
- обрамление ячейки представляет тонкую черную линию по периметру;
- текст переносится на следующую строку (не ячейку), если не вмещается в размер ячейки.
Метод setWrapText позволяет определить флаг переноса текста в ячейке согласно ее размеру (ширине). Чтобы перенести текст принудительно, можно в текстовой строке установить символы CRCL, например «Разделительrnтекста».
Классы шрифтов HSSFFont, XSSFFont
С полным перечнем всех свойств и методов класса XSSFFont можно познакомиться на странице http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Font.html
Ниже в качестве примера представлен метод, формирующий шрифт типа «Times New Roman» :
Примеры создания файлов Excel и определение стилей ячеек рассмотрены здесь.
Источник
Работа с Microsoft Excel в Java
Работа с Microsoft Excel в Java
1. Вступление
В этом руководстве мы продемонстрируем использованиеApache POI and JExcel APIs for working with Excel spreadsheets.
Обе библиотеки могут использоваться для динамического чтения, записи и изменения содержимого электронной таблицы Excel и обеспечения эффективного способа интеграции Microsoft Excel в приложение Java.
2. Maven Зависимости
Для начала нам нужно будет добавить следующие зависимости в наш файлpom.xml:
Последние версииpoi-ooxml иjxls-jexcel можно загрузить с Maven Central.
3. Apache POI
Apache POI library supports both .xls and .xlsx files и — более сложная библиотека, чем другие библиотеки Java, для работы с файлами Excel.
Он предоставляет интерфейсWorkbook для моделирования файлаExcel, а также интерфейсыSheet,Row иCell, которые моделируют элементы файла Excel, как а также реализации каждого интерфейса для обоих форматов файлов.
При работе с новым форматом файлов.xlsx вы должны использовать классыXSSFWorkbook, XSSFSheet, XSSFRow, and XSSFCell.
Для работы со старым форматом.xls используйте классыHSSFWorkbook, HSSFSheet, HSSFRow, иHSSFCell.
3.1. Чтение из Excel
Давайте создадим метод, который открывает файл.xlsx, а затем считывает содержимое с первого листа файла.
Способ чтения содержимого ячейки варьируется в зависимости от типа данных в ячейке. Тип содержимого ячейки можно определить с помощью методаgetCellTypeEnum() интерфейсаCell.
Во-первых, давайте откроем файл из заданного места:
Затем извлечем первый лист файла и переберем каждую строку:
Apache POI has different methods for reading each type of data. Давайте расширим содержание каждого случая переключения выше.
Когда значение перечисления типа ячейки равноSTRING, содержимое будет считываться с использованием методаgetRichStringCellValue() интерфейсаCell:
Ячейки с типом содержимогоNUMERIC могут содержать дату или число и читаются следующим образом:
Для значенийBOOLEAN у нас есть методgetBooleanCellValue():
А когда тип ячейкиFORMULA, мы можем использовать методgetCellFormula():
3.2. Запись в Excel
Apache POI использует те же интерфейсы, что и в предыдущем разделе, для записи в файл Excel и имеет лучшую поддержку стилей, чем JExcel.
Давайте создадим метод, который записывает список людей на лист с названием“Persons”. Сначала мы создадим и стилизуем строку заголовка, содержащую ячейки“Name” и“Age”:
Затем давайте напишем содержимое таблицы в другом стиле:
Наконец, давайте запишем содержимое в файл‘temp.xlsx’ в текущем каталоге и закроем книгу:
Давайте протестируем вышеуказанные методы в тестеJUnit, который записывает содержимое в файлtemp.xlsx, а затем читает тот же файл, чтобы убедиться, что он содержит текст, который мы написали:
4. JExcel
Библиотека JExcel — это легкая библиотека, имеющая то преимущество, что ее проще использовать, чем Apache POI, но с недостатком, заключающимся в том, что она обеспечивает только поддержку обработки файлов Excel в формате.xls (1997-2003).
На данный момент файлы.xlsx не поддерживаются.
4.1. Чтение из Excel
Для работы с файлами Excel эта библиотека предоставляет серию классов, которые представляют различные части файла Excel. The Workbook class represents the entire collection of sheets. КлассSheet представляет отдельный лист, а классCell представляет одну ячейку электронной таблицы.
Давайте напишем метод, который создает книгу из указанного файла Excel, получает первый лист файла, затем просматривает его содержимое и добавляет каждую строку вHashMap:
4.2. Запись в Excel
Для записи в файл Excel библиотека JExcel предлагает классы, аналогичные использованным выше, которые моделируют файл электронной таблицы:WritableWorkbook,WritableSheet иWritableCell.
The WritableCell class has subclasses corresponding to the different types of content, которое можно записать:Label,DateTime,Number,Boolean,Blank иFormula.
Эта библиотека также обеспечивает поддержку основных форматов, таких как управление шрифтом, цветом и шириной ячейки.
Давайте напишем метод, который создает книгу с именем‘temp.xls’ в текущем каталоге, а затем записывает то же содержимое, которое мы написали в разделе Apache POI.
Сначала создадим книгу:
Затем давайте создадим первый лист и напишем заголовок файла Excel, содержащий ячейки“Name” и“Age”:
В новом стиле запишем содержимое созданной таблицы:
Очень важно не забыть записать в файл и закрыть его в конце, чтобы его могли использовать другие процессы, используя методыwrite() иclose() классаWorkbook:
5. Заключение
В этом руководстве показано, как использовать APIApache POI иJExcel API для чтения и записи файла Excel из программы Java.
Полный исходный код этой статьи можно найти в папкеGitHub project.
Источник
Интеграция электронных таблиц MS Excel в Java.
Описание:
В современном мире очень много случаев, при которых необходимо интегрировать MS
Excel с Java. Например, при разработке Enterprise-приложения в некой финансовой
сфере, вам необходимо предоставить счет для заинтересованных лиц, а проще всего
выставлять счет на MS Excel.
Обзор существующих API MS Excel для Java:
Рассмотрим основные API:
-
Docx4j — это API с открытым исходным кодом, для создания и манипулирования документами формата Microsoft Open XML, к которым отросятся Word docx, Powerpoint pptx, Excel xlsx файлы. Он очень похож на Microsoft OpenXML SDK, но реализован на языке Java. Docx4j использует JAXB архитектуру для создания представления объекта в памяти. Docx4j акцентирует свое внимание на всесторонней поддержке заявленного формата, но от пользователя данного API требуется знание и понимание технологии JAXB и структуры Open XML.
-
Apache POI — это набор API с открытым исходным кодом, который предлагает определенные функции для чтения и записи различных документов, базирующихся на Office Open XML стандартах (OOXML) и Microsoft OLE2 форматe документов (OLE2). OLE2 файлы включают большинство Microsoft Office форматов, таких как doc, xls, ppt. Office Open XML формат это новый стандарт базирующийся на XML разметке, и используется в файлах Microsoft office 2007 и старше.
-
Aspose for Java — набор платных Java APIs, которые помогают разработчикам в работе с популярными форматами бизнес файлов, такими как документы Microsoft Word, таблицы Microsoft Excel, презентации Microsoft PowerPoint, PDF файлы Adobe Acrobat, emails, изображения, штрих-коды и оптические распознавания символов.
Каждое API проектируется для того, чтобы выполнять широкий спектр создания документов, различные манипуляции и преобразования быстро и легко, экономя время и позволяя разработчикам успешно программировать. Ни один API с открытым исходным кодом не имеет одной и той же комплексной поддержки функций.
Все Aspose’s APIs используют простую объектную модель документа, а одно API предназначено для работы с набором связанных форматов. Aspose’s Microsoft Office APIs, Aspose.Cells, Aspose.Words, Aspose.Slides, Aspose.Email, и Aspose.Tasks легки в работе, эффективны, надежны и независимы от других библиотек.
Преимуществом APIs с открытым исходным кодом является то, что они бесплатны и каждый может настроить их под свои задачи и цели. Это очень удобно, если у пользователя есть достаточно времени и ресурсов. Однако данные APIs не всегда имеют поддержку или документацию, и поддерживают небольшое количество функций и вариантов. Этот недостаток стоит разработчикам времени, и сокращает надежность их приложений. К преимуществам проприетарных (коммерческих) API можно отнести комплексную поддержку функционала с подробной документацией, регулярное обновление, гарантию отсутствия ошибок и обратную связь с разработчиками APIs.
В данной программе будем использовать Apache POI
Компоненты Apache POI
Описание компонетов
HSSF — Horrible Spreadsheet Format — Компонент чтения и записи файлов MS-Excel, формат XLS
XSSF — XML Spreadsheet Format Компонент — чтения и записи файлов MS-Excel, формат XLSX
HPSF — Horrible Property Set Format — Компонент получения наборов свойств файлов MS-Office
HWPF — Horrible Word Processor Format — Компонент чтения и записи файлов MS-Word, формат DOC
XWPF — XML Word Processor Format — Компонент чтения и записи файлов MS-Word, формат DOCX
HSLF — Horrible Slide Layout Format — Компонент чтения и записи файлов PowerPoint, формат PPT
XSLF — XML Slide Layout Format — Компонент чтения и записи файлов PowerPoint, формат PPTX
HDGF — Horrible DiaGram Format — Компонент работы с файлами MS-Visio, формат VSD
XDGF — XML DiaGram Format — Компонент работы с файлами MS-Visio, формат VSDX
Список компонентов
Наименование(артефакт) | Необходимые компоненты |
---|---|
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 |
В данной работе рассматриваются следующие классы, используемые для работы с файлами 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 включают свойства и методы работы с ячейками таблицы.
Основные методы классов 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() | Определение активности ячейки |
- org.apache.poi.hssf.usermodel.HSSFCell
- org.apache.poi.xssf.usermodel.XSSFCell
С полным перечнем всех методов класса 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, например «Разделительrnтекста».
Классы шрифтов 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));
Ссылки на полезные ресурсы
- https://habr.com/post/56817/
- https://poi.apache.org/apidocs/index.html — официальная документация
- http://java-online.ru/java-excel.xhtml
Задание:
В данной работе вы должны реализовать следующее:
-
Чтение с ячейки MS Excel в Java
-
Запись с Java в MS Excel
Инструкция
- Для обращения к MS Excel версии до 2003 включительно года с Java используется класс
HSSFWorkbook
- Для обращения к MS Excel версии 2007 и позднее с Java используется класс
XSSFWorkbook
- При операциях Обновление или Запись необходимо, чтобы MS Excel был закрыт.
Чтение ячейки с MS Excel
Чтобы считать данные с xlsx
необходимо исполнить следующие шаги:
//filePath - это путь до MS Excel Workbook book = new XSSFWorkbook(new FileInputStream(filePath); //считывается лист по индексу sheet_index. sheet_index начинается с 0 Sheet sheet = book.getSheetAt(sheet_index); //считывается row по индексу row_index. row_index начинается с 0 Row row = sheet.getRow(row_index); //считывается cell по индексу cell_index. cell_index начинается с 0 Cell cell = sheet.getCell(cell_index);
Запись в ячейку MS Excel
Workbook book = new XSSFWorkbook(); //name - имя листа Sheet sheet = book.createSheet(name); Row row = sheet.createRow(i); Cell cell = row.createCell(j); FileInputStream fileOut = new FileInputStream(filePath); book.write(fileOut); fileOut.close();
Обновление ячейки в существующем листе MS Excel
Workbook workbook = new XSSFWorkbook(new FileInputStream(filePath)); Sheet sheet = workbook.getSheetAt(i); Row row = sheet.getRow(j); Cell cell = row.getCell(k); cell.setCellValue(value);
Подготовка: загрузка библиотек и зависимостей
Чтобы использовать apache POI, вам нужно скачать jar файлы и добавить их через Intellij IDEA вручную, или вы можете предоставить это Maven.
Во втором случае вам нужно просто добавить следующие две зависимости в pom.xml:
<dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.12</version> </dependency> </dependencies>
Самое удобное в Maven — что он загрузит не только указанные poi.jar и poi-ooxml.jar, но и все jar файлы, которые используются внутри, то есть xmlbeans-2.6.0.jar,
stax-api-1.0.1.jar, poi-ooxml-schemas-3.12.jar и commons-codec-1.9.jar
Выполнение:
-
Создать проект на java с помощью maven.
-
Следовать инструкции «Подготовка:…» описанная выше.
-
Создать Excel файл в корневой папке проекта.
-
Записать в A1 и A2 любые целые числа.
-
Сохранить Excel файл.
-
Закрыть Excel файл. (ОБЯЗЕТЬНОЕ УСЛОВИЕ, т.к. apache POI API может работать только с закрытым фалом)
-
В папке src/main/java создать класс IOCell
- Создать поле
- Создать конструктор
IOCell(String filePath) { this.filePath = new File(filePath)}
- Создать метод для чтения c Excel в Java
public Cell getCell(int sheet, int row, int column) { Workbook workbook = null; try (FileInputStream file = new FileInputStream(filePath)) { workbook = new XSSFWorkbook(file); } catch (FileNotFoundException e) { System.out.println("file is not exists"); } catch (IOException e) { e.printStackTrace(); } return workbook.getSheetAt(sheet).getRow(row).getCell(column); }
- Создать метод для записи с Java в Excel
public void setCell(int row, int column, double val) { Workbook workbook = null; try (FileInputStream file = new FileInputStream(filePath)) { workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheetAt(0); sheet.getRow(row).getCell(column).setCellValue(val); } catch (IOException e) { e.printStackTrace(); } try (OutputStream fileOut = new FileOutputStream(filePath)) { workbook.write(fileOut); } catch (FileNotFoundException e) { System.out.println("file is not exist AAAA"); } catch (IOException e) { e.printStackTrace(); } }
-
В папке src/main/java создать класс Main
- Создать поле
private static final String filePath = "NAME_OF_EXCEL_FILE";
- Создать метод
public static void main(String[] args) { IOCell ioCell = new IOCell(filePath); Cell x = ioCell.getCell(0, 1, 0); Cell y = ioCell.getCell(0, 1, 1); System.out.println("first number: " + x.toString()); System.out.println("second number: " + y.toString()); //Write x * y ioCell.setCell(4, 0, x.getNumericCellValue() * y.getNumericCellValue()); //Write x + y ioCell.setCell(4, 1, x.getNumericCellValue() + y.getNumericCellValue()); System.out.println("Interactions is complete successfully"); }
-
Запускаем приложение и смотрим в консоль.
Все привет, в этой статье опишу исчерпывающие примеры работы с excel на языке C#.
Для начала работы нам необходимо подключить библиотеку COM как на рисунке ниже:
Для этого добавляем ссылку в проект, надеюсь вы знаете как это делается) Выбираем пункт COM ищем библиотеку Microsoft Excel 16.0 Object Library ставим галочку и жмем Ок.
Далее нам не обходимо для сокращения записи и удобства создать алиас.
using Excel = Microsoft.Office.Interop.Excel; |
Теперь нам нужно объявить объект Excel задать параметры и приступать к работе.
//Объявляем приложение Excel.Application app = new Excel.Application { //Отобразить Excel Visible = true, //Количество листов в рабочей книге SheetsInNewWorkbook = 2 }; //Добавить рабочую книгу Excel.Workbook workBook = app.Workbooks.Add(Type.Missing); //Отключить отображение окон с сообщениями app.DisplayAlerts = false; //Получаем первый лист документа (счет начинается с 1) Excel.Worksheet sheet = (Excel.Worksheet)app.Worksheets.get_Item(1); //Название листа (вкладки снизу) sheet.Name = «Имя должно быть не больше 32сим»; |
Пример заполнения ячейки:
//Пример заполнения ячеек №1 for (int i = 1; i <= 9; i++) { for (int j = 1; j < 9; j++) sheet.Cells[i, j] = String.Format(«nookery {0} {1}», i, j); } //Пример №2 sheet.Range[«A1»].Value = «Пример №2»; //Пример №3 sheet.get_Range(«A2»).Value2 = «Пример №3»; |
Захват диапазона ячеек:
//Захватываем диапазон ячеек Вариант №1 Excel.Range r1 = sheet.Cells[1, 1]; Excel.Range r2 = sheet.Cells[9, 9]; Excel.Range range1 = sheet.get_Range(r1, r2); //Захватываем диапазон ячеек Вариант №2 Excel.Range range2 = sheet.get_Range(«A1»,«H9» ); |
Оформление, шрифт, размер, цвет, толщина.
//Шрифт для диапазона range.Cells.Font.Name = «Tahoma»; range2.Cells.Font.Name = «Times New Roman»; //Размер шрифта для диапазона range.Cells.Font.Size = 10; //Жирный текст range.Font.Bold = true; //Цвет текста range.Font.Color = ColorTranslator.ToOle(Color.Blue); |
Объединение ячеек в одну
//Объединение ячеек с F2 по K2 Excel.Range range3 = sheet.get_Range(«F2», «K2»); range3.Merge(Type.Missing); |
Изменяем размеры ячеек по ширине и высоте
//увеличиваем размер по ширине диапазон ячеек Excel.Range range2 = sheet.get_Range(«D1», «S1»); range2.EntireColumn.ColumnWidth = 10; //увеличиваем размер по высоте диапазон ячеек Excel.Range rowHeight = sheet.get_Range(«A4», «S4»); rowHeight.EntireRow.RowHeight = 50;range.EntireColumn.AutoFit();range.EntireColumn.AutoFit(); //авторазмер |
Создаем обводку диапазона ячеек
Excel.Range r1 = sheet.Cells[countRow, 2]; Excel.Range r2 = sheet.Cells[countRow, 19]; Excel.Range rangeColor = sheet.get_Range(r1, r2); rangeColor.Borders.Color = ColorTranslator.ToOle(Color.Black); |
Производим выравнивания содержимого диапазона ячеек.
Excel.Range r = sheet.get_Range(«A1», «S40»); //Оформления r.Font.Name = «Calibri»; r.Cells.Font.Size = 10; r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; |
Примеры вычисления формул, все вставки формул были скопированы из самой Excel без изменений. Позиция ячейки взята из счетчика переменно и подставлен к букве ячейки
sheet.Cells[countRow, countColumn] = $«=G{countRow}-F{countRow}»; sheet.Cells[countRow, countColumn].FormulaLocal = $«=ЕСЛИ((H{countRow}*O{countRow})+(I{countRow}*P{countRow})/100<=0;J{countRow}*O{countRow}/100;((H{countRow}*O{countRow})+(I{countRow}*P{countRow}))/100)»; sheet.Cells[countRow, countColumn] = $«=K{countRow}+N{countRow}-R{countRow}»; sheet.Cells[33, 22].FormulaLocal = «=СУММ(V3:V32)»; |
Добавляем разрыв страницы.
//Ячейка, с которой будет разрыв Excel.Range razr = sheet.Cells[n, m] as Excel.Range; //Добавить горизонтальный разрыв (sheet — текущий лист) sheet.HPageBreaks.Add(razr); //VPageBreaks — Добавить вертикальный разрыв |
Как открыть фаил Excel
app.Workbooks.Open(@»C:UsersUserDocumentsExcel.xlsx», Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); |
Сохраняем документ Excel
app.Application.ActiveWorkbook.SaveAs(«MyFile.xlsx», Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); |
Завершение работы с объектом Excel.Application
app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); |
Пример как выбрать фаил и загрузив его и узнать количество заполненных строк и колонок в одном конкретном листе по имени.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//поиск файла Excel OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect =false; ofd.DefaultExt = «*.xls;*.xlsx»; ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»; ofd.Title = «Выберите документ Excel»; if (ofd.ShowDialog() != DialogResult.OK) { MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string xlFileName = ofd.FileName; //имя нашего Excel файла //рабоата с Excel Excel.Range Rng; Excel.Workbook xlWB; Excel.Worksheet xlSht; int iLastRow, iLastCol; Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл xlSht = xlWB.Worksheets[«Лист1»]; //или так xlSht = xlWB.ActiveSheet //активный лист iLastRow = xlSht.Cells[xlSht.Rows.Count, «A»].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке |
Получаем список всех загруженных книг «листов» из файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//поиск файла Excel OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; ofd.DefaultExt = «*.xls;*.xlsx»; ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»; ofd.Title = «Выберите документ Excel»; if (ofd.ShowDialog() != DialogResult.OK) { MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string xlFileName = ofd.FileName; //имя нашего Excel файла Excel.Workbook xlWB = ex.Workbooks.Open(xlFileName); ///загружаем список всех книг foreach (object item in xlWB.Sheets) { Excel.Worksheet sheet = (Excel.Worksheet)item; } |
Афоризм
«Нахал!» – совсем не значит «Прекратите».
Наталья Резник
Поддержка проекта
Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
• 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, например «Разделительrnтекста».
Классы шрифтов 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 и определение стилей ячеек рассмотрены
здесь.
Содержание
- Введение
- Добавление необходимых ссылок в решение
- Работа с объектом Application (Excel)
- Запуск и остановка Microsoft Excel в C#
- Создание рабочей книги Excel в C#
- Работа с листами Excel в C#. Hello Excel
- Итого
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
При разработки различных программ для анализа данных нередко требуется не только обрабатывать большие массивы данных, но и предоставить конечному пользователю удобно оформленный отчёт о работе программного обеспечения. В сегодняшних реалиях экономия килобайт оперативной памяти при разработке программного обеспечения уже не так важна по сравнению с удобством работы программного продукта. Не секрет, что при работе в Windows для наиболее удобного представления табличных данных является Microsoft Excel. В этой и других статьях, посвященных работе с Excel в .NET Core и C# я постараюсь рассмотреть наиболее частые задачи по импорту и экспорту данных между приложением и Microsoft Excel. Сегодня мы рассмотрим как использовать MS Excel в .NET Core, используя технологию COM.
Введение
Разработка программ, взаимодействующих с пакетом Microsoft Office, вне зависимости от среды разработки, будь то Visual Studio С# или Delphi, основана на применении так называемой объектной модели Microsoft Office. Взаимодействие с объектами такой модели базируется на технологии OLE (Object Linking and Embedding, связывание и внедрение объектов), которая, в свою очередь, использует технологический стандарт COM (Component Object Model — модель компонентного объекта).
Существует достаточно много решений, позволяющих работать с Microsoft Excel в Visual Studio .NET о которых мы, вполне возможно, поговорим позднее. Сейчас же мы будем учиться использовать возможности Microsoft Excel, опираясь исключительно на объектную модель Microsoft Office и те возможности, которые она предоставляет разработчикам, так сказать, «из коробки».
Добавление необходимых ссылок в решение
Для подключения в решение библиотек для взаимодействия с Microsoft Excel необходимо добавить добавьте следующие ссылки:
- Microsoft Excel 16.0 Object Library
- Microsoft Office 16.0 Object Library
В Visual Studio это делается следующим образом:
1. В «Обозревателе решений» кликаем правой кнопкой мыши по строке «Зависимости» и выбираем пункт «Добавить ссылку на модель COM»
2. В открывшемся окне в строке поиска набираем «Microsoft», выбираем необходимые ссылки, то есть Microsoft Excel 16.0 Object Library и Microsoft Office 16.0 Object Library и жмем «Ok»:
После этого, в обозревателе решений для нашего проекта в зависимостях появятся следующие ссылки:
Зависимости
COM
Interop.Microsoft.Office.Core
Interop.Microsoft.Office.Interop.Excel
Платформы
Microsoft.NetCore.App
Теперь, чтобы наше решение для .NET Core могло полноценно использовать возможности Microsoft Excel необходимо указать в решении, что все типы, используемые в объектной модели Microsoft Office будут использоваться в нашей сборке. Чтобы это сделать выбираем в зависимостях нашего решения каждую ссылку из раздела COM и в разделе «Свойства» указываем напротив пункта «Внедрить типы взаимодействия» значение «Да». На рисунке ниже представлен пример для ссылки Interop.Microsoft.Office.Core
Если не выполнить эти действия, то при разработки приложения .NET Core при попытке работы с Excel вы получите следующую ошибку:
System.IO.FileNotFoundException HResult=0x80070002
Сообщение = Could not load file or assembly ‘office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c’. Не удается найти указанный файл.
Источник = <Не удается определить источник исключения>
Трассировка стека: <Не удается определить трассировку стека исключения>
Работа с объектом Application (Excel)
Объект Application
представляет всё приложение Microsoft Excel. С помощью этого объекта в C# мы можем запускать и останавливать работу Excel, получать доступ к рабочим книгам Excel и так далее. Посмотрим, как можно взаимодействовать с Excel в C#, используя объект Application
.
Запуск и остановка Microsoft Excel в C#
Чтобы продемонстрировать запуск и остановку Excel в C# подключим в наше решение пространство имен Microsoft.Office.Interop.Excel
, используя псевдоним:
using Excel = Microsoft.Office.Interop.Excel;
Теперь напишем следующий код для метода Main()
:
using System; using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace ExcelApp { class Program { static void Main(string[] args) { Excel.Application application = new Excel.Application(); Console.WriteLine("Объект Excel.Application создан"); Console.ReadKey(); application.Visible = true; Console.WriteLine("Окно Excel видно пользователю"); Console.ReadKey(); Console.WriteLine("Закрываем Excel"); application.Quit(); Marshal.ReleaseComObject(application); } } }
Разберемся с тем, что происходит в нашем приложении при запуске. Вначале мы создаем объект application
типа Excel.Application
(Excel
— псевдоним пространства имен Microsoft.Office.Interop.Excel
). После выполнения этой строки кода происходит запуск процесса Microsoft Excel. Убедиться в этом можно, открыв диспетчер задач Windows и заглянув в раздел «Фоновые процессы»:
Чтобы показать главное окно Excel пользователю, мы устанавливаем значение true
свойству Visible
:
application.Visible = true;
И, наконец, для того, чтобы закрыть Excel и освободить память, занятую процессом Excel мы вызываем метод Quit()
.
application.Quit()
Таким образом, всё, что пока делает наше приложение .NET Core — это запускает процесс Microsoft Excel, показывает окно Excel и закрывает приложение. При этом, стоит обратить внимание на следующий момент: так как чаще всего мы будем взаимодействовать с Excel в C# в фоновом режиме без показа главного окна, то по окончанию взаимодействия необходимо обязательно вызывать метод Quit()
объекта Application
и вызвать метод объекта Marshal.ReleaseComObject(application)
из пространства имен System.Runtime.InteropServices
. Если этого не сделать, то после N
запусков нашего приложения мы рискуем «забить» оперативную память компьютера неиспользуемыми процессами Excel, так как после остановки нашего приложения и вызова Quit()
внешний процесс (Excel) автоматически не завершается. Продемонстрировать это можно, написав всего две строки кода:
static void Main(string[] args) { Excel.Application application = new Excel.Application(); application.Quit(); }
и запустить приложение несколько раз. Например, на рисунке ниже показан диспетчер задач после трех запусков нашего приложения:
Создание рабочей книги Excel в C#
Следующий пример демонстрирует создание новой рабочей книги Excel в C#:
using System; using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace ExcelApp { class Program { static void Main(string[] args) { //Объявляем переменную приложения Excel Excel.Application application = null; //объявляем переменные для коллекции рабочих книг //и одной рабочей книги Excel.Workbooks workbooks = null; Excel.Workbook workbook = null; try { //создаем объект Application application = new Excel.Application(); Console.WriteLine("Объект Excel.Application создан"); Console.ReadKey(); //показываем окно Excel пользователю application.Visible = true; Console.WriteLine("Окно Excel видно пользователю"); //получаем ссылку на коллекцию рабочих книг workbooks = application.Workbooks; //добавляем новую рабочую книгу в коллекцию workbook = workbooks.Add(); Console.ReadKey(); Console.WriteLine("Закрываем Excel"); application.Quit(); } finally { //освобождаем память, занятую объектами Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); Marshal.ReleaseComObject(application); } } } }
На первый взгляд, может показаться, что этот код вполне можно упростить, например, избавившись от «лишних» переменной workbooks
, например так:
workbook = application.Workbooks.Add();
Такой код, безусловно, будет короче и рабочая книга также будет создана, НО при этом, память выделенная для процесса Excel не будет освобождена по причине того, что в приведенной выше строке кода мы на самом деле создаем не один, а два объекта: объект типа Excel.Workbooks
и объект типа Excel.Workbook
и, соответственно, оба эти объекта нам необходимо освободить после работы с ними.
Исходя из вышеизложенного, можно определить для себя два следующих правила работы с COM в C#:
Никогда не использовать две и более точек при работе с COM
О том, из-за чего процесс Excel может зависать — смотрите в этой статье.
Работа с листами Excel в C#. Hello Excel
В следующем примере демонстрируется то, как получить доступ к первому листу рабочей книги и записи в ячейку A1
строки «Hello Excel
«:
using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace ExcelApp { class Program { static void Main(string[] args) { Excel.Application application = null; Excel.Workbooks workbooks = null; Excel.Workbook workbook = null; Excel.Sheets worksheets = null; Excel.Worksheet worksheet = null; //переменная для хранения диапазона ячеек //в нашем случае - это будет одна ячейка Excel.Range cell = null; try { application = new Excel.Application { Visible = true }; workbooks = application.Workbooks; workbook = workbooks.Add(); worksheets = workbook.Worksheets; //получаем доступ к коллекции рабочих листов worksheet = worksheets.Item[1];//получаем доступ к первому листу cell = worksheet.Cells[1, 1];//получаем доступ к ячейке cell.Value = "Hello Excel";//пишем строку в ячейку A1 application.Quit(); } finally { //освобождаем память, занятую объектами Marshal.ReleaseComObject(cell); Marshal.ReleaseComObject(worksheet); Marshal.ReleaseComObject(worksheets); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); Marshal.ReleaseComObject(application); } } } }
После запуска этого приложения откроется Excel, создастся рабочая книга, на первом листе рабочей книги в ячейке А1
появится строка «Hello Excel» после чего Excel попросит сохранить книгу. После отказа сохранения Excel закроется и память процесса Microsoft Excel будет освобождена.
Итого
Итак, сегодня мы рассмотрели основные моменты по работе с Microsoft Excel в C# и .NET Core: научились создавать процесс Microsoft Excel, создавать рабочую книгу, записывать текст в ячейки листа Excel и корректно освобождать память после работы с Excel в C#. В следующий раз мы продолжим разбираться с темой использования возможностей Excel в .NET Core и более детально познакомимся с объектной моделью Microsoft Office.
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.