Jak číst/zapisovat data ze souboru Excel: Selenium 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 testování řízené daty selenu. Je to knihovna POI zapsaná 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 excelových souborů. POI je zkratka pro „Poor Obfuscation Implementation“.

Export Excelu

Jak zacházet se souborem Excel pomocí POI (závislost Maven POM)

Práce se souborem Excel pomocí POI

Chcete-li číst a zapisovat soubor Excel Java, Apache poskytuje velmi slavnou knihovnu POI. Tato knihovna je dostatečně schopná číst i zapisovat obojí XLS si XLSX formát souboru Excel.

Číst XLS soubory, an HSSF implementaci zajišťuje knihovna POI.

Číst XLSX, XSSF implementace POI knihovna bude volba. Pojďme si tyto implementace podrobně prostudovat.

Pokud ve svém projektu používáte Maven, závislost na Maven bude

Práce se souborem Excel pomocí POI

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

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

Práce se souborem Excel pomocí POI

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.

Práce se souborem Excel pomocí POI

Třídy a rozhraní v POI

Třídy a rozhraní v Apache POI
Třídy a rozhraní v Apache POI

Následuje seznam různých Java Rozhraní a třídy v POI pro čtení XLS si XLSX filé-

  • Cvičebnice: Třídy XSSFWorkbook a HSSFWorkbook implementují toto rozhraní.
  • XSSFWorkbook: Představuje třídu souboru XLSX.
  • Pracovní sešit HSSF: Představuje třídu souboru XLS.
  • List: Třídy XSSFSheet a HSSFSheet implementují toto rozhraní.
  • XSSFlist: Je třída představující list v souboru XLSX.
  • HSSFS list: Je třída představující list v souboru XLS.
  • Řádek: Třídy XSSFRow a HSSFRow implementují toto rozhraní.
  • XSSFRow: Je třída představující řádek v listu souboru XLSX.
  • HSSFRow: Je třída představující řádek v listu souboru XLS.
  • Buňka: Třídy XSSFCell a HSSFCell implementují toto rozhraní.
  • XSSFCell: Je třída představující buňku v řádku souboru XLSX.
  • HSSFCell: Je třída představující buňku v řádku souboru XLS.

Operace čtení/zápisu

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

Číst psát Operavání

Čtení dat ze souboru Excel

Úplný příklad: Zde se snažíme číst data z Excelu 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.

Čtení dat ze souboru aplikace Excel

Zápis dat do souboru Excel

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

    }

}

Zápis dat do souboru Excel

Manipulace s Excelem pomocí JXL API

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.

TIPY: Navrhuji nepoužívat JXL v žádném novém projektu, protože knihovna není v aktivním vývoji od roku 2010 a chybí funkce 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/

Manipulace s Excelem pomocí JXL API

Můžete také získat ukázkový příklad v tomto zazipovaném souboru pro JXL.

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.

Shrnutí

  • Soubor Excel lze číst pomocí Java IO provoz. K tomu musíme použít Apache POI Jar.
  • V souboru Excel existují dva druhy sešitu, XLSX si XLS soubory.
  • POI má různá rozhraní sešit, list, řádek, buňku.
  • Tato rozhraní jsou implementována odpovídajícími XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) a XLSX (XSSFWorkbook, XSSFSheet, XSSFrow, XSSFCell) třídy manipulace se soubory.
  • JXL je další API pro zpracování Excelu Selenium.
  • JXL neumí pracovat s formátem XLSX excelu.