Hur man läser/skriver data från Excel-fil: Selenium POI

File IO är en kritisk del av alla programvaruprocesser. Vi skapar ofta en fil, öppnar den och uppdaterar något eller tar bort den på våra datorer. Samma är fallet med Selenium Automatisering. Vi behöver en process att manipulera filer med Selenium.

Java ger oss olika klasser för filhantering med Selenium. I den här handledningen ska vi lära oss hur vi kan läsa och skriva vidare excel fil med hjälp av Java IO-paket och Apache POI-bibliotek.

Apache POI in Selenium

Din Apache POI in Selenium är ett allmänt använt API för selendatadrivna tester. Det är ett POI-bibliotek skrivet i Java som ger användarna ett API för att manipulera Microsoft dokument som .xls och .xlsx. Användare kan enkelt skapa, ändra och läsa/skriva till Excel-filer. POI står för "Poor Obfuscation Implementation".

Exporterar Excel

Hur man hanterar Excel-fil med hjälp av POI (Maven POM Dependency)

Hantera Excel-fil med hjälp av POI

Att läsa och skriva Excel-fil i Java, Apache tillhandahåller en mycket berömd bibliotek POI. Detta bibliotek är kapabelt nog att läsa och skriva båda XLS och XLSX filformatet i Excel.

Att läsa XLS filer, en HSSF implementering tillhandahålls av POI-biblioteket.

Att läsa XLSX, XSSF införande av POI bibliotek blir valet. Låt oss studera dessa implementeringar i detalj.

Om du använder Maven i ditt projekt kommer Maven-beroendet att vara det

Hantera Excel-fil med hjälp av POI

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

Eller så kan du helt enkelt ladda ner den senaste versionen POI-burkar från http://poi.apache.org/download.html & ladda ner den senaste zip-filen

Hantera Excel-fil med hjälp av POI

När du laddar ner zip-filen för den här burken måste du packa upp den och lägga till alla dessa burkar till klasssökvägen för ditt projekt.

Hantera Excel-fil med hjälp av POI

Klasser och gränssnitt i POI

Klasser och gränssnitt i Apache POI
Klasser och gränssnitt i Apache POI

Följande är en lista över olika Java Gränssnitt och klasser i POI för läsning XLS och XLSX filea-

  • Arbetsbok: Klasserna XSSFWorkbook och HSSFWorkbook implementerar detta gränssnitt.
  • XSSF-arbetsbok: Är en klassrepresentation av XLSX-fil.
  • HSSF Arbetsbok: Är en klassrepresentation av XLS-fil.
  • Sheet: Klasserna XSSFSheet och HSSFSheet implementerar detta gränssnitt.
  • XSSFSblad: Är en klass som representerar ett ark i en XLSX-fil.
  • HSSFSblad: Är en klass som representerar ett ark i en XLS-fil.
  • Rad: Klasserna XSSFRow och HSSFRow implementerar detta gränssnitt.
  • XSSFRow: Är en klass som representerar en rad i arket för XLSX-fil.
  • HSSFRow: Är en klass som representerar en rad i arket med XLS-fil.
  • Cell: Klasserna XSSFCell och HSSFCell implementerar detta gränssnitt.
  • XSSFCell: Är en klass som representerar en cell i en rad av XLSX-fil.
  • HSSFCell: Är en klass som representerar en cell i en rad av XLS-fil.

Läs-/skrivoperation

För vårt exempel kommer vi att överväga nedan givet Excel-filformat

Läsa skriva Operation

Läs data från Excel-fil

Komplett exempel: Här försöker vi läsa in data från Excel 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");

    }

}

Obs: Vi använder inte Testng ram här. Kör klassen som Java Applikation som använder funktionen läs excel in Selenium som visas i exemplet ovan.

Läs data från Excel-fil

Skriv data på Excel-fil

Komplett exempel: Här försöker vi skriva data från Excel-fil genom att lägga till ny rad i Excel-fil

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

    }

}

Skriv data på Excel-fil

Excel-manipulation med JXL API

Excel-manipulation med JXL API

JXL är också en annan berömd burk att läsa Excel-fil i Java och skriva filer. Numera används POI i de flesta projekt, men innan POI var det bara JXL Java API för Excel-manipulation. Det är ett mycket litet och enkelt API för att läsa in Excel Selenium.

TIPS: Mitt förslag är att inte använda JXL i något nytt projekt eftersom biblioteket inte är i aktiv utveckling från 2010 och saknar funktionen i jämförelse med POI API.

Ladda ner JXL:

Om du vill arbeta med JXL kan du ladda ner det från denna länk

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

Excel-manipulation med JXL API

Du kan också få demoexempel i denna zippade fil för JXL.

Några detaljer:

  • JXL kan läsa Excel-fil i Selenium för 95, 97, 2000, XP, 2003 arbetsbok.
  • Vi kan arbeta med engelska, franska, spanska, tyska.
  • Det är möjligt att kopiera ett diagram och infogning av bilder i Excel

Nackdel:

  • Vi kan bara skriva Excel 97 och senare (skriva i Excel 95 stöds inte).
  • JXL stöder inte XLSX-formatet för Excel-filen.
  • Det genererar kalkylblad i Excel 2000-format.

Sammanfattning

  • Excel-fil kan läsas av Java IO-drift. För det måste vi använda Apache POI Jar.
  • Det finns två typer av arbetsbok i Excel-fil, XLSX och XLS filer.
  • POI har olika gränssnitt arbetsbok, ark, rad, cell.
  • Dessa gränssnitt implementeras av motsvarande XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) Och XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) filmanipulationsklasser.
  • JXL är ett annat API för Excel-hantering i Selenium.
  • JXL kan inte fungera med XLSX-formatet Excel.