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

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 oraz 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 oraz 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 oraz 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.