Jak číst/zapisovat data z Excelu Selenium Používání bodu zájmu Apache

⚡ Chytré shrnutí

Jednotka pro soubory Excelu Selenium testy řízené daty a Apache POI je Java knihovna, která je čte a zapisuje. Následující části se zabývají závislostmi, základními třídami, příklady čtení a zápisu a JXL.

  • 🔘 Dva formáty: Třídy HSSF zpracovávají soubory .xls, třídy XSSF zpracovávají soubory .xlsx.
  • (Tj. Základní rozhraní: Sešit, list, řádek a buňka zrcadlí tabulku.
  • 🧪 Čtení: Funkce FileInputStream a getLastRowNum provádí smyčky v každém řádku a buňce.
  • 🛠️ Psaní: createRow a setCellValue přidávají data, FileOutputStream je ukládá.
  • 📊 Dědictví: JXL čte staré sešity, ale ne XLSX.

Čtení a zápis dat z Excelu v Selenium s Apache POI

IO souboru je kritickou součástí jakéhokoli softwarového procesu. Často vytváříme soubor, otevíráme jej a něco aktualizujeme nebo mažeme v našich počítačích. To samé je případ s Selenium Automatizace. Potřebujeme proces, se kterým budeme manipulovat se soubory Selenium.

Java nám poskytuje různé třídy pro manipulaci se soubory Selenium. V tomto tutoriálu se naučíme, jak můžeme číst a psát vynikat soubor s pomocí Java IO balíček a Apache Knihovna POI.

Apache POI v Selenium

Jedno Apache POI v Selenium je široce používané API pro Selenium testování řízené datyJe to knihovna POI napsaná v Java které uživatelům poskytuje API pro manipulaci Microsoft dokumenty jako .xls a .xlsx. Uživatelé mohou snadno vytvářet, upravovat a číst/zapisovat do souborů aplikace Excel. POI je zkratka pro „Poor Obfuscation Implementation“ (špatná implementace zmatku).

Jak zpracovat soubor Excel pomocí POI (závislost Maven POM)

Odkazy na body zájmu Selenium test k níže uvedenému sešitu.

Bod zájmu Apache funguje jako most mezi Selenium test a sešit aplikace Excel

Chcete-li číst a zapisovat soubor Excel JavaApache poskytuje velmi známou knihovnu POI. Tato knihovna je dostatečně schopná číst a zapisovat soubory ve formátu XLS i XLSX z Excelu.

Pro čtení souborů XLS je k dispozici implementace HSSF, kterou poskytuje knihovna POI.

Pro čtení XLSX bude vhodnou volbou implementace knihovny POI ve formátu XSSF. Pojďme si tyto implementace podrobněji prostudovat.

Pokud ve svém projektu používáte Maven, bude závislost Maven přidána do souboru pom.xml, jak je znázorněno níže.

Do souboru pom.xml projektu Maven přidána závislost bodu zájmu (POI).

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

Poznámka k verzi: 4.1.1 je původní příklad; aktuální projekty deklarují poi-ooxml 5.5.1, která je vyžadována pro XLSX.

Nebo si můžete jednoduše stáhnout nejnovější verzi nádob POI http://poi.apache.org/download.html a stáhněte si nejnovější soubor zip

Stránka pro stažení Apache POI se seznamem distribučních archivů binárních a zdrojových kódů

Když si stáhnete soubor zip pro tuto nádobu, musíte jej rozbalit a přidat všechny tyto nádoby do cesty třídy vašeho projektu.

Rozbalené soubory JAR s body zájmu (POI) byly přidány do Java cesta sestavení projektu

Třídy a rozhraní v POI

Následuje seznam různých Java Rozhraní a třídy v POI pro čtení souborů XLS a XLSX, zobrazené níže -

Hierarchie tříd POI od sešitu až po list, řádek a buňku

  • Pracovní sešit: Třídy XSSFWorkbook a HSSFWorkbook implementují toto rozhraní.
  • XSSFPracovní sešit: Je třídní reprezentací souboru XLSX.
  • Pracovní sešit HSSF: Je reprezentací třídy souboru XLS.
  • List: Třídy XSSFSheet a HSSFSheet implementují toto rozhraní.
  • XSSFSheet: Je třída reprezentující list v souboru XLSX.
  • HSSFShelf: Je třída reprezentující list v souboru XLS.
  • Řádek: Třídy XSSFRow a HSSFRow implementují toto rozhraní.
  • XSSFrow: Je třída reprezentující řádek v listu souboru XLSX.
  • HSSFRow: Je třída reprezentující řádek v listu souboru XLS.
  • Mobil: Třídy XSSFCell a HSSFCell implementují toto rozhraní.
  • XSSFCell: Je třída reprezentující buňku v řádku souboru XLSX.
  • HSSFCell: Je třída představující buňku v řádku souboru XLS.

Číst psát Operavání

Pro náš příklad budeme uvažovat níže uvedený formát souboru Excel

Ukázkový sešit ExportExcel s ExcelemGuru99Ukázkový list použitý v obou příkladech

Čtení dat ze souboru aplikace Excel

Kompletní příklad: Zde se snažíme číst data z Excelu v 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");

    }

}

Poznámka: Nepoužíváme TestNG rámec zde. Spusťte třídu jako Java Aplikace využívající funkci read excel v Selenium jak je ukázáno ve výše uvedeném příkladu.

Konzole poté vypíše každý řádek, buňku po buňce.

Výstup konzole zobrazující každý řádek Excelu vytištěný s hodnotami buněk oddělenými svislými čárkami

Zápis dat do souboru Excelu

Kompletní příklad: Zde se pokoušíme zapsat data ze souboru aplikace Excel přidáním nového řádku do souboru aplikace 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);

    }

}

Sešit pak obsahuje připojený řádek.

Excel po přidání nového řádku s panem E a Noidou

Manipulace s Excelem pomocí JXL API

JXL je také další slavný jar pro čtení souboru Excel Java a psaní souborů. V současné době se POI používá ve většině projektů, ale dříve to bylo pouze JXL Java API pro manipulaci s Excelem. Je to velmi malé a jednoduché API pro čtení v Excelu Selenium.

Soubor JXL JAR uvedený mezi knihovnami projektu

TIPY: Můj návrh je nepoužívat JXL v žádném novém projektu, protože knihovna není od roku 2010 v aktivním vývoji – verze 2.6.12 je stále její nejnovější verze – a tato funkce chybí ve srovnání s POI API.

Stáhnout JXL:

Pokud chcete pracovat s JXL, můžete si jej stáhnout z tohoto odkazu

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

Demoverzi pro JXL si můžete stáhnout i v tomto zazipovaném souboru, např.tracníže uvedený obsah ukazuje.

ExtracArchiv Teda JXL zobrazující složky JAR, dokumentace a demoverze

Některé z funkcí:

  • JXL je schopen číst soubor Excel Selenium pro sešit 95, 97, 2000, XP, 2003.
  • Umíme pracovat s angličtinou, francouzštinou, španělštinou, němčinou.
  • Kopírování grafu a vkládání obrázků v Excelu je možné

Nevýhoda:

  • Můžeme psát pouze Excel 97 a novější (psaní v Excelu 95 není podporováno).
  • JXL nepodporuje formát souboru Excel XLSX.
  • Generuje tabulku ve formátu Excel 2000.

Nejčastější dotazy

Prohlásit poi-ooxml, ne pouze poi. Tranzitivně načítá poi a dodává třídy XSSF, které XLSX potřebuje. Aktuální verze je 5.5.1.

Chybí nebo se neshoduje strana OOXML v bodě zájmu. Přidejte poi-ooxml a ponechte všechny artefakty bodu zájmu v jedné verzi, protože smíšené verze vynechávají třídy schémat mimo cestu.

Funkce getStringCellValue funguje pouze s textovými buňkami. Pro čtení libovolné buňky jako řetězce použijte DataFormatter nebo zaškrtněte getCellType a u vzorců zavolejte FormulaEvaluator.

Chybějící řádek nebo buňka vrátí hodnotu null, takže smyčka vyvolá výjimku NullPointerException. Nejprve otestujte, zda se jedná o hodnotu null nebo CellType.BLANK, nebo nastavte MissingCellPolicy tak, aby prázdné buňky vracely prázdné řádky nebo buňky.

Modely strojového učení generují realistické řádky, označují duplikáty a hodnotí kombinace, které nejlépe odhalují defekty, a odstraňují tak nadbytečné prvky. testování řízené daty povlečení na postel.

GitHub Copilot vytváří návrhy pro čtenáře a zapisovače z komentáře. Revzobrazit si to, protože často naznačuje zastaralé konstanty buněčných typů ze starších verzí POI.

SXSSFWorkbook streamuje řádky na disk místo uchovávání sešitu v paměti, takže velké exporty přestanou vyvolávat OutOfMemoryError. Při čtení zpracovává řádky uvnitř smyčky.

Uchovávejte jej v adresáři src/test/resources a cestu k němu vytvořte z System.getProperty(„user.dir“). Absolutní cesty se přeruší, jakmile se sada spustí jinde nebo na Jenkins činidlo.

Shrňte tento příspěvek takto: