Java создает файл Excel

Обновлено: 05.07.2024

Научитесь читать Excel, писать Excel, оценивать ячейки формул и применять пользовательское форматирование к сгенерированным файлам Excel, используя библиотеку Apache POI с примерами.

Если мы разрабатываем программное обеспечение для отдела кадров или финансов, обычно требуется создание отчетов Excel, как правило, для разных уровней управления. Помимо отчетов, мы также можем ожидать, что некоторые входные данные для приложений поступят в виде таблиц Excel, и ожидается, что приложение будет поддерживать это требование.

Apache POI — это надежная библиотека среди многих других библиотек с открытым исходным кодом для обработки таких сценариев использования, связанных с файлами Excel. Обратите внимание, что, кроме того, мы можем читать и записывать файлы MS Word и MS PowerPoint, также используя библиотеку Apache POI.

В этом учебном пособии по Apache POI мы обсудим некоторые распространенные операции Excel в реальных приложениях.

1. Зависимость Maven

Если мы работаем над проектом maven, мы можем включить зависимость POI в файл pom.xml, используя это:

Если мы не используем maven, мы можем найти необходимые файлы jar из zip-файла, доступного в этом месте. Включите все jar-файлы в папку lib приложения, чтобы запустить пример кода, приведенный в этом руководстве.

2. Важные занятия в библиотеке POI

Классы HSSF, XSSF и XSSF

Основные классы POI Apache обычно начинаются с HSSF, XSSF или SXSSF.

Строка и ячейка

Помимо вышеперечисленных классов, Row и Cell используются для взаимодействия с определенной строкой и определенной ячейкой в ​​листе Excel.

Стиль связанных классов

Оценщик формул

Еще один полезный класс FormulaEvaluator используется для оценки ячеек формул в листе Excel.

3. Создание файла Excel

Я сначала возьму этот пример, чтобы мы могли повторно использовать лист Excel, созданный этим кодом, в дальнейших примерах.

Написание Excel с использованием POI очень просто и включает следующие шаги:

  1. Создать книгу
  2. Создать лист в книге
  3. Создать строку на листе
  4. Добавить ячейки на лист
  5. Повторите шаги 3 и 4, чтобы записать дополнительные данные.

Это кажется очень простым, не так ли? Давайте посмотрим на код, выполняющий эти шаги.

Программа Java для записи файла Excel с использованием библиотеки Apache POI.

poi-demo-write-file

4. Чтение файла Excel

Чтение файла Excel с использованием POI также очень просто, если разделить его на этапы.

  1. Создать экземпляр книги из листа Excel
  2. Перейти к нужному листу
  3. Увеличить номер строки
  4. перебирать все ячейки подряд
  5. повторяйте шаги 3 и 4, пока не будут прочитаны все данные

Давайте рассмотрим все описанные выше шаги в коде. Я пишу код для чтения файла excel, созданного в приведенном выше примере. Он будет считывать все имена столбцов и значения в них — ячейка за ячейкой.

Программа Java для чтения файла Excel с использованием библиотеки Apache POI.

5. Добавление и оценка ячеек формулы

При работе со сложными листами Excel мы сталкиваемся со многими ячейками, в которых есть формулы для вычисления их значений. Это ячейки формулы. Apache POI отлично поддерживает добавление ячеек формул, а также оценку уже существующих ячеек формул.

Давайте рассмотрим пример добавления ячеек с формулами в Excel?

В этом коде четыре ячейки в строке и четвертая в умножении всех предыдущих 3 строк. Таким образом, формула будет такой: A2*B2*C2 (во второй строке)

Программа Java для добавления формулы в файл Excel с использованием библиотеки Apache POI.

Аналогично мы хотим прочитать файл с ячейками формулы и использовать следующую логику для оценки ячеек формулы.

Программа Java для оценки формулы в файле Excel с использованием библиотеки Apache POI.

poi-demo-write-formula

6. Форматирование ячеек

Итак, мы рассмотрели примеры чтения/записи и файлов Excel с использованием Apache POI. Но при создании отчета в файле Excel чрезвычайно важно добавить форматирование к ячейкам, которые соответствуют любым заранее определенным критериям.

Это форматирование может быть окрашено по-разному в зависимости от определенного диапазона значений, ограничения срока действия и т. д.

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

6.1. Значение ячейки в определенном диапазоне

Этот фрагмент кода окрашивает любую ячейку в диапазоне, значение которого находится в пределах настроенного диапазона. [например, между 50 и 70]

poi-demo-formatting-1

6.2. Выделите повторяющиеся значения

Выделить все ячейки, в которых есть повторяющиеся значения в наблюдаемых ячейках.

poi-demo-formatting-2

6.3. Окрашивание чередующихся строк в разные цвета

Простой код для окрашивания каждой альтернативной строки в другой цвет.

poi-demo-formatting-3

6.4. Количество цветов, срок действия которых истекает в течение следующих 30 дней

Удобный код для финансовых проектов, который отслеживает сроки.

poi-demo-formatting-4

Я заканчиваю этот туториал по apache poi, чтобы ограничить количество сообщений.

7. Скачать исходный код

Нажмите на указанную ссылку, чтобы загрузить исходный код приведенных выше примеров.

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

Был ли этот пост полезен?

Рекомендуемое чтение:

181 мысль о «Apache POI — чтение и запись файла Excel в Java»

У меня есть таблица Excel с такими столбцами (Имя актива, Тип актива, Подтип актива, Путь к логотипу актива)… Здесь я хочу прочитать данные большого двоичного объекта на основе столбца Путь к логотипу актива (/home/mbytes/yellaiah/asset imgs/ pens.jpg) значение для внутренней части (пружины) из внешней сетки extjs. Я протестировал чтение файла на основе значения столбца пути логотипа актива, данные BLOB-объекта читаются, если клиент и сервер находятся в одной системе, но я хочу загрузить лист Excel из system2, подключившись к моей серверной системе и прочитав файлы из локальной системы (на основе в загруженной системе) и вставить в БД. когда я загружаю лист Excel, я отображаю загруженные данные в сетку extjs. в сетке у меня есть кнопка. когда я нажимаю кнопку, мне нужно передать данные на сервер. Как я могу прочитать большой двоичный объект из другой системы. Пожалуйста, дайте несколько предложений.

Некоторые отчеты istorm работают неправильно в Excel 365. Какая версия POI.jar поддерживает Excel 365? Пожалуйста, помогите мне.

Привет, Локеш, это было очень полезно. Спасибо за вашу помощь. У меня есть вопрос по вашему второму примеру;

Чтение файла Excel:

Вместо того, чтобы получать все значения ячеек, что, если вы хотите получить ввод от пользователя (getText), скажем: ID – 1, и мне нужны эти значения ячеек, например, Амит и Шукла? Пожалуйста, проясните это.

Здравствуйте, мистер Локеш!
Спасибо за загруженную полезную работу.

Кроме того, не могли бы вы сообщить мне, могу ли я одновременно читать и писать из файла Excel с помощью Java, оставляя файл открытым?

Как найти ячейки, выбранные пользователем, или активные ячейки?

Привет,
Я загружаю xl в db с помощью Hibernate и spring. У меня проблема с внешним ключом. Пожалуйста, помогите мне.

как передать внешний ключ контроллеру?

Отличная работа! Кроме того, вы предоставили возможность загрузки исходного кода! Высоко ценится! Отличная работа!

Я могу записывать данные в Excel, используя приведенный выше код, но когда я открываю файл, я получаю такие данные:

3.0 John Adwards
4.0 Брайан Шульц
ИДЕНТИФИКАЦИОННОЕ ИМЯ ФАМИЛИЯ
1.0 Амит Шукла
2.0 Локеш Гупта

Очень полезная статья и отличный учебник по Excel

Нужно предложение относительно ниже..

чтение созданного выше файла howtodoinjava_demo.xlsx.

при синтаксическом анализе с помощью SAX Parser вывод отличается от вывода, как показано ниже.

Данные сотрудника [index=0]:
"ID", "NAME", "LASTNAME".
1.0, «Амит», «Шукла».
2.0, «Локеш», «Гупта».
3.0, «Джон», «Adwards».
4.0, "Брайан", "Шульц".

Тот же файл, только что отредактированный в локальной системе, и то же самое дает приведенный ниже результат — выглядит нормально.

Данные сотрудника [index=0]:
"ID", "NAME", "LASTNAME".
1, «Амит», «Шукла».
2, «Локеш», «Гупта».
3, "Джон", "Adwards".
4, "Брайан", "Шульц".

Пожалуйста, сообщите, что мы можем сделать, чтобы получить такие же результаты с файлом, сгенерированным системой?

бесплатен ли Apache POI, если нет, то какова его цена

Привет, Локеш,
Я застрял в 1 требовании, чтобы загрузить чтение Excel и сохранить его в БД.

Проблема: у меня нет. листов Excel, и все они имеют разные столбцы, и все листы будут сохранены в другой таблице (имеющей различную структуру таблицы). И я хочу создать общий сервис, который читает листы Excel и сохраняет их соответственно.

В этом случае вы ДОЛЖНЫ установить некоторые ограничения для пользователей, загружающих эти файлы. Например. Имена файлов должны включать определенное слово для каждого формата, ИЛИ имена столбцов должны точно совпадать с тем, что указано. ДОЛЖНО быть какое-то правило, которое можно было бы проверить после того, как файл получен на стороне сервера.

Привет, Локеш, спасибо за ответ. Я должен подробнее рассказать о своей проблеме, чтобы ясно понять вас:

Например, у меня есть 3 вкладки Excel A, B и C.A имеет 5 столбцов, B имеет 10 и C имеет 15 столбцов. На данный момент я создаю 3 разных bean-компонента с одинаковым номером. атрибутов (Setter/Getter), устанавливает каждый столбец и, наконец, сохраняет объект в БД (используя спящий режим).

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

Итак, есть ли способ оптимизировать это?

Я предлагаю вам остановиться на 3 сервисах. Это хорошо для будущего использования.
Понимаете, это скорее вопрос стиля кодирования. Я считаю, что код должен быть достаточно простым для чтения и следовать этим принципам SOLID. Я предпочту легкий поддерживаемый код, а не оптимизированный код. Выбор за вами.

Спасибо за помощь, приятель!

Похоже, исходный код не включает файл pom.xml. Где я могу его получить?

Я хочу прочитать данные с листа Excel, используя диапазон. предположим, мы хотим прочитать диапазон ячеек A1:C12. пожалуйста, предложите мне, как читать, используя диапазон ячеек.

Способ оценки формул возврата меня серьезно сбивает с толку и немного беспокоит! Когда я читал, как это делается, я не совсем верил, что это сработает, вот код, где я использовал эту технику:

частный объект getCellValue (ячейка ячейки)

int cellType = evaluator.evaluateInCell(cell).getCellType();

если (cellType == Cell.CELL_TYPE_STRING ) return cell.getStringCellValue ();
иначе, если (cellType == Cell.CELL_TYPE_NUMERIC) return cell.getNumericCellValue();
иначе, если (cellType == Cell.CELL_TYPE_FORMULA) вернуть null ;
else if (cellType == Cell.CELL_TYPE_BOOLEAN) return cell.getBooleanCellValue();
иначе, если (cellType == Cell.CELL_TYPE_ERROR) вернуть cell.getErrorCellValue ();

Таким образом, несмотря на то, что у меня есть формула, возвращается значение null, оценка формулы возвращается автоматически? Но это также было автоматически записано в файл в вашем примере выше… Например, я собираю данные в массивы для использования в приложении, и массив автоматически заполняется с помощью этой функции…

В этом руководстве я хотел бы поделиться с вами несколькими примерами записи данных в файлы Excel с использованием библиотеки Apache POI. Если сегодня вы впервые знакомитесь с Apache POI, и вы еще не написали ни одного фрагмента кода для чтения/записи файлов Excel, я рекомендую вам прочитать разделы 1 и 2 в учебнике Как читать файлы Excel в Java с помощью Apache POI, чтобы понять основы Apache POI.

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

1. Основы Apache POI API для записи файлов Excel

Основные интерфейсы включают Workbook , Sheet , Row и Cell . Для базового форматирования используйте интерфейсы CellStyle и Font. Конкретные классы реализации включают:

  • Excel 2003: HSSFWorkbook , HSSFSheet , HSSFRow , HSSFCell и т. д.
  • Excel 2007: XSSFWorkbook , XSSFSheet , XSSFRow , XSSFCell и т. д.

Вот основные шаги для написания файла Excel:

  1. Создайте рабочую книгу.
  2. Создать лист .
  3. Повторяйте следующие шаги, пока не будут обработаны все данные:
    1. Создать строку.
    2. Создать ячейки в ряд . Примените форматирование с помощью CellStyle .

    2. Простой пример создания файла Excel на Java

    Следующий фрагмент кода представляет собой очень простую программу, демонстрирующую запись списка книг в файл Excel в самой простой и грязной форме:

    Эта программа создает документ Excel 2007, который выглядит так, как показано на следующем снимке экрана (файл: JavaBooks.xlsx ):

    Выходной файл Excel

    3. Более объектно-ориентированный пример создания файла Excel на Java

    Следующие фрагменты кода демонстрируют более удобную программу, основанную на ООП-подходе. Это делает программу более гибкой и простой для расширения или обновления в будущем.

    • Создайте класс модели ( Book.java ):
    • Метод, который записывает список книг в файл Excel (в формате 2003):
    • Метод, который записывает информацию о книге в ячейки:
    • Следующий метод создает фиктивные данные (список книг):
    • И следующий фрагмент кода предназначен для тестирования:

    4. Форматирование ячеек файла Excel

    Конечно, вам может понадобиться отформатировать файл Excel, чтобы он выглядел красиво и профессионально. Форматирование разнообразно и довольно сложно, поэтому в этом вводном уроке я просто покажу вам, как форматировать основы, такие как настройка стиля шрифта. Вот шаги:

    • Создайте объект CellStyle, содержащий информацию о форматировании:
    • Вызовите соответствующие установщики, чтобы применить нужное форматирование. Например:

    Вы можете увидеть полную программу ( FormattedExcelWriterExample.java ), которую можно найти в исходном коде, прикрепленном к этой статье.

    5.Написание форматов Excel 2003 и Excel 2007 на Java

    Для большей гибкости (поддержки обоих распространенных форматов Excel) я рекомендую написать фабричный метод, который возвращает либо HSSFWorkbook, либо XSSFWorkbook в зависимости от расширения файла (.xls или .xlsx). Вот метод:

    Вы можете увидеть полную программу ( FlexibleExcelWriterExample.java ), которую можно найти в исходном коде, прикрепленном к этой статье.

    Вот как программно читать файлы Excel в Java. Этот курс для разработчиков программного обеспечения на Java будет хорошим выбором для более глубокого изучения программирования на Java.

    Связанные руководства по Java Excel:

    Ссылки

    Об авторе:


    Нам Ха Мин является сертифицированным программистом Java (SCJP и SCWCD). Он начал программировать на Java во времена Java 1.4 и с тех пор влюбился в Java. Подружитесь с ним на Facebook и смотрите его видео на Java на YouTube.

    Электронные таблицы MS Excel упростили хранение и совместное использование больших объемов табличных данных. Помимо этого, вы можете выполнять различные операции, такие как применение формул, создание диаграмм и графиков, сортировка и фильтрация данных и так далее. В этой статье вы узнаете, как реализовать функции автоматизации Excel из ваших приложений Java. Прочитав эту статью, вы сможете создавать файлы Excel XLSX или XLS с нуля, используя Java. Кроме того, в этой статье рассказывается, как обновить существующий файл Excel, создать диаграммы, применить формулы и добавить сводные таблицы на листы Excel.

    Java API для создания файлов Excel — скачать бесплатно

    Aspose.Cells for Java — это мощный API для работы с электронными таблицами, который позволяет создавать или изменять файлы Excel без MS Office. API поддерживает добавление диаграмм, графиков, формул и программное выполнение других операций с электронными таблицами. Вы можете скачать API бесплатно или установить его в своих приложениях на основе Maven.

    Создание Excel XLSX или XLS с помощью Java

    Файлы MS Excel называются рабочими книгами, и каждая рабочая книга состоит из одного или нескольких рабочих листов. Рабочие листы также содержат строки и столбцы для хранения данных в виде ячеек. Итак, начнем с создания простой рабочей книги. Ниже приведены шаги по созданию файла Excel XLSX с нуля.

    • Создайте экземпляр класса Workbook.
    • Доступ к нужному листу с помощью метода Workbook.getWorksheets.get().
    • Поместите значение в нужную ячейку на листе, используя идентификатор ячейки, например A1, B3 и т. д.
    • Сохраните книгу как файл Excel с помощью метода Workbook.save().

    В следующем примере кода показано, как создать файл Excel XLSX с помощью Java.

    < бр />

    Редактировать файл Excel XLSX с помощью Java

    Давайте посмотрим, как изменить или вставить данные в существующий файл MS Excel. Для этого вы можете просто загрузить файл, получить доступ к нужному рабочему листу и сохранить обновленный файл. Ниже приведены шаги по изменению существующего файла Excel.

    • Откройте файл Excel с помощью класса Workbook.
    • Для доступа к листам и ячейкам используйте классы Worksheet и Cell соответственно.
    • Сохраните обновленную книгу в виде файла Excel .xlsx.

    В следующем примере кода показано, как редактировать существующий файл MS Excel с помощью Java.

    Создание диаграмм или графиков в Excel с помощью Java

    Диаграммы в электронных таблицах используются для визуального представления данных, хранящихся на листах. Они облегчают анализ большого количества данных. Aspose.Cells for Java предоставляет широкий спектр диаграмм, которые вы можете программно создавать в файлах Excel. Ниже приведены шаги для создания диаграммы в файле Excel XLSX.

    • Создайте новый файл Excel или загрузите существующий с помощью класса Workbook.
    • Добавить данные на лист (необязательно).
    • Получить набор диаграмм рабочего листа с помощью метода Worksheet.getCharts().
    • Добавьте новую диаграмму с помощью метода Worksheet.getCharts().add().
    • Получить только что созданную диаграмму из коллекции.
    • Укажите диапазон ячеек, чтобы установить NSeries для диаграммы.
    • Сохраните книгу как файл Excel .xlsx.

    В следующем примере кода показано, как создать диаграмму в Excel XLSX с помощью Java.

    создать диаграмму в excel с помощью java

    Создание сводной таблицы в Excel XLSX с помощью Java

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

    • Создайте новую книгу или загрузите существующий файл.
    • Вставьте данные на лист (необязательно).
    • Доступ к коллекции сводных таблиц с помощью метода Worksheet.getPivotTables().
    • Добавьте новую сводную таблицу на лист с помощью метода Worksheet.getPivotTables().add().
    • Предоставить данные в сводную таблицу.
    • Сохраните книгу.

    В следующем примере кода показано, как создать сводную таблицу в Excel с помощью Java.

    создать сводную таблицу в excel с помощью java

    Добавить формулы для ячеек в файл Excel с помощью Java

    Aspose.Cells for Java также позволяет работать с формулами на листах Excel. К ячейкам можно применять как встроенные, так и дополнительные функции.

    Применить встроенные функции в Excel

    Чтобы использовать встроенные функции, вы можете просто получить доступ к нужной ячейке на листе и добавить формулу с помощью метода Cell.setFormula(String). В следующем примере кода показано, как задать встроенную формулу с помощью Java.

    Добавление дополнительных функций в Excel

    Может быть случай, когда вам нужно использовать определяемую пользователем функцию. Для этого вам нужно будет зарегистрировать функцию надстройки с помощью файла .xlam (надстройка Excel с поддержкой макросов), а затем использовать ее для нужных ячеек. Для регистрации функций надстройки Aspose.Cells for Java предоставляет методы registerAddInFunction(int, String) и registerAddInFunction(String, String, boolean). В следующем примере кода показано, как зарегистрировать и использовать функцию надстройки с помощью Java.

    Заключение

    В этой статье вы увидели, как создавать файлы MS Excel с нуля с помощью Java без MS Office. Вы также узнали, как обновлять книги, создавать диаграммы, добавлять таблицы и применять формулы к значениям ячеек на листах MS Excel. Вы можете узнать больше об API Aspose для Java Excel из документации.

    Как писать в файл Excel на Java с помощью Apache POI

    В этой статье вы узнаете, как создавать и записывать в файл Excel на Java с помощью Apache POI.

    Вы можете прочитать предыдущую статью, чтобы узнать об высокоуровневой архитектуре Apache POI и о том, как читать файлы Excel с помощью библиотеки Apache POI.

    Вам необходимо добавить следующие зависимости, чтобы включить Apache POI в ваш проект.

    Мейвен

    Пользователи Maven могут добавить в свой файл pom.xml следующее:

    А пользователи Gradle могут добавить в свой файл build.gradle следующее:

    Грейдл

    Запись в файл Excel с помощью Apache POI

    Сначала создадим простой класс Employee. Мы инициализируем список сотрудников и запишем его в файл Excel, который мы создадим с помощью Apache POI.

    Теперь рассмотрим программу для создания файла Excel и последующей записи в него данных. Обратите внимание, что я буду использовать XSSFWorkbook для создания экземпляра Workbook. Это создаст новый файл Excel на основе XML ( .xlsx ). Вы можете использовать HSSFWorkbook, если хотите создать старый двоичный формат Excel ( .xls )

    Ознакомьтесь с разделом терминологии Apache POI в предыдущей статье, чтобы узнать о Workbook , XSSFWorkbook , HSSFWorkbook и других терминологиях Apache POI.

    В приведенной выше программе мы сначала создали книгу с помощью класса XSSFWorkbook. Затем мы создали лист под названием «Сотрудник». Получив лист, мы создали строку заголовка и столбцы. Ячейки заголовка были оформлены с использованием другого шрифта.

    После создания строки заголовка мы создали другие строки и столбцы из списка сотрудников.

    Затем мы использовали метод sheet.autoSizeColumn(), чтобы изменить размер всех столбцов в соответствии с размером содержимого.

    Наконец мы записали вывод в файл. Ниже приведен файл, созданный при запуске вышеуказанной программы -


    Вау, приятно, нет? :)

    Открытие и изменение существующего файла Excel

    Следующий метод показывает, как открыть существующий файл Excel и обновить его —

    Приведенная выше программа не требует пояснений. Сначала мы получаем Workbook с помощью метода WorkbookFactory.create(), а затем получаем 3-й столбец во 2-й строке 1-го листа и обновляем его значение.

    Наконец, мы записываем обновленный вывод в файл.

    Поздравляем! В этой статье вы узнали, как создавать и записывать в файл Excel на Java с помощью библиотеки Apache POI.

    Вы можете найти весь исходный код в репозитории Github. Дайте проекту звезду, если вы сочтете его полезным.

    Читайте также: