File IO является важной частью любого программного процесса. Мы часто создаем файл, открываем и обновляем что-либо или удаляем его на наших компьютерах. То же самое в случае с Selenium Automation. Нам нужен процесс для манипулирования файлами с помощью Selenium.
Java предоставляет нам различные классы для манипулирования файлами с Selenium. В этом уроке мы узнаем, как мы можем читать и писать в файл Excel с помощью пакета Java IO и библиотеки Apache POI.
- Как работать с файлом Excel с помощью POI (Maven POM Dependency)
- Классы и интерфейсы в POI
- Операция чтения / записи
- Чтение данных из файла Excel
- Записать данные в файл Excel
- Манипуляция Excel с использованием JXL API
Экспорт в Excel
Как работать с файлом Excel с помощью POI (Maven POM Dependency)
Для чтения или записи Excel Apache предоставляет очень известную библиотеку POI. Эта библиотека достаточно способна для чтения и записи файлов формата XLS и XLSX в Excel.
Чтобы читать файлы XLS , библиотека POI предоставляет реализацию HSSF .
Чтобы читать XLSX, XSSF реализация библиотеки POI будет выбором. Давайте изучим эти реализации подробно.
Если вы используете Maven в своем проекте, зависимость Maven будет
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Или вы можете просто скачать последнюю версию POI jars с http://poi.apache.org/download.html и скачать последнюю версию zip-файла
Когда вы загружаете zip-файл для этого jar-файла, вам нужно распаковать его и добавить все эти jar-файлы в путь классов вашего проекта.
Классы и интерфейсы в POI:
Following is a list of different Java Interfaces and classes in POI for reading XLS and XLSX file-
- Workbook: XSSFWorkbook and HSSFWorkbook classes implement this interface.
- XSSFWorkbook: Is a class representation of XLSX file.
- HSSFWorkbook: Is a class representation of XLS file.
- Sheet: XSSFSheet and HSSFSheet classes implement this interface.
- XSSFSheet: Is a class representing a sheet in an XLSX file.
- HSSFSheet: Is a class representing a sheet in an XLS file.
- Row: XSSFRow and HSSFRow classes implement this interface.
- XSSFRow: Is a class representing a row in the sheet of XLSX file.
- HSSFRow : класс, представляющий строку в листе файла XLS.
- Cell : классы XSSFCell и HSSFCell реализуют этот интерфейс.
- XSSFCell : класс, представляющий ячейку в строке файла XLSX.
-
HSSFCell: класс, представляющий ячейку в строке файла XLS.
Операция чтения / записи
Для нашего примера мы рассмотрим ниже данный формат файла Excel
Чтение данных из файла Excel
Полный пример: здесь мы пытаемся прочитать данные из файла Excel
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
Полный пример: здесь мы пытаемся записать данные из файла 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 — это еще одна известная банка для чтения файлов Excel. Теперь дневная POI используется в большинстве проектов, но до POI JXL был только Java API для работы с Excel. Это очень маленький и простой API.
СОВЕТЫ: Мое предложение — не использовать JXL в каком-либо новом проекте, потому что библиотека не находится в активной разработке с 2010 года и не имеет возможности по сравнению с POI API.
Скачать JXL:
Если вы хотите работать с JXL, вы можете скачать его по этой ссылке
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Вы также можете получить демонстрационный пример внутри этого zip-файла для JXL.
Некоторые из особенностей:
- JXL может читать книги Excel 95, 97, 2000, XP, 2003.
- Мы можем работать с английским, французским, испанским, немецким языками.
- Возможно копирование диаграммы и вставка изображения в Excel
недостаток:
- Мы можем писать только в Excel 97 и более поздних версиях (запись в Excel 95 не поддерживается).
- JXL не поддерживает XLSX-формат файла Excel.
- Создает электронную таблицу в формате Excel 2000.
Резюме:
- Файл Excel можно прочитать с помощью операции ввода-вывода Java. Для этого нам нужно использовать Apache POI Jar .
- Существует два вида рабочих книг в файле Excel: файлы XLSX и XLS .
- POI имеет различные интерфейсы Workbook, Sheet, Row, Cell.
- Эти интерфейсы реализуются соответствующими классами манипулирования файлами XLS ( HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell ) и XLSX ( XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell ).
- JXL — это еще один API для манипулирования Excel.
- JXL не может работать с форматом Excel XLSX.









