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)
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
<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
Po pobraniu pliku zip dla tego słoika musisz go rozpakować i dodać wszystkie słoiki do ścieżki klas swojego projektu.
Klasy i interfejsy w 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
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.
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); } }
Manipulacja w Excelu przy użyciu JXL API
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/
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.