Hogyan olvassunk/írjunk Excel adatokat? Selenium Apache POI használata

⚡ Okos összefoglaló

Excel fájlok meghajtója Selenium adatvezérelt tesztek, és az Apache POI a Java könyvtár, amely olvassa és írja őket. Az alábbi szakaszok a függőségeket, az alapvető osztályokat, az olvasási és írási példákat, valamint a JXL-t tárgyalják.

  • 🔘 Két formátum: A HSSF osztályok az .xls, az XSSF osztályok az .xlsx fájlokat kezelik.
  • Alapvető interfészek: A Munkafüzet, Munkalap, Sor és Cella egy táblázatot tükröz.
  • 🧪 Olvasás: A FileInputStream és a getLastRowNum függvény minden sorban és cellában ciklust futtat.
  • 🇧🇷 Írás: A createRow és a setCellValue függvények hozzáfűzik az adatokat, a FileOutputStream pedig elmenti azokat.
  • 📊 Örökség: A JXL olvassa a régi munkafüzeteket, de az XLSX-et nem.

Excel adatok olvasása és írása Selenium Apache POI-val

A fájl IO minden szoftverfolyamat kritikus része. Gyakran létrehozunk egy fájlt, megnyitjuk és frissítünk valamit, vagy töröljük a számítógépeinkről. Ugyanez a helyzet a Selenium Automatizálás. Szükségünk van egy folyamatra a fájlok kezeléséhez Selenium.

Java különböző osztályokat biztosít számunkra a fájlkezeléshez Selenium. Ebben az oktatóanyagban megtanuljuk, hogyan tudunk tovább írni és olvasni Excel fájl segítségével Java IO csomag és Apache POI könyvtár.

Apache POI be Selenium

Az Apache POI be Selenium egy széles körben használt API a következőkhöz: Selenium adatvezérelt tesztelésEz egy POI könyvtár, amelyet a következő nyelven írtak: Java amely API-t ad a felhasználóknak a manipulációhoz Microsoft dokumentumok, például .xls és .xlsx. A felhasználók könnyen létrehozhatnak, módosíthatnak és olvashatnak/írhatnak Excel fájlokba. A POI a „Poor Obfuscation Implementation” (gyenge obfuskáció megvalósítása) rövidítése.

Excel fájlok kezelése POI használatával (Maven POM függőség)

POI linkek Selenium teszt az alábbi munkafüzethez.

Az Apache POI hídként működik a következők között: Selenium teszt és egy Excel munkafüzet

Excel fájl olvasása és írása JavaAz Apache egy nagyon híres POI könyvtárat biztosít. Ez a könyvtár képes mind az XLS, mind az XLSX fájlformátumú Excel fájlok olvasására és írására.

XLS fájlok olvasásához a POI könyvtár HSSF implementációt biztosít.

Az XLSX olvasásához a POI könyvtár XSSF implementációja lesz a választás. Vizsgáljuk meg részletesen ezeket az implementációkat.

Ha Mavent használ a projektedben, a Maven függőség az alábbiak szerint kerül hozzáadásra a pom.xml fájlhoz.

POI függőségi bejegyzés hozzáadva egy Maven projekt pom.xml fájljához

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

Verzió megjegyzés: A 4.1.1 az eredeti példa; a jelenlegi projektek deklarálják poi-ooxml 5.5.1, ami az XLSX-hez szükséges.

Vagy egyszerűen letöltheti a POI tégelyek legújabb verzióját innen http://poi.apache.org/download.html és töltse le a legújabb zip fájlt

Apache POI letöltési oldal, amely felsorolja a bináris és forrás terjesztési archívumokat

Amikor letölti a zip fájlt ehhez a jarhoz, ki kell csomagolnia, és hozzá kell adnia ezeket az összes jar-t a projekt osztályútvonalához.

Kicsomagolt POI jar fájlok hozzáadva a Java a projekt építési útvonala

Osztályok és interfészek a POI-ban

Az alábbiakban egy lista a különböző Java Az alábbiakban látható POI interfészek és osztályok XLS és XLSX fájlok olvasásához:

POI osztályhierarchia a munkafüzettől a munkalapig, sorig és celláig

  • Munkafüzet: Az XSSFWorkbook és HSSFWorkbook osztályok implementálják ezt a felületet.
  • XSSFMunkafüzet: Az XLSX fájl osztályreprezentációja.
  • HSSFMunkafüzet: Az XLS fájl osztályreprezentációja.
  • Lap: Az XSSFSheet és a HSSFSheet osztályok implementálják ezt a felületet.
  • XSSFS lap: Egy osztály, amely egy XLSX fájlban lévő munkalapot reprezentál.
  • HSSFS lap: Egy osztály, amely egy XLS fájlban lévő munkalapot reprezentál.
  • Sor: Az XSSFRow és HSSFRow osztályok implementálják ezt a felületet.
  • XSSFRow: Egy osztály, amely egy sort reprezentál egy XLSX fájl munkalapján.
  • HSSFRow: Egy osztály, amely egy sort reprezentál egy XLS fájl munkalapján.
  • Mobil: Az XSSFCell és HSSFCell osztályok implementálják ezt a felületet.
  • XSSFCell: Egy osztály, amely egy XLSX fájl sorában lévő cellát reprezentál.
  • HSSFCell: Egy osztály, amely egy XLS-fájl sorában lévő cellát képvisel.

Ír olvas OperaCIÓ

Példánkban az alábbiakban az adott Excel fájlformátumot vesszük figyelembe

Minta ExportExcel munkafüzet az ExcellelGuru99Demo lap, amelyet mindkét példa használ

Adatok olvasása Excel fájlból

Teljes példa: Itt Excelből próbálunk adatokat olvasni. 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");

    }

}

Jegyzet: Nem használjuk a TestNG keret itt. Futtassa az osztályt mint Java Az Excel beolvasási funkciót használó alkalmazás Selenium ahogy a fenti példában látható.

A konzol ezután cellánként kinyomtatja az összes sort.

Konzolkimenet, amely minden Excel sort kinyomtatva, függőleges vonallal elválasztott cellaértékekkel

Adatok írása Excel fájlba

Teljes példa: Itt Excel fájlból próbálunk adatokat írni új sor hozzáadásával az Excel fájlban.

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

    }

}

A munkafüzet ezután tartalmazza a hozzáfűzött sort.

Excel táblázat az E úrral és Noidával ellátott új sor hozzáfűzése után

Excel-manipuláció JXL API használatával

A JXL egy másik híres jar az Excel-fájlok olvasásához Java és fájlok írása. Manapság a legtöbb projektben a POI-t használják, de a POI előtt csak a JXL Java API Excel manipulációhoz. Ez egy nagyon kicsi és egyszerű API az Excel beolvasásához Selenium.

A JXL jar fájl szerepel a projektkönyvtárak között

Tippek: Azt javaslom, hogy ne használjunk JXL-t új projektekben, mivel a könyvtár nincs aktív fejlesztés alatt 2010 óta – a 2.6.12 még mindig a legújabb kiadás –, és hiányzik belőle a POI API-hoz képest ez a funkció.

JXL letöltése:

Ha a JXL-lel szeretne dolgozni, letöltheti erről a linkről

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

Ebben a zip fájlban JXL demó példát is találhatsz, mivel az példatracAz alábbi ted tartalom látható.

Extracted JXL archívum, amelyen látható a jar fájl, a dokumentáció és a demó mappák

Néhány szolgáltatás:

  • A JXL képes beolvasni az Excel fájlokat Selenium 95, 97, 2000, XP, 2003 munkafüzethez.
  • Angol, francia, spanyol, német nyelven tudunk dolgozni.
  • A diagram és a kép beszúrása Excelben lehetséges

Hátrány:

  • Csak Excel 97 és újabb verziókat tudunk írni (az Excel 95-ben való írás nem támogatott).
  • A JXL nem támogatja az excel fájl XLSX formátumát.
  • Táblázatot generál Excel 2000 formátumban.

GYIK

Kijelent poi-ooxml, nem csak a poi-t. Tranzitíven hívja be a poi-kat, és ellátja az XLSX által igényelt XSSF osztályokat. Az 5.5.1-es verzió aktuális.

A POI OOXML oldala hiányzik vagy nem egyezik. Adja hozzá a poi-ooxml verziót, és minden POI műterméket egyetlen verzión tartson meg, mivel a vegyes kiadások kihagyják a sémaosztályokat az elérési útból.

A getStringCellValue csak szöveges cellákon működik. A DataFormatter segítségével bármelyik cellát karakterláncként olvashatja be, vagy képletek esetén a getCellType függvényt használhatja, és meghívhatja a FormulaEvaluatort.

Egy hiányzó sor vagy cella null értéket ad vissza, ezért a ciklus NullPointerException kivételt dob. Először tesztelj null vagy CellType.BLANK értékeket, vagy állíts be egy MissingCellPolicy-t, hogy az üres cellák üresek legyenek.

A gépi tanulási modellek valósághű sorokat generálnak, megjelölik a duplikált elemeket, és rangsorolják, hogy mely kombinációk mutatják ki a legjobban a hibákat, így levágva a túlméretezett részeket. adatvezérelt tesztelés ágynemű.

GitHub másodpilóta egy hozzászólásból olvasói és írói sablonvázlatot készít. RevNézd meg, mert gyakran elavult cellatípus-állandókat javasol a régebbi POI kiadásokból.

Az SXSSFWorkbook a sorokat lemezre továbbítja ahelyett, hogy a memóriában tárolná a munkafüzetet, így a nagyméretű exportálások nem okoznak OutOfMemoryError hibát. Olvasáskor a sorokat a cikluson belül kezeli.

Tartsa a src/test/resources alatt, és építse fel az elérési utat a System.getProperty(„user.dir”) fájlból. Az abszolút elérési utak megszakadnak, ha a csomag máshol vagy egy Jenkins ügynök.

Foglald össze ezt a bejegyzést a következőképpen: