Cum se citesc/scriu date în Excel Selenium Utilizarea Apache POI

⚡ Rezumat inteligent

Unitate de fișiere Excel Selenium teste bazate pe date, iar Apache POI este Java o bibliotecă ce le citește și le scrie. Secțiunile de mai jos acoperă dependența, clasele de bază, exemplele de citire și scriere și JXL.

  • 🔘 Două formate: Clasele HSSF gestionează fișiere .xls, clasele XSSF gestionează fișiere .xlsx.
  • Interfețe principale: Registrul de lucru, Foaia de calcul, Rândul și Celula oglindesc o foaie de calcul.
  • 🧪 Citind: FileInputStream plus getLastRowNum parcurg fiecare rând și celulă.
  • 🛠️ Scris: createRow și setCellValue adaugă date, iar FileOutputStream le salvează.
  • 📊 Moştenire: JXL citește registre de lucru vechi, dar nu XLSX.

Citirea și scrierea datelor Excel în Selenium cu Apache POI

File IO este o parte critică a oricărui proces software. În mod frecvent, creăm un fișier, îl deschidem și actualizăm ceva sau îl ștergem din computerele noastre. La fel este și cazul Selenium Automatizare. Avem nevoie de un proces cu care să manipulăm fișierele Selenium.

Java ne oferă diferite clase pentru manipularea fișierelor Selenium. În acest tutorial, vom învăța cum putem citi și scrie mai departe Excel fișier cu ajutorul Java pachet IO și Apache Biblioteca POI.

Apache POI în Selenium

Apache POI în Selenium este un API utilizat pe scară largă pentru Selenium testare bazată pe dateEste o bibliotecă POI scrisă în Java care oferă utilizatorilor un API pentru manipulare Microsoft documente precum .xls și .xlsx. Utilizatorii pot crea, modifica și citi/scrie cu ușurință în fișiere Excel. POI înseamnă „Implementare slabă a ofuscării”.

Cum se gestionează fișierele Excel folosind POI (dependența Maven POM)

Legături POI Selenium test la caietul de lucru de mai jos.

Apache POI acționând ca o punte între un Selenium test și un registru de lucru Excel

Pentru a citi și a scrie fișierul Excel în JavaApache oferă o bibliotecă POI foarte faimoasă. Această bibliotecă este suficient de capabilă să citească și să scrie fișiere Excel atât în ​​format XLS, cât și XLSX.

Pentru a citi fișiere XLS, biblioteca POI oferă o implementare HSSF.

Pentru a citi XLSX, implementarea XSSF a bibliotecii POI va fi alegerea potrivită. Să studiem aceste implementări în detaliu.

Dacă utilizați Maven în proiectul dvs., dependența Maven va fi adăugată la pom.xml, așa cum se arată mai jos.

Intrare de dependență POI adăugată la fișierul pom.xml al unui proiect Maven

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

Notă privind versiunea: 4.1.1 este exemplul original; proiectele actuale declară poi-ooxml 5.5.1, care este necesară pentru XLSX.

Sau pur și simplu puteți descărca cea mai recentă versiune POI borcane de la http://poi.apache.org/download.html și descărcați cel mai recent fișier zip

Pagina de descărcare Apache POI care listează arhivele de distribuție binare și sursă

Când descărcați fișierul zip pentru acest borcan, trebuie să îl dezarhivați și să adăugați toate aceste borcane la calea de clasă a proiectului dumneavoastră.

Fișierele jar POI dezarhivate au fost adăugate la Java calea de construire a proiectului

Clase și interfețe în POI

Mai jos este o listă de diferite Java Interfețe și clase în POI pentru citirea fișierelor XLS și XLSX, prezentate mai jos -

Ierarhia claselor POI de la Registrul de lucru la Foaie, Rând și Celulă

  • Workbook: Clasele XSSFWorkbook și HSSFWorkbook implementează această interfață.
  • Caiet de lucru XSSF: Este o reprezentare de clasă a fișierului XLSX.
  • Caiet de lucru HSSF: Este o reprezentare de clasă a unui fișier XLS.
  • Foaie: Clasele XSSFSheet și HSSFSheet implementează această interfață.
  • Foaie XSSFSheet: Este o clasă care reprezintă o foaie într-un fișier XLSX.
  • Foaie HSSFSheet: Este o clasă care reprezintă o foaie dintr-un fișier XLS.
  • Rând: Clasele XSSFRow și HSSFRow implementează această interfață.
  • XSSFRow: Este o clasă care reprezintă un rând într-o foaie de calcul a fișierului XLSX.
  • HSSFRow: Este o clasă care reprezintă un rând într-o foaie de calcul a unui fișier XLS.
  • Cell: Clasele XSSFCell și HSSFCell implementează această interfață.
  • XSSFCelă: Este o clasă care reprezintă o celulă dintr-un rând al unui fișier XLSX.
  • Celulă HSSFC: Este o clasă care reprezintă o celulă dintr-un rând de fișier XLS.

Citeste, scrie OperaTION

Pentru exemplul nostru, vom lua în considerare mai jos formatul de fișier Excel dat

Exemplu de registru de lucru ExportExcel cu ExcelGuruFișă 99Demo utilizată de ambele exemple

Citiți date din fișierul Excel

Exemplu complet: Aici încercăm să citim date din Excel în 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");

    }

}

Notă: Nu folosim TestNG cadru aici. Rulați clasa ca Java Aplicație care utilizează funcția citire excel în Selenium așa cum se arată în exemplul de mai sus.

Consola imprimă apoi fiecare rând, celulă cu celulă.

Rezultatul consolei afișează fiecare rând Excel imprimat cu valorile celulelor separate prin bare verticale

Scrieți date într-un fișier Excel

Exemplu complet: Aici încercăm să scriem date dintr-un fișier Excel prin adăugarea unui nou rând în fișierul 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);

    }

}

Registrul de lucru conține apoi rândul adăugat.

Foaie Excel după adăugarea noului rând cu dl. E și Noida

Manipulare Excel folosind API-ul JXL

JXL este, de asemenea, un alt borcan faimos pentru a citi fișierul Excel Java și scrierea fișierelor. În zilele noastre, POI este folosit în majoritatea proiectelor, dar înainte de POI, JXL era doar Java API pentru manipularea Excel. Este un API foarte mic și simplu pentru citirea Excel Selenium.

Fișierul JXL jar este listat printre bibliotecile proiectului

SFATURI: Sugestia mea este să nu folosiți JXL în niciun proiect nou, deoarece biblioteca nu este în dezvoltare activă din 2010 — 2.6.12 este încă cea mai recentă versiune — și lipsa acestei funcții lipsește în comparație cu API-ul POI.

Descărcați JXL:

Dacă doriți să lucrați cu JXL, îl puteți descărca de pe acest link

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

De asemenea, puteți obține un exemplu demonstrativ în acest fișier zip pentru JXL, deoarece ex.tracCuprinsul prezentat mai jos.

Extracarhiva ted JXL care prezintă fișierul jar, documentația și folderele demo

Unele dintre caracteristici:

  • JXL este capabil să citească fișierul Excel în Selenium pentru registrul de lucru 95, 97, 2000, XP, 2003.
  • Putem lucra cu engleza, franceza, spaniola, germana.
  • Copierea unei diagrame și inserarea unei imagini în Excel este posibilă

Dezavantaj:

  • Putem scrie doar Excel 97 și mai târziu (scrierea în Excel 95 nu este acceptată).
  • JXL nu acceptă formatul XLSX al fișierului Excel.
  • Acesta generează o foaie de calcul în format Excel 2000.

Întrebări frecvente

Declara poi-ooxml, nu doar poi. Extrage poi tranzitiv și furnizează clasele XSSF de care are nevoie XLSX. Versiunea 5.5.1 este cea actuală.

Partea OOXML a POI lipsește sau nu este potrivită. Adăugați poi-ooxml și păstrați fiecare artefact POI pe o singură versiune, deoarece versiunile mixte omit clasele schemă în afara căii.

getStringCellValue funcționează doar cu celule text. Folosește DataFormatter pentru a citi orice celulă ca șir de caractere sau verifică getCellType și apelează FormulaEvaluator pentru formule.

Un rând sau o celulă lipsă returnează null, deci bucla generează o excepție NullPointerException. Testați mai întâi pentru null sau CellType.BLANK sau setați o MissingCellPolicy astfel încât spațiile libere să returneze celule goale.

Modelele de învățare automată generează rânduri realiste, semnalează duplicatele și clasifică combinațiile care expun cel mai bine defectele, eliminând erorile. testare bazată pe date foi.

Copilotul GitHub creează un șablon standard pentru cititor și scriitor dintr-un comentariu. RevVedeți-o, deoarece sugerează adesea constante de tip de celulă depreciate din versiuni POI mai vechi.

SXSSFWorkbook transmite rânduri pe disc în loc să păstreze registrul de lucru în memorie, astfel încât exporturile mari nu mai generează OutOfMemoryError. La citire, gestionează rândurile din interiorul buclei.

Păstrați-l sub src/test/resources și construiți calea din System.getProperty(„user.dir”). Căile absolute se întrerup odată ce suita rulează în altă parte sau pe un Jenkins agent.

Rezumați această postare cu: