Як читати/записувати дані з файлу Excel: Selenium POI
Файловий IO є важливою частиною будь-якого програмного процесу. Ми часто створюємо файл, відкриваємо його та щось оновлюємо або видаляємо на своїх комп’ютерах. Те ж саме у випадку з Selenium автоматизація. Нам потрібен процес для роботи з файлами Selenium.
Java надає нам різні класи для роботи з файлами Selenium. У цьому підручнику ми навчимося читати та писати далі перевершувати файл за допомогою Java Пакет IO і Apache Бібліотека POI.
Apache POI в Selenium
Команда Apache POI в Selenium це широко використовуваний API для тестування на основі даних селену. Це бібліотека POI, написана в Java який надає користувачам API для маніпулювання Microsoft такі документи, як .xls і .xlsx. Користувачі можуть легко створювати, змінювати та читати/записувати файли Excel. POI означає «Погана реалізація обфускації».
Експорт Excel
Як працювати з файлом Excel за допомогою POI (залежність Maven POM)
Для читання та запису файлу Excel Java, Apache надає дуже відому бібліотеку POI. Ця бібліотека достатньо здатна читати і писати обидва XLS та XLSX формат файлу Excel.
Читати XLS файли, ан HSSF реалізацію забезпечує бібліотека POI.
Читати XLSX, XSSF впровадження POI бібліотека буде вибір. Давайте детально вивчимо ці реалізації.
Якщо ви використовуєте Maven у своєму проекті, залежність Maven буде
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Або ви можете просто завантажити останню версію POI jar з http://poi.apache.org/download.html & завантажити найновіший файл zip
Коли ви завантажуєте zip-файл для цього jar, вам потрібно розархівувати його та додати всі jar-файли до шляху класу вашого проекту.
Класи та інтерфейси в POI

Нижче наведено список різних Java Інтерфейси та класи в POI для читання XLS та XLSX файл-
- робочий зошит: класи XSSFWorkbook і HSSFWorkbook реалізують цей інтерфейс.
- XSSFРобочий зошит: це представлення класу файлу XLSX.
- HSSF Робочий зошит: це представлення класу файлу XLS.
- лист: Класи XSSFSheet і HSSFSheet реалізують цей інтерфейс.
- XSSFSsheet: це клас, що представляє аркуш у файлі XLSX.
- HSSFSsheet: це клас, що представляє аркуш у файлі XLS.
- Рядок: Класи XSSFRow і HSSFRow реалізують цей інтерфейс.
- XSSFRow: це клас, що представляє рядок на аркуші файлу XLSX.
- HSSFRow: це клас, що представляє рядок на аркуші файлу XLS.
- Осередок: Класи XSSFCell і HSSFCell реалізують цей інтерфейс.
- XSSFCell: це клас, що представляє комірку в рядку файлу XLSX.
- HSSFCell: Це клас, що представляє комірку в рядку файлу XLS.
Операція читання/запису
Для нашого прикладу ми розглянемо наведений нижче формат файлу Excel
Читання даних із файлу 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
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 за допомогою JXL API
JXL також є ще одним відомим jar для читання файлу Excel Java і запис файлів. Зараз POI використовується в більшості проектів, але до POI використовувався лише JXL Java API для роботи з Excel. Це дуже маленький і простий API для читання в Excel Selenium.
ПОРАДИ. Я пропоную не використовувати JXL у жодному новому проекті, оскільки бібліотека не знаходиться в активній розробці з 2010 року та не має цієї функції порівняно з POI API.
Завантажити JXL:
Якщо ви хочете працювати з JXL, ви можете завантажити його за цим посиланням
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Ви також можете отримати демонстраційний приклад у цьому заархівованому файлі для JXL.
Деякі функції:
- JXL може читати файл Excel Selenium для 95, 97, 2000, XP, 2003 робочий зошит.
- Ми можемо працювати з англійською, французькою, іспанською, німецькою мовами.
- Можливе копіювання діаграми та вставка зображення в Excel
Недолік:
- Ми можемо писати лише Excel 97 і новіші версії (запис у Excel 95 не підтримується).
- JXL не підтримує формат файлу Excel XLSX.
- Він створює електронну таблицю у форматі Excel 2000.
Підсумки
- Файл Excel можна прочитати Java Операція IO. Для цього нам потрібно використовувати Apache POI Jar.
- Є два типи робочої книги у файлі Excel, XLSX та XLS файли.
- POI має різні інтерфейси Workbook, Sheet, Row, Cell.
- Ці інтерфейси реалізовані відповідними XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) і XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) класи роботи з файлами.
- JXL — ще один API для роботи з Excel Selenium.
- JXL не може працювати з форматом XLSX Excel.









