Kako čitati/pisati Excel podatke u Selenium Korištenje Apache POI-a

⚡ Pametni sažetak

Pogon za Excel datoteke Selenium testovi temeljeni na podacima, a Apache POI je Java biblioteka koja ih čita i zapisuje. Odjeljci u nastavku pokrivaju ovisnost, osnovne klase, primjere čitanja i pisanja te JXL.

  • 🔘 Dva formata: HSSF klase rukuju .xls datotekama, XSSF klase rukuju .xlsx datotekama.
  • ✅ Osnovna sučelja: Radna knjiga, list, redak i ćelija zrcale proračunsku tablicu.
  • 🧪 Čitanje: FileInputStream plus getLastRowNum ponavlja svaki redak i ćeliju.
  • 🛠️ Pisanje: createRow i setCellValue dodaju podatke, FileOutputStream ih sprema.
  • 📊 Naslijeđe: JXL čita stare radne knjige, ali ne i XLSX.

Čitanje i pisanje Excel podataka u Selenium s Apache POI-jem

Datotečni IO kritičan je dio svakog softverskog procesa. Često stvaramo datoteku, otvaramo je i ažuriramo nešto ili brišemo na našim računalima. Isti je slučaj sa Selenium Automatizacija. Trebamo proces za manipuliranje datotekama Selenium.

Java nudi nam različite klase za manipulaciju datotekama Selenium. U ovom ćemo vodiču naučiti kako dalje čitati i pisati nadmašiti datoteka uz pomoć Java IO paket i apaš Biblioteka POI.

Apache POI u Selenium

The Apache POI u Selenium je široko korišteni API za Selenium testiranje vođeno podacimaTo je POI biblioteka napisana u Java koji korisnicima daje API za manipuliranje Microsoft dokumente poput .xls i .xlsx. Korisnici mogu jednostavno stvarati, mijenjati i čitati/pisati u Excel datoteke. POI je kratica za „Lošu implementaciju prikrivanja“ (Poor Obfuscation Implementation).

Kako rukovati Excel datotekom pomoću POI-a (Maven POM ovisnost)

Poveznice s točkama interesa Selenium test prema donjoj radnoj bilježnici.

Apache POI djeluje kao most između Selenium test i Excel radna knjiga

Za čitanje i pisanje Excel datoteke JavaApache pruža vrlo poznatu biblioteku POI. Ova biblioteka je dovoljno sposobna za čitanje i pisanje datoteka u formatu XLS i XLSX programa Excel.

Za čitanje XLS datoteka, POI biblioteka pruža HSSF implementaciju.

Za čitanje XLSX-a, XSSF implementacija POI biblioteke bit će izbor. Proučimo ove implementacije detaljnije.

Ako koristite Maven u svom projektu, Maven ovisnost će biti dodana u pom.xml kao što je prikazano u nastavku.

Dodan je unos ovisnosti POI-a u datoteku pom.xml Maven projekta

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>

Napomena o verziji: 4.1.1 je izvorni primjer; trenutni projekti deklariraju poi-ooxml 5.5.1, što je potrebno za XLSX.

Ili jednostavno možete preuzeti najnoviju verziju POI jara s http://poi.apache.org/download.html & preuzmite najnoviju zip datoteku

Stranica za preuzimanje Apache POI-ja s popisom binarnih i izvornih distribucijskih arhiva

Kada preuzmete zip datoteku za ovaj jar, trebate ga raspakirati i dodati sve te jar-ove u put klase vašeg projekta.

Dodane raspakirane jar datoteke s točkama interesa Java put izgradnje projekta

Klase i sučelja u POI

Slijedi popis različitih Java Sučelja i klase u POI-ju za čitanje XLS i XLSX datoteka, prikazani u nastavku -

Hijerarhija klasa POI od radne knjige do lista, retka i ćelije

  • Radna bilježnica: Klase XSSFWorkbook i HSSFWorkbook implementiraju ovo sučelje.
  • XSSFRadna knjiga: Je klasna reprezentacija XLSX datoteke.
  • HSSFRadna bilježnica: Je klasna reprezentacija XLS datoteke.
  • List: Klase XSSFSheet i HSSFSheet implementiraju ovo sučelje.
  • XSSFList: Je klasa koja predstavlja list u XLSX datoteci.
  • HSSFS list: Je klasa koja predstavlja list u XLS datoteci.
  • Red: Klase XSSFRow i HSSFRow implementiraju ovo sučelje.
  • XSSFrow: Je klasa koja predstavlja red u listu XLSX datoteke.
  • HSSFRow: Je klasa koja predstavlja red u listu XLS datoteke.
  • Cell: Klase XSSFCell i HSSFCell implementiraju ovo sučelje.
  • XSSFCelija: Je klasa koja predstavlja ćeliju u retku XLSX datoteke.
  • HSSFCell: Je klasa koja predstavlja ćeliju u nizu XLS datoteke.

Read / Write OperaANJE

Za naš primjer, razmotrit ćemo dolje dati Excel format datoteke

Primjer radne knjige ExportExcel s ExcelomGuru99Demo list korišten u oba primjera

Čitanje podataka iz Excel datoteke

Potpuni primjer: Ovdje pokušavamo pročitati podatke iz Excela u 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");

    }

}

Bilješka: Mi ne koristimo TestNG okvir ovdje. Vodite razred kao Java Aplikacija koja koristi funkciju read excel in Selenium kao što je prikazano u gornjem primjeru.

Konzola zatim ispisuje svaki redak, ćeliju po ćeliju.

Izlaz konzole koji prikazuje svaki redak Excela ispisan s vrijednostima ćelija odvojenim okomitim crtama

Zapisivanje podataka u Excel datoteku

Potpuni primjer: Ovdje pokušavamo pisati podatke iz Excel datoteke dodavanjem novog retka u Excel datoteku.

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

    }

}

Radna knjiga zatim sadrži dodani redak.

Excel tablica nakon dodavanja novog retka s g. E i Noidom

Excel manipulacija pomoću JXL API-ja

JXL je također još jedan poznati jar za čitanje Excel datoteke Java i pisanje datoteka. Danas se POI koristi u većini projekata, ali prije POI-a bio je samo JXL Java API za manipulaciju Excelom. To je vrlo mali i jednostavan API za čitanje programa Excel Selenium.

JXL jar datoteka navedena među bibliotekama projekta

SAVJETI: Moj prijedlog je da ne koristite JXL ni u jednom novom projektu jer biblioteka nije u aktivnom razvoju od 2010. - 2.6.12 je još uvijek njezino najnovije izdanje - i nedostaje joj ta značajka u usporedbi s POI API-jem.

Preuzmite JXL:

Ako želite raditi s JXL-om, možete ga preuzeti s ove poveznice

https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/

Također možete dobiti demo primjer unutar ove zip datoteke za JXL, kao npr.tracprikazani sadržaji u nastavku.

ExtracTedova JXL arhiva koja prikazuje jar, dokumentaciju i demo mape

Neke značajke:

  • JXL može čitati Excel datoteku Selenium za 95, 97, 2000, XP, 2003 radna knjižica.
  • Možemo raditi s engleskim, francuskim, španjolskim, njemačkim jezikom.
  • Kopiranje grafikona i umetanje slike u Excelu je moguće

Nedostatak:

  • Možemo pisati samo Excel 97 i novije (pisanje u Excelu 95 nije podržano).
  • JXL ne podržava XLSX format excel datoteke.
  • Generira proračunsku tablicu u formatu Excel 2000.

Pitanja i odgovori

Proglasiti poi-ooxml, ne samo poi. Tranzitivno dohvaća poi i osigurava XSSF klase koje XLSX treba. Trenutna verzija je 5.5.1.

OOXML strana POI-a nedostaje ili se ne podudara. Dodajte poi-ooxml i zadržite svaki artefakt POI-a na jednoj verziji, budući da miješana izdanja izostavljaju klase shema iz putanje.

getStringCellValue radi samo na tekstualnim ćelijama. Koristite DataFormatter za čitanje bilo koje ćelije kao niza znakova ili provjerite getCellType i pozovite FormulaEvaluator na formulama.

Nedostajući redak ili ćelija vraća null, pa petlja izbacuje NullPointerException. Prvo testirajte null ili CellType.BLANK ili postavite MissingCellPolicy tako da praznine vraćaju prazne ćelije.

Modeli strojnog učenja generiraju realistične retke, označavaju duplikate i rangiraju koje kombinacije najbolje otkrivaju nedostatke, uklanjajući nadute dijelove. testiranje vođeno podacima listova.

GitHub kopilot iz komentara izrađuje predloške za čitanje i pisanje. Revpogledajte ga, jer često predlaže zastarjele konstante tipova ćelija iz starijih izdanja POI-a.

SXSSFWorkbook struji retke na disk umjesto da drži radnu knjigu u memoriji, tako da veliki izvozi prestaju izbacivati ​​OutOfMemoryError. Prilikom čitanja, obrađuje retke unutar petlje.

Držite ga pod src/test/resources i izgradite putanju iz System.getProperty(“user.dir”). Apsolutne putanje se prekidaju kada se paket pokrene negdje drugdje ili na Jenkins agent.

Sažmite ovu objavu uz: