So lesen/schreiben Sie Daten aus einer Excel-Datei: Selenium POI
File IO ist ein wichtiger Teil jedes Softwareprozesses. Wir erstellen häufig eine Datei, öffnen sie und aktualisieren etwas oder löschen sie auf unseren Computern. Gleiches gilt für Selenium Automatisierung. Wir brauchen einen Prozess, mit dem wir Dateien manipulieren können Selenium.
Java stellt uns verschiedene Klassen zur Dateimanipulation zur Verfügung mit Selenium. In diesem Tutorial lernen wir, wie wir lesen und schreiben können Excel Datei mit Hilfe von Java IO-Paket und Apache POI-Bibliothek.
Apache POI in Selenium
Die Apache POI in Selenium ist eine weit verbreitete API für Selenium-datengesteuertes Testen. Es ist eine POI-Bibliothek, die in Java das den Benutzern eine API zur Manipulation bietet Microsoft Dokumente wie .xls und .xlsx. Benutzer können problemlos Excel-Dateien erstellen, ändern und lesen/schreiben. POI steht für „Poor Obfuscation Implementation“.
Excel exportieren
Umgang mit Excel-Dateien mithilfe von POI (Maven POM Dependency)
So lesen und schreiben Sie Excel-Dateien in Java, Apache bietet eine sehr bekannte Bibliothek POI. Diese Bibliothek ist leistungsfähig genug, um sowohl zu lesen als auch zu schreiben XLS und XLSX Dateiformat von Excel.
Lesen XLS Dateien, ein HSSF Die Implementierung wird von der POI-Bibliothek bereitgestellt.
Lesen XLSX, XSSF Implementierung von POI Bibliothek wird die Wahl sein. Lassen Sie uns diese Implementierungen im Detail untersuchen.
Wenn Sie Maven in Ihrem Projekt verwenden, ist die Maven-Abhängigkeit vorhanden
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Oder Sie laden einfach die neueste Version der POI-Jars herunter http://poi.apache.org/download.html & laden Sie die neueste ZIP-Datei herunter
Wenn Sie die ZIP-Datei für dieses JAR herunterladen, müssen Sie es entpacken und alle JAR-Dateien zum Klassenpfad Ihres Projekts hinzufügen.
Klassen und Schnittstellen in POI
Nachfolgend finden Sie eine Liste verschiedener Java Schnittstellen und Klassen in POI zum Lesen XLS und XLSX Filet-
- Workbook: Die Klassen XSSFWorkbook und HSSFWorkbook implementieren diese Schnittstelle.
- XSSFWorkbook: Ist eine Klassendarstellung einer XLSX-Datei.
- HSSFArbeitsmappe: Ist eine Klassendarstellung einer XLS-Datei.
- Blatt: Die Klassen XSSFSheet und HSSFSheet implementieren diese Schnittstelle.
- XSSFSheet: Ist eine Klasse, die ein Blatt in einer XLSX-Datei darstellt.
- HSSFSheet: Ist eine Klasse, die ein Blatt in einer XLS-Datei darstellt.
- Reihe: Die Klassen XSSFRow und HSSFRow implementieren diese Schnittstelle.
- XSSFRow: Ist eine Klasse, die eine Zeile im Blatt der XLSX-Datei darstellt.
- HSSFRow: Ist eine Klasse, die eine Zeile im Blatt der XLS-Datei darstellt.
- Zelle: Die Klassen XSSFCell und HSSFCell implementieren diese Schnittstelle.
- XSSFCell: Ist eine Klasse, die eine Zelle in einer Zeile einer XLSX-Datei darstellt.
- HSSFCelle: Ist eine Klasse, die eine Zelle in einer Zeile einer XLS-Datei darstellt.
Lese-/Schreibvorgang
Für unser Beispiel betrachten wir das unten angegebene Excel-Dateiformat
Daten aus Excel-Datei lesen
Vollständiges Beispiel: Hier versuchen wir, Daten aus Excel einzulesen 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"); } }
Hinweis: Wir verwenden das nicht Testng Framework hier. Führen Sie die Klasse aus als Java Anwendung mit der Funktion „Excel lesen“ in Selenium wie im obigen Beispiel gezeigt.
Schreiben Sie Daten in eine Excel-Datei
Vollständiges Beispiel: Hier versuchen wir, Daten aus einer Excel-Datei zu schreiben, indem wir eine neue Zeile in die Excel-Datei einfügen
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-Manipulation mithilfe der JXL-API
JXL ist auch ein weiteres bekanntes JAR zum Lesen von Excel-Dateien Java und das Schreiben von Dateien. Heutzutage wird POI in den meisten Projekten verwendet, aber vor POI war JXL nur Java API für Excel-Manipulation. Es ist eine sehr kleine und einfache API zum Lesen von Excel in Selenium.
TIPPS: Mein Vorschlag ist, JXL nicht in neuen Projekten zu verwenden, da sich die Bibliothek seit 2010 nicht mehr in der aktiven Entwicklung befindet und diese Funktion im Vergleich zur POI-API fehlt.
JXL herunterladen:
Wenn Sie mit JXL arbeiten möchten, können Sie es über diesen Link herunterladen
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Sie können in dieser ZIP-Datei auch ein Demo-Beispiel für JXL abrufen.
Einige der Funktionen:
- JXL kann Excel-Dateien einlesen Selenium für 95, 97, 2000, XP, 2003 Arbeitsmappe.
- Wir können mit Englisch, Französisch, Spanisch und Deutsch arbeiten.
- Das Kopieren eines Diagramms und das Einfügen von Bildern in Excel ist möglich
Nachteil:
- Wir können nur in Excel 97 und höher schreiben (das Schreiben in Excel 95 wird nicht unterstützt).
- JXL unterstützt das XLSX-Format von Excel-Dateien nicht.
- Es generiert eine Tabelle im Excel 2000-Format.
Zusammenfassung
- Excel-Datei kann gelesen werden von Java IO-Operation. Dafür müssen wir verwenden Apache POI Jar.
- Es gibt zwei Arten von Arbeitsmappen in Excel-Dateien: XLSX und XLS Dateien.
- POI verfügt über verschiedene Schnittstellen: Arbeitsmappe, Blatt, Zeile, Zelle.
- Diese Schnittstellen werden entsprechend implementiert XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) und XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) Dateimanipulationsklassen.
- JXL ist eine weitere API für die Excel-Verarbeitung Selenium.
- JXL kann nicht mit dem XLSX-Format von Excel arbeiten.