Progress-servis55.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java работа с excel

Пример чтения файлов Excel

На странице описания библиотеки Apache POI представлены свойства и методы взаимодействия Java приложений с файлами Excel. Здесь рассматривается пример использования Apache POI для чтения файлов Excel 2007 или более поздней версии. Если необходимо обрабатывать Excel 1997-2003, то следует использовать классы, наименования которых начинаются с символа ‘H’ (см. наименование классов на странице описания Apache POI).

Открытие книги Excel

Чтобы «открыть» файл Excel как HSSFWorkbook (.xls), так и XSSFWorkbook (.xlsx) можно использовать либо File, либо InputStream. При использовании InputStream требуется больше памяти для загрузки файла в буффер.

Метод openBook демонстрирует использование WorkbookFactory для открытия Excel файла. Строки использования InputStream закомментированы.

Если нужно обойти использование WorkbookFactory, т.е. использовать XSSFWorkbook (HSSFWorkbook) напрямую, то следует использовать OPCPackage (.xlsx) или NPOIFSFileSystem (.xls).

Открытие страницы

При открытии страницы слеудет использовать метод getSheet с указанием в качестве параметра наименования страницы. Здесь необходимо быть внимательным, поскольку наименования страницы по умолчанию могут быть как «Sheet», так и «Лист», в зависимости от локализации операционной системы и Excel.

Перебор строк и ячеек

Чтобы «пройтись» по всем страницам книги и перебрать все значения в ячейках можно использовать итераторы. Следующий код показывает использование итераторов для перебора всех ячеек страницы.

Итераторы доступны по вызовам workbook.sheetIterator(), sheet.rowIterator() и row.cellIterator(). Но необходимо помнить, что rowIterator и cellIterator перебирают только строки и ячейки, которые созданы, пропуская пустые строки и ячейки.

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

В представленном коде для чтения ячейки был использован метод getCell(int). Можно использовать метод getCell(int, MissingCellPolicy), где MissingCellPolicy, определяет условие возвращения пустых и отсутствующих ячеек. Однако IDE Eclipse, где работоспособность кода проверялась, показывает, что MissingCellPolicy упразднена (deprecated), а метод getCell(int) для ячейки типа XSSFCell вернул правильные значения. Определение значений ячеек выполнялось в методе printCell(row, cell).

Чтение содержимого ячейки

Чтобы получить значение ячейки, необходимо знать тип её значения. Полагаю, что Вы не раз сталкивались с числовым представлением значения даты. Если у текстовой ячейки попытаться получить числовое значение, то будет вызвано NumberFormatException. Поэтому, необходимо первоначально определиться с типом, чтобы использовать соответствующий метод.

Следующий код в цикле проходит по ячейкам в строке и выводит в консоль ссылочную информацию на ячейку (например $A$3) и содержимое ячейки. Причем, сначала отображается значение, полученное методом formatCellValue класса DataFormatter, а после символа слеша ‘/’ отображается значение, получаемое методами getRichStringCellValue(), getDateCellValue(), getNumericCellValue(), getBooleanCellValue() и getCellFormula() класса XSSFCell.

Пример чтения файла Excel

Работоспособность представленного на странице кода (методов), была проверена в примере, структура которого изображена на следующем скриншоте. Это проект Eclipse, включающий перечень необходимых библиотек для чтения файла Excel. Основной класс ExcelRead реализует все представленные выше методы.

На следующем скриншоте представлена страница простенького файла Excel, содержащая ячейки со значениями типа Date, String, Numeric и ячейки с формулами.

Результат чтения файла

Значения ячеек книги Excel в примере отображаются в консоли. Обратите внимание на отличия значений до слеша и после него для типов Date и Numeric. При необходимости можно использовать в приложении переменные соответствующего типа (Date, Integer) и должным образом отформатировать значения.

Скачать примеры

Исходный пример, рассмотренный в тексте страницы, можно скачать здесь (11.7 Мб).

Работа с Excel в Java через Apache POI

    Переводы, 7 августа 2015 в 18:34

Из этой статьи вы сможете узнать о записи и чтении данных из Excel файлов в Java (будет рассмотрен как XLS , так и XLSX формат). Мы будем использовать библиотеку Apache POI и сосредоточимся на работе с типами String и Date , работа с последним происходит достаточно хитро. Напомню, что работу с числами мы уже рассмотрели в другой статье.

Читать еще:  Как делать содержание в word

Библиотеку poi-XX.jar вы можете использовать для всех старых ( xls , doc , ppt ) файлов Microsoft Office, для новых ( xlsx , docx , pptx ) вам понадобится poi-ooxml-XX.jar . Очень важно понимать, что к чему относится, т.к. используемые классы тоже разные — для старых расширений это HSSFWorkbook , а для новых — XSSFWorkbook .

Подготовка: загрузка библиотек и зависимостей

Конечно, существует достаточно много открытых библиотек, которые позволяют работать с Excel файлами в Java, например, JXL, но мы будем использовать имеющую самый обширный API и самую популярную — Apache POI. Чтобы её использовать, вам нужно скачать jar файлы и добавить их через Eclipse вручную, или вы можете предоставить это Maven.

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

Самое удобное в 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 .

Sportmaster Lab, Москва

Если вы будете добавлять библиотеки вручную — не забудьте о вышеназванных файлах. Скачать всё можно отсюда. Помните — если вы загрузите только poi-XX.jar , то ваш код скомпилируется без ошибок, но потом упадёт с java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject , так как внутри будет вызываться xmlbeans.jar .

Запись

В этом примере мы запишем в xls файл следующие данные: в первую ячейку — строку с именем, а во вторую — дату рождения. Вот пошаговая инструкция:

  • Создаём объект HSSFWorkBook ;
  • Создаём лист, используя на объекте, созданном в предыдущем шаге, createSheet() ;
  • Создаём на листе строку, используя createRow() ;
  • Создаём в строке ячейку — createCell() ;
  • Задаём значение ячейки через setCellValue();
  • Записываем workbook в File через FileOutputStream ;
  • Закрываем workbook , вызывая close() .

Для записи строк или чисел этого вполне достаточно, но чтобы записать дату, нам понадобится сделать ещё кое-что:

  • Создать DateFormat ;
  • Создать CellStyle ;
  • Записать DateFormat в CellStyle ;
  • Записать CellStyle в ячейку;
  • Теперь в эту ячейку можно записать объект Date через всё тот же setCellValue ;
  • Чтобы дата поместилась в ячейку, нам нужно добавить столбцу свойство автоматически менять размер: sheet.autoSizeColumn(1) .

Всё вместе это будет выглядеть так:

Чтение

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

  • Для начала создадим HSSFWorkBook , передав в конструктор FileInputStream ;
  • Получаем лист, передавая в getSheet() его номер или название;
  • Получаем строку, используя getRow() ;
  • Получаем ячейку, используя getCell() ;
  • Узнаём тип ячейки, используя на ней getCellType() ;
  • В зависимости от типа ячейки, читаем её значения, используя getStringCellValue() , getNumericCellValue() или getDateCellValue() ;
  • Закрываем workbook используя close() .

Напомню, что дату Excel хранит как числа, т.е. тип ячейки всё равно будет CELL_TYPE_NUMERIC .

В виде кода это будет выглядеть следующим образом:

Открытие существующего листа Excel в Java с использованием Apache POI

Apache POI — это мощный API-интерфейс, с помощью которого можно читать, писать и изменять любой документ Microsoft, например PowerPoint, World или Excel.

Apache POI имеет разные классы и метод для работы с различными документами MS Office.
POIFS
Это стенд для «Файловой системы реализации плохой обфускации» . Этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.

HSSF
Это стенд для «Ужасного формата электронных таблиц» . Он используется для чтения и записи в формате xls файлов MS-Excel.

XSSF
Это подставка для «XML Spreadsheet Format» . Используется для формата файлов xlsx MS-Excel.

HPSF
Это стенд для «ужасного формата набора свойств» . Он используется для извлечения наборов свойств из файлов MS-Office.

HWPF
Это стенд для «ужасного формата текстового процессора» . Он используется для чтения и записи файлов расширений doc MS-Word.

Читать еще:  Ссылка на рисунок в тексте word

XWPF
Это означает «формат текстового редактора XML» . Он используется для чтения и записи файлов расширений docx MS-Word.

HSLF
Это стенд для «ужасного формата макета слайда» . Он используется для чтения, создания и редактирования презентаций PowerPoint.

HDGF
Это стенд для «ужасного формата диаграммы» . Он содержит классы и методы для двоичных файлов MS-Visio.

HPBF
Это стенд для «ужасного формата PuBlisher» . Он используется для чтения и записи файлов MS-Publisher.

Шаги, чтобы открыть существующий лист Excel в Java, в затмении

  1. Создать проект JAVA Maven
  2. Добавить зависимость в файл pom.xml

groupId >org.apache.poi groupId >

artifactId >poi artifactId >

version >3.12 version >

groupId >org.apache.poi groupId >

artifactId >poi-ooxml artifactId >

version >3.12 version >

Создать класс в папке javaResource

public class GFG <

public static void main(String args[]) throws Exception

// Создать файловый объект

// для пути к существующему файлу Excel

// Даем путь к файлу в качестве параметра

// откуда файл должен быть прочитан

File file = new File( «Geeks.xlsx» );

// Создаем объект FileInputStream

// для получения информации о файле

FileInputStream fip = new FileInputStream(file);

// Получение экземпляра книги для файла XLSX

XSSFWorkbook workbook = new XSSFWorkbook(fIP);

// Убедитесь, что файл существует или нет

if (file.isFile() && file.exists()) <

System.out.println( «Geeks.xlsx open» );

System.out.println( «Geeks.xlsx either not exist»

  • Запустите код как Java-приложение
  • Конец
  • Выход:

    Расположение файла в затмении

    Working with Microsoft Excel in Java

    Last modified: February 8, 2020

    I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

    In the 9 years of running Baeldung, I’ve never, ever done a «sale».
    But. we’ve also not been through anything like this pandemic either.
    And, if making my courses more affordable for a while is going to help a company stay in business, or a developer land a new job, make rent or be able to provide for their family — then it’s well worth doing.
    Effective immediately, all Baeldung courses are 33% off their normal prices!
    You’ll find all three courses in the menu, above, or here.

    1. Introduction

    In this tutorial, we will demonstrate the use of the Apache POI and JExcel APIs for working with Excel spreadsheets.

    Both libraries can be used to dynamically read, write and modify the content of an Excel spreadsheet and provide an effective way of integrating Microsoft Excel into a Java Application.

    2. Maven Dependencies

    To begin, we will need to add the following dependencies to our pom.xml file:

    The latest versions of poi-ooxml and jxls-jexcel can be downloaded from Maven Central.

    3. Apache POI

    The Apache POI library supports both .xls and .xlsx files and is a more complex library than other Java libraries for working with Excel files.

    It provides the Workbook interface for modeling an Excel file, and the Sheet, Row, and Cell interfaces that model the elements of an Excel file, as well as implementations of each interface for both file formats.

    When working with the newer .xlsx file format, you would use the XSSFWorkbook, XSSFSheet, XSSFRow, and XSSFCell classes.

    To work with the older .xls format, use the HSSFWorkbook, HSSFSheet, HSSFRow, and HSSFCell classes.

    3.1. Reading from Excel

    Let’s create a method that opens a .xlsx file, then reads content from the first sheet of the file.

    The method for reading cell content varies depending on the type of the data in the cell. The type of the cell content can be determined using the getCellTypeEnum() method of the Cell interface.

    Читать еще:  Повторить строки заголовков word не работает

    First, let’s open the file from a given location:

    Next, let’s retrieve the first sheet of the file and iterate through each row:

    Apache POI has different methods for reading each type of data. Let’s expand on the content of each switch case above.

    When the cell type enum value is STRING, the content will be read using the getRichStringCellValue() method of Cell interface:

    Cells having the NUMERIC content type can contain either a date or a number and are read in the following manner:

    For BOOLEAN values, we have the getBooleanCellValue() method:

    And when the cell type is FORMULA, we can use the getCellFormula() method:

    3.2. Writing to Excel

    Apache POI uses the same interfaces presented in the previous section for writing to an Excel file and has better support for styling than JExcel.

    Let’s create a method that writes a list of persons to a sheet titled “Persons”. First, we will create and style a header row that contains “Name” and “Age” cells:

    Next, let’s write the content of the table with a different style:

    Finally, let’s write the content to a ‘temp.xlsx’ file in the current directory and close the workbook:

    Let’s test the above methods in a JUnit test that writes content to the temp.xlsx file then reads the same file to verify it contains the text we have written:

    4. JExcel

    The JExcel library is a lightweight library having the advantage that it’s easier to use than Apache POI, but with the disadvantage that it only provides support for processing Excel files in the .xls (1997-2003) format.

    At the moment, .xlsx files are not supported.

    4.1. Reading from Excel

    In order to work with Excel files, this library provides a series of classes that represent the different parts of an excel file. The Workbook class represents the entire collection of sheets. The Sheet class represents a single sheet, and the Cell class represents a single cell of a spreadsheet.

    Let’s write a method that creates a workbook from a specified Excel file, gets the first sheet of the file, then traverses its content and adds each row in a HashMap:

    4.2. Writing to Excel

    For writing to an Excel file, the JExcel library offers classes similar to the ones used above, that model a spreadsheet file: WritableWorkbook, WritableSheet, and WritableCell.

    The WritableCell class has subclasses corresponding to the different types of content that can be written: Label, DateTime, Number, Boolean, Blank, and Formula.

    This library also provides support for basic formattings, such as controlling font, color and cell width.

    Let’s write a method that creates a workbook called ‘temp.xls’ in the current directory, then writes the same content we wrote in the Apache POI section.

    First, let’s create the workbook:

    Next, let’s create the first sheet and write the header of the excel file, containing “Name” and “Age” cells:

    With a new style, let’s write the content of the table we’ve created:

    It’s very important to remember to write to the file and close it at the end so it can be used by other processes, using the write() and close() methods of Workbook class:

    5. Conclusion

    This tutorial has illustrated how to use the Apache POI API and JExcel API to read and write an Excel file from a Java program.

    The complete source code for this article can be found in the GitHub project.

    Ссылка на основную публикацию
    Adblock
    detector
    ×
    ×