Jak czytać/zapisywać dane z pliku Excel: Selenium POI
Plik I/O jest kluczową częścią każdego procesu tworzenia oprogramowania. Często tworzymy plik, otwieramy go i aktualizujemy coś lub usuwamy z naszych komputerów. Podobnie jest z Selenium Automatyzacja. Potrzebujemy procesu do manipulowania plikami Selenium.
Java udostępnia nam różne klasy do manipulacji plikami Selenium. W tym samouczku dowiemy się, jak czytać i pisać przewyższać plik za pomocą Java Pakiet IO i Apache Biblioteka POI.
Punkty POI Apache w Selenium
Punkty POI Apache w Selenium jest szeroko stosowanym API do testowania danych selenowych. Jest to biblioteka POI napisana w Java który zapewnia użytkownikom interfejs API do manipulacji Microsoft dokumenty takie jak .xls i .xlsx. Użytkownicy mogą łatwo tworzyć, modyfikować i czytać/zapisywać w plikach Excel. POI oznacza „słabą implementację zaciemniania”.
Eksportowanie Excela
Jak obsługiwać plik Excel przy użyciu POI (zależność Maven POM)
Aby czytać i zapisywać plik Excel w Java, Apache udostępnia bardzo znaną bibliotekę POI. Ta biblioteka jest w stanie czytać i pisać zarówno XLS oraz XLSX formacie pliku Excel.
Czytać XLS pliki, an HSSF implementację zapewnia biblioteka POI.
Czytać XLSX, XSSF Wdrożenie POI biblioteka będzie wyborem. Przeanalizujmy szczegółowo te implementacje.
Jeśli używasz Mavena w swoim projekcie, zależność Mavena będzie
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Możesz też po prostu pobrać najnowszą wersję słoików POI http://poi.apache.org/download.html i pobierz najnowszy plik zip
Po pobraniu pliku zip dla tego słoika musisz go rozpakować i dodać wszystkie słoiki do ścieżki klas swojego projektu.
Klasy i interfejsy w POI

Poniżej znajduje się lista różnych Java Interfejsy i klasy w POI do czytania XLS oraz XLSX filet-
- Podręcznik z ćwiczeniami: Klasy XSSFWorkbook i HSSFWorkbook implementują ten interfejs.
- XSSFWorkbook: Jest reprezentacją klasy pliku XLSX.
- Podręcznik HSSF: Jest reprezentacją klasy pliku XLS.
- arkusz: Klasy XSSFSheet i HSSFSheet implementują ten interfejs.
- Arkusz XSSF: Jest klasą reprezentującą arkusz w pliku XLSX.
- Arkusz HSSF: Jest klasą reprezentującą arkusz w pliku XLS.
- Rząd: Klasy XSSFRow i HSSFRow implementują ten interfejs.
- XSSFow: Jest klasą reprezentującą wiersz w arkuszu pliku XLSX.
- HSSFRow: Jest klasą reprezentującą wiersz w arkuszu pliku XLS.
- Komórka: Klasy XSSFCell i HSSFCell implementują ten interfejs.
- XSSFCell: Jest klasą reprezentującą komórkę w wierszu pliku XLSX.
- Komórka HSSFC: Jest klasą reprezentującą komórkę w wierszu pliku XLS.
Operacja odczytu/zapisu
W naszym przykładzie rozważymy poniżej podany format pliku Excel
Odczytaj dane z pliku Excel
Kompletny przykład: Tutaj próbujemy odczytać dane z Excela w 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");
}
}
Uwaga: nie używamy Testowanie ramy tutaj. Uruchom klasę jako Java Aplikacja korzystająca z funkcji odczytu Excela Selenium jak pokazano w powyższym przykładzie.
Zapisz dane w pliku Excel
Kompletny przykład: Tutaj próbujemy zapisać dane z pliku Excel, dodając nowy wiersz w pliku 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);
}
}
Manipulacja w Excelu przy użyciu JXL API
JXL to także kolejny znany słoik do odczytu pliku Excel Java i zapisywanie plików. Obecnie POI jest używany w większości projektów, ale przed POI był tylko JXL Java API do manipulacji Excelem. Jest to bardzo mały i prosty interfejs API do odczytu programu Excel Selenium.
WSKAZÓWKI: Sugeruję, aby nie używać JXL w żadnym nowym projekcie, ponieważ biblioteka nie jest aktywnie rozwijana od 2010 roku i brakuje tej funkcji w porównaniu z API POI.
Pobierz JXL:
Jeśli chcesz pracować z JXL, możesz pobrać go z tego linku
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Możesz także pobrać przykład demonstracyjny w tym spakowanym pliku dla JXL.
Niektóre funkcje:
- JXL jest w stanie odczytać plik Excel Selenium dla skoroszytu 95, 97, 2000, XP, 2003.
- Współpracujemy z językiem angielskim, francuskim, hiszpańskim, niemieckim.
- Możliwe jest kopiowanie wykresu i wstawianie obrazu do Excela
Wada:
- Możemy pisać tylko w programie Excel 97 i nowszych (pisanie w programie Excel 95 nie jest obsługiwane).
- JXL nie obsługuje formatu XLSX pliku Excel.
- Generuje arkusz kalkulacyjny w formacie Excel 2000.
Podsumowanie
- Plik Excel można odczytać Java Operacja IO. W tym celu musimy użyć Apache POI Jar.
- Istnieją dwa rodzaje skoroszytu w pliku Excel, XLSX oraz XLS akta.
- POI ma różne interfejsy: skoroszyt, arkusz, wiersz, komórka.
- Interfejsy te są realizowane poprzez odpowiednie XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) i XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) klasy manipulacji plikami.
- JXL to kolejny interfejs API do obsługi programu Excel w Selenium.
- JXL nie działa z formatem XLSX programu Excel.









