Классы для работы с файлами excel

Содержание

  1. Apache POI, взаимодействие с Excel
  2. Компоненты Apache POI
  3. Описание компонентов
  4. Список компонентов
  5. Подключение Apache POI к проекту
  6. Классы и методы Apache POI для работы с файлами Excel
  7. Рабочая книга HSSFWorkbook, XSSFWorkbook
  8. Конструкторы класса HSSFWorkbook
  9. Конструкторы класса XSSFWorkbook
  10. Основные методы HSSFWorkbook, XSSFWorkbook
  11. Классы листов книги, HSSFSheet, XSSFSheet
  12. Основные методы классов работы с листами
  13. Классы строк HSSFRow, XSSFRow
  14. Основные методы классов HSSFRow, XSSFRow
  15. Классы ячеек HSSFCell, XSSFCell
  16. Основные методы классов HSSFCell, XSSFCell
  17. Классы стилей ячеек HSSFCellStyle, XSSFCellStyle
  18. Классы шрифтов HSSFFont, XSSFFont
  19. Работа с Microsoft Excel в Java
  20. Работа с Microsoft Excel в Java
  21. 1. Вступление
  22. 2. Maven Зависимости
  23. 3. Apache POI
  24. 3.1. Чтение из Excel
  25. 3.2. Запись в Excel
  26. 4. JExcel
  27. 4.1. Чтение из Excel
  28. 4.2. Запись в Excel
  29. 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

Задание:


В данной работе вы должны реализовать следующее:

  1. Чтение с ячейки MS Excel в Java

  2. Запись с 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

Выполнение:

  1. Создать проект на java с помощью maven.

  2. Следовать инструкции «Подготовка:…» описанная выше.

  3. Создать Excel файл в корневой папке проекта.

  4. Записать в A1 и A2 любые целые числа.

  5. Сохранить Excel файл.

  6. Закрыть Excel файл. (ОБЯЗЕТЬНОЕ УСЛОВИЕ, т.к. apache POI API может работать только с закрытым фалом)

  7. В папке src/main/java создать класс IOCell

    1. Создать поле
    1. Создать конструктор
    IOCell(String filePath) { this.filePath = new File(filePath)}
    1. Создать метод для чтения 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);
    }
    1. Создать метод для записи с 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();
        }
    
    }
  8. В папке src/main/java создать класс Main

    1. Создать поле
        private static final String filePath = "NAME_OF_EXCEL_FILE";
    1. Создать метод
    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");
    }
  9. Запускаем приложение и смотрим в консоль.

Все привет, в этой статье опишу исчерпывающие примеры работы с 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&#91;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.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Понравилась статья? Поделить с друзьями:
  • Клавиши tab в word
  • Классы vba excel примеры
  • Клавиша f4 в excel не делает абсолютную ссылку
  • Клавиши поиска в тексте word
  • Клавиши excel alt enter