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. Das Gleiche gilt für Selenium Automation. Wir benötigen einen Prozess zum Bearbeiten von Dateien mit Selenium.

Java stellt uns verschiedene Klassen für die Dateimanipulation mit Selenium zur Verfügung. In diesem Tutorial lernen wir, wie wir lesen und schreiben können Excel Datei mit Hilfe von Javac IO-Paket und Apache POI-Bibliothek.

Apache-POI in Selenium

Der Apache-POI in Selenium ist eine weit verbreitete API für datengesteuerte Selenium-Tests. Es handelt sich um eine in Java geschriebene POI-Bibliothek, die Benutzern eine API zur Bearbeitung 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)

Behandeln Sie Excel-Dateien mithilfe von POI

Zum Lesen und Schreiben von Excel-Dateien in Java bietet Apache eine sehr bekannte POI-Bibliothek. Diese Bibliothek ist in der Lage, beides zu lesen und 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

Behandeln Sie Excel-Dateien mithilfe von POI

<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

Behandeln Sie Excel-Dateien mithilfe von POI

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.

Behandeln Sie Excel-Dateien mithilfe von POI

Klassen und Schnittstellen in POI

Klassen und Schnittstellen in Apache POI
Klassen und Schnittstellen in Apache POI

Following ist 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

Lese-/Schreibvorgang

Daten aus Excel-Datei lesen

Vollständiges Beispiel: Hier versuchen wir, Daten aus Excel in Selenium zu lesen:

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 Rahmen hier. Führen Sie die Klasse als Java-Anwendung mit der Funktion „read excel“ in Selenium aus, wie im obigen Beispiel gezeigt.

Lesen Sie Daten aus einer Excel-Datei

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);

    }

}

Daten in eine Excel-Datei schreiben

Excel-Manipulation mithilfe der JXL-API

Excel-Manipulation mithilfe der JXL-API

JXL ist auch ein weiteres bekanntes Jar zum Lesen von Excel-Dateien in Java und zum Schreiben von Dateien. Heutzutage wird POI in den meisten Projekten verwendet, aber vor POI war JXL nur eine Java-API für die Excel-Manipulation. Es handelt sich um eine sehr kleine und einfache API zum Excel-Lesen 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/

Excel-Manipulation mithilfe der JXL-API

Sie können in dieser ZIP-Datei auch ein Demo-Beispiel für JXL abrufen.

Einige der Funktionen:

  • JXL kann Excel-Dateien in Selenium für 95, 97, 2000, XP, 2003-Arbeitsmappen lesen.
  • 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 Excel 97 schreiben und later nur (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 durch Java IO-Operation gelesen werden. 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 in Selenium.
  • JXL kann nicht mit dem XLSX-Format von Excel arbeiten.