Jak czytać/zapisywać dane z pliku Excel: Selenium POI

Plik I/O jest kluczową częścią każdego procesu tworzenia oprogramowania. Często tworzymy plik, otwieramy go i aktualizujemy coś lub usuwamy z naszych komputerów. Podobnie jest z Selenium Automatyzacja. Potrzebujemy procesu do manipulowania plikami Selenium.

Java udostępnia nam różne klasy do manipulacji plikami Selenium. W tym samouczku dowiemy się, jak czytać i pisać przewyższać plik za pomocą Java Pakiet IO i Apache Biblioteka POI.

Punkty POI Apache w Selenium

Kolekcja Punkty POI Apache w Selenium jest szeroko stosowanym API do testowania danych selenowych. Jest to biblioteka POI napisana w Java który zapewnia użytkownikom interfejs API do manipulacji Microsoft dokumenty takie jak .xls i .xlsx. Użytkownicy mogą łatwo tworzyć, modyfikować i czytać/zapisywać w plikach Excel. POI oznacza „słabą implementację zaciemniania”.

Eksportowanie Excela

Jak obsługiwać plik Excel przy użyciu POI (zależność Maven POM)

Obsługuj plik Excel za pomocą POI

Aby czytać i zapisywać plik Excel w Java, Apache udostępnia bardzo znaną bibliotekę POI. Ta biblioteka jest w stanie czytać i pisać zarówno XLS i XLSX formacie pliku Excel.

Czytać XLS pliki, an HSSF implementację zapewnia biblioteka POI.

Czytać XLSX, XSSF Wdrożenie POI biblioteka będzie wyborem. Przeanalizujmy szczegółowo te implementacje.

Jeśli używasz Mavena w swoim projekcie, zależność Mavena będzie

Obsługuj plik Excel za pomocą POI

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

Możesz też po prostu pobrać najnowszą wersję słoików POI http://poi.apache.org/download.html i pobierz najnowszy plik zip

Obsługuj plik Excel za pomocą POI

Po pobraniu pliku zip dla tego słoika musisz go rozpakować i dodać wszystkie słoiki do ścieżki klas swojego projektu.

Obsługuj plik Excel za pomocą POI

Klasy i interfejsy w POI

Klasy i interfejsy w Apache POI
Klasy i interfejsy w Apache POI

Poniżej znajduje się lista różnych Java Interfejsy i klasy w POI do czytania XLS i XLSX filet-

  • Podręcznik z ćwiczeniami: Klasy XSSFWorkbook i HSSFWorkbook implementują ten interfejs.
  • XSSFWorkbook: Jest reprezentacją klasy pliku XLSX.
  • Podręcznik HSSF: Jest reprezentacją klasy pliku XLS.
  • arkusz: Klasy XSSFSheet i HSSFSheet implementują ten interfejs.
  • Arkusz XSSF: Jest klasą reprezentującą arkusz w pliku XLSX.
  • Arkusz HSSF: Jest klasą reprezentującą arkusz w pliku XLS.
  • Rząd: Klasy XSSFRow i HSSFRow implementują ten interfejs.
  • XSSFow: Jest klasą reprezentującą wiersz w arkuszu pliku XLSX.
  • HSSFRow: Jest klasą reprezentującą wiersz w arkuszu pliku XLS.
  • Komórka: Klasy XSSFCell i HSSFCell implementują ten interfejs.
  • XSSFCell: Jest klasą reprezentującą komórkę w wierszu pliku XLSX.
  • Komórka HSSFC: Jest klasą reprezentującą komórkę w wierszu pliku XLS.

Operacja odczytu/zapisu

W naszym przykładzie rozważymy poniżej podany format pliku Excel

Czytaj Napisz Operacja

Odczytaj dane z pliku Excel

Kompletny przykład: Tutaj próbujemy odczytać dane z Excela w 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");

    }

}

Uwaga: nie używamy Testowanie ramy tutaj. Uruchom klasę jako Java Aplikacja korzystająca z funkcji odczytu Excela Selenium jak pokazano w powyższym przykładzie.

Odczyt danych z pliku Excel

Zapisz dane w pliku Excel

Kompletny przykład: Tutaj próbujemy zapisać dane z pliku Excel, dodając nowy wiersz w pliku 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);

    }

}

Zapisz dane w pliku Excel

Manipulacja w Excelu przy użyciu JXL API

Manipulacja Excelem przy użyciu API JXL

JXL to także kolejny znany słoik do odczytu pliku Excel Java i zapisywanie plików. Obecnie POI jest używany w większości projektów, ale przed POI był tylko JXL Java API do manipulacji Excelem. Jest to bardzo mały i prosty interfejs API do odczytu programu Excel Selenium.

WSKAZÓWKI: Sugeruję, aby nie używać JXL w żadnym nowym projekcie, ponieważ biblioteka nie jest aktywnie rozwijana od 2010 roku i brakuje tej funkcji w porównaniu z API POI.

Pobierz JXL:

Jeśli chcesz pracować z JXL, możesz pobrać go z tego linku

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

Manipulacja Excelem przy użyciu API JXL

Możesz także pobrać przykład demonstracyjny w tym spakowanym pliku dla JXL.

Niektóre funkcje:

  • JXL jest w stanie odczytać plik Excel Selenium dla skoroszytu 95, 97, 2000, XP, 2003.
  • Współpracujemy z językiem angielskim, francuskim, hiszpańskim, niemieckim.
  • Możliwe jest kopiowanie wykresu i wstawianie obrazu do Excela

Wada:

  • Możemy pisać tylko w programie Excel 97 i nowszych (pisanie w programie Excel 95 nie jest obsługiwane).
  • JXL nie obsługuje formatu XLSX pliku Excel.
  • Generuje arkusz kalkulacyjny w formacie Excel 2000.

Podsumowanie

  • Plik Excel można odczytać Java Operacja IO. W tym celu musimy użyć Apache POI Jar.
  • Istnieją dwa rodzaje skoroszytu w pliku Excel, XLSX i XLS akta.
  • POI ma różne interfejsy: skoroszyt, arkusz, wiersz, komórka.
  • Interfejsy te są realizowane poprzez odpowiednie XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) i XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) klasy manipulacji plikami.
  • JXL to kolejny interfejs API do obsługi programu Excel w Selenium.
  • JXL nie działa z formatem XLSX programu Excel.