Как читать/записывать данные в Excel Selenium Использование Apache POI

⚡ Умное резюме

Файлы Excel на диске Selenium Тесты, основанные на данных, и Apache POI — это... Java Библиотека, которая читает и записывает их. В разделах ниже рассматриваются зависимости, основные классы, примеры чтения и записи, а также JXL.

  • 🔘 Два формата: Классы HSSF обрабатывают файлы .xls, классы XSSF обрабатывают файлы .xlsx.
  • Основные интерфейсы: Рабочая книга, лист, строка и ячейка повторяют структуру электронной таблицы.
  • 🧪 Чтение: Функция FileInputStream в сочетании с getLastRowNum выполняет цикл для каждой строки и ячейки.
  • 🇧🇷 Письмо: Функции createRow и setCellValue добавляют данные, а FileOutputStream сохраняет их.
  • 📊 Наследие: JXL читает старые рабочие тетради, но не файлы XLSX.

Чтение и запись данных в Excel. Selenium с Apache POI

Файловый ввод-вывод является важной частью любого программного процесса. Мы часто создаем файл, открываем его и что-то обновляем или удаляем на наших компьютерах. То же самое и с Selenium Автоматизация. Нам нужен процесс для манипулирования файлами с помощью Selenium.

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

POI Apache в Selenium

POI Apache в Selenium это широко используемый API для Selenium тестирование на основе данныхЭто библиотека объектов интереса (POI), написанная на языке программирования. Java который дает пользователям API для управления Microsoft Документы, такие как .xls и .xlsx. Пользователи могут легко создавать, изменять и читать/записывать данные в файлы Excel. POI расшифровывается как «Плохая реализация обфускации».

Как работать с файлами Excel с помощью POI (зависимость Maven POM)

Ссылки на объекты интереса (POI) Selenium Проверьте свои знания, используя рабочую тетрадь, расположенную ниже.

Apache POI выступает в качестве моста между Selenium тест и рабочая книга Excel

Чтобы прочитать и записать файл Excel в JavaApache предоставляет очень известную библиотеку POI. Эта библиотека достаточно функциональна для чтения и записи файлов Excel как в формате XLS, так и в формате XLSX.

Для чтения файлов XLS библиотека POI предоставляет реализацию HSSF.

Для чтения файлов XLSX можно использовать реализацию библиотеки POI в формате XSSF. Давайте рассмотрим эти реализации подробнее.

Если вы используете Maven в своем проекте, зависимость Maven будет добавлена ​​в pom.xml, как показано ниже.

В файл pom.xml проекта Maven добавлена ​​запись о зависимости POI.

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>

Примечание к версии: 4.1.1 — это исходный пример; текущие проекты заявляют poi-ooxml 5.5.1, который необходим для XLSX.

Или вы можете просто загрузить последнюю версию POI jars с сайта http://poi.apache.org/download.html и загрузите последнюю версию zip-файла

Страница загрузки Apache POI, содержащая список бинарных файлов и архивов исходного кода дистрибутива.

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

В архив добавлены распакованные jar-файлы POI. Java путь сборки проекта

Классы и интерфейсы в POI

Ниже приведен список различных Java Ниже представлены интерфейсы и классы в POI для чтения файлов XLS и XLSX.

Иерархия классов POI от рабочей книги до листа, строки и ячейки.

  • Рабочая тетрадь: Этот интерфейс реализуют классы XSSFWorkbook и HSSFWorkbook.
  • XSSFWorkbook: Представляет собой классовое представление файла XLSX.
  • Рабочая тетрадь HSSF: Это представление класса файла XLS.
  • Простынь: Классы XSSFSheet и HSSFSheet реализуют этот интерфейс.
  • XSSFSheet: Это класс, представляющий собой лист в файле XLSX.
  • HSSFSheet: Это класс, представляющий собой лист в файле XLS.
  • Строка: Классы XSSFRow и HSSFRow реализуют этот интерфейс.
  • XSSFRow: Это класс, представляющий строку в листе файла XLSX.
  • HSSFRow: Это класс, представляющий строку в листе файла XLS.
  • Моб: Классы XSSFCell и HSSFCell реализуют этот интерфейс.
  • XSSFCell: Это класс, представляющий ячейку в строке файла XLSX.
  • HSSFCell: Класс, представляющий ячейку в строке файла XLS.

Читай пиши Operaпроизводство

Для нашего примера мы рассмотрим ниже приведенный формат файла Excel.

Пример экспорта рабочей книги Excel с использованием Excel.GuruЛист 99Demo, использованный в обоих примерах.

Чтение данных из файла Excel

Полный пример: Здесь мы пытаемся считать данные из Excel. Selenium:

package excelExportAndFileIO;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadGuru99ExcelFile {

    public void readExcel(String filePath,String fileName,String sheetName) throws IOException{

    //Create an object of File class to open xlsx file

    File file =    new File(filePath+"\\"+fileName);

    //Create an object of FileInputStream class to read excel file

    FileInputStream inputStream = new FileInputStream(file);

    Workbook guru99Workbook = null;

    //Find the file extension by splitting file name in substring  and getting only extension name

    String fileExtensionName = fileName.substring(fileName.indexOf("."));

    //Check condition if the file is xlsx file

    if(fileExtensionName.equals(".xlsx")){

    //If it is xlsx file then create object of XSSFWorkbook class

    guru99Workbook = new XSSFWorkbook(inputStream);

    }

    //Check condition if the file is xls file

    else if(fileExtensionName.equals(".xls")){

        //If it is xls file then create object of HSSFWorkbook class

        guru99Workbook = new HSSFWorkbook(inputStream);

    }

    //Read sheet inside the workbook by its name

    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);

    //Find number of rows in excel file

    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();

    //Create a loop over all the rows of excel file to read it

    for (int i = 0; i < rowCount+1; i++) {

        Row row = guru99Sheet.getRow(i);

        //Create a loop to print cell values in a row

        for (int j = 0; j < row.getLastCellNum(); j++) {

            //Print Excel data in console

            System.out.print(row.getCell(j).getStringCellValue()+"|| ");

        }

        System.out.println();
    } 

    }  

    //Main function is calling readExcel function to read data from excel file

    public static void main(String...strings) throws IOException{

    //Create an object of ReadGuru99ExcelFile class

    ReadGuru99ExcelFile objExcelFile = new ReadGuru99ExcelFile();

    //Prepare the path of excel file

    String filePath = System.getProperty("user.dir")+"\\src\\excelExportAndFileIO";

    //Call read file method of the class to read data

    objExcelFile.readExcel(filePath,"ExportExcel.xlsx","ExcelGuru99Demo");

    }

}

Примечание: Мы не используем TestNG рамки здесь. Запустите класс как Java Приложение, использующее функцию чтения Excel в Selenium как показано в примере выше.

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

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

Запись данных в файл Excel

Полный пример: Здесь мы пытаемся записать данные из файла Excel, добавив новую строку в файл Excel.

package excelExportAndFileIO;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class WriteGuru99ExcelFile {

    public void writeExcel(String filePath,String fileName,String sheetName,String[] dataToWrite) throws IOException{

        //Create an object of File class to open xlsx file

        File file =    new File(filePath+"\\"+fileName);

        //Create an object of FileInputStream class to read excel file

        FileInputStream inputStream = new FileInputStream(file);

        Workbook guru99Workbook = null;

        //Find the file extension by splitting  file name in substring and getting only extension name

        String fileExtensionName = fileName.substring(fileName.indexOf("."));

        //Check condition if the file is xlsx file

        if(fileExtensionName.equals(".xlsx")){

        //If it is xlsx file then create object of XSSFWorkbook class

        guru99Workbook = new XSSFWorkbook(inputStream);

        }

        //Check condition if the file is xls file

        else if(fileExtensionName.equals(".xls")){

            //If it is xls file then create object of XSSFWorkbook class

            guru99Workbook = new HSSFWorkbook(inputStream);

        }    

    //Read excel sheet by sheet name    

    Sheet sheet = guru99Workbook.getSheet(sheetName);

    //Get the current count of rows in excel file

    int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();

    //Get the first row from the sheet

    Row row = sheet.getRow(0);

    //Create a new row and append it at last of sheet

    Row newRow = sheet.createRow(rowCount+1);

    //Create a loop over the cell of newly created Row

    for(int j = 0; j < row.getLastCellNum(); j++){

        //Fill data in row

        Cell cell = newRow.createCell(j);

        cell.setCellValue(dataToWrite[j]);

    }

    //Close input stream

    inputStream.close();

    //Create an object of FileOutputStream class to create write data in excel file

    FileOutputStream outputStream = new FileOutputStream(file);

    //write data in the excel file

    guru99Workbook.write(outputStream);

    //close output stream

    outputStream.close();
	
    }

    public static void main(String...strings) throws IOException{

        //Create an array with the data in the same order in which you expect to be filled in excel file

        String[] valueToWrite = {"Mr. E","Noida"};

        //Create an object of current class

        WriteGuru99ExcelFile objExcelFile = new WriteGuru99ExcelFile();

        //Write the file using file name, sheet name and the data to be filled

        objExcelFile.writeExcel(System.getProperty("user.dir")+"\\src\\excelExportAndFileIO","ExportExcel.xlsx","ExcelGuru99Demo",valueToWrite);

    }

}

Затем в рабочую книгу добавляется эта строка.

В электронную таблицу Excel добавлена ​​новая строка с указанием г-на Э и города Нойда.

Манипулирование Excel с использованием JXL API

JXL также является еще одним известным банком для чтения файлов Excel. Java и запись файлов. В настоящее время POI используется в большинстве проектов, но до POI использовался только JXL. Java API для манипуляций с Excel. Это очень маленький и простой API для чтения Excel. Selenium.

JXL jar-файл указан в библиотеках проекта.

СОВЕТЫ: Я бы посоветовал не использовать JXL в новых проектах, потому что библиотека не находится в активной разработке с 2010 года — 2.6.12 по-прежнему является её последним релизом — и в ней отсутствует необходимая функциональность по сравнению с POI API.

Скачать JXL:

Если вы хотите работать с JXL, вы можете скачать его по этой ссылке.

https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/

В этом заархивированном файле вы также найдете демонстрационный пример для JXL, например.tracНиже представлено содержимое, указанное в тексте.

ExtracАрхив ted JXL, содержащий папки jar, documentation и demo.

Некоторые из особенностей:

  • JXL может читать файл Excel в Selenium для рабочей книги 95, 97, 2000, XP, 2003.
  • Мы можем работать с английским, французским, испанским, немецким языками.
  • Возможно копирование диаграммы и вставка изображения в Excel.

недостаток:

  • Мы можем писать только в Excel 97 и более поздних версиях (написание в Excel 95 не поддерживается).
  • JXL не поддерживает формат XLSX файла Excel.
  • Он генерирует электронную таблицу в формате Excel 2000.

Часто задаваемые вопросы (FAQ)

Объявлять poi-ooxml, не только poi. Он транзитивно подтягивает poi и предоставляет классы XSSF, необходимые для XLSX. Версия 5.5.1 является актуальной.

В части POI, касающейся OOXML, отсутствует или отсутствует необходимая поддержка. Добавьте poi-ooxml и используйте одну версию для всех артефактов POI, поскольку при смешанных релизах классы схемы могут оказаться вне пути.

Функция getStringCellValue работает только с текстовыми ячейками. Используйте DataFormatter для чтения любой ячейки как строки или проверьте getCellType и вызовите FormulaEvaluator для формул.

При отсутствии строки или ячейки возвращается значение null, поэтому цикл выдает исключение NullPointerException. Сначала проверьте наличие значения null или CellType.BLANK, либо установите MissingCellPolicy, чтобы пустые ячейки возвращали пустые ячейки.

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

Второй пилот GitHub черновики, созданные на основе комментариев читателей и авторов. RevПросмотрите это, потому что это часто указывает на устаревшие константы типов клеток из более старых версий POI.

SXSSFWorkbook записывает строки на диск потоком, а не хранит рабочую книгу в памяти, поэтому при больших объемах экспорта ошибка OutOfMemoryError больше не возникает. При чтении обрабатывайте строки внутри цикла.

Разместите его в папке src/test/resources и сформируйте путь с помощью System.getProperty(“user.dir”). Абсолютные пути перестанут работать, если набор тестов запустится в другом месте или на другом сервере. Jenkins агент.

Подведем итог этой публикации следующим образом: