Jak číst/zapisovat data z Excelu Selenium Používání bodu zájmu Apache
⚡ Chytré shrnutí
Jednotka pro soubory Excelu Selenium testy řízené daty a Apache POI je Java knihovna, která je čte a zapisuje. Následující části se zabývají závislostmi, základními třídami, příklady čtení a zápisu a JXL.
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 Selenium testování řízené datyJe to knihovna POI napsaná 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 souborů aplikace Excel. POI je zkratka pro „Poor Obfuscation Implementation“ (špatná implementace zmatku).
Jak zpracovat soubor Excel pomocí POI (závislost Maven POM)
Odkazy na body zájmu Selenium test k níže uvedenému sešitu.
Chcete-li číst a zapisovat soubor Excel JavaApache poskytuje velmi známou knihovnu POI. Tato knihovna je dostatečně schopná číst a zapisovat soubory ve formátu XLS i XLSX z Excelu.
Pro čtení souborů XLS je k dispozici implementace HSSF, kterou poskytuje knihovna POI.
Pro čtení XLSX bude vhodnou volbou implementace knihovny POI ve formátu XSSF. Pojďme si tyto implementace podrobněji prostudovat.
Pokud ve svém projektu používáte Maven, bude závislost Maven přidána do souboru pom.xml, jak je znázorněno níže.
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Poznámka k verzi: 4.1.1 je původní příklad; aktuální projekty deklarují poi-ooxml 5.5.1, která je vyžadována pro XLSX.
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
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.
Třídy a rozhraní v POI
Následuje seznam různých Java Rozhraní a třídy v POI pro čtení souborů XLS a XLSX, zobrazené níže -
- Pracovní sešit: Třídy XSSFWorkbook a HSSFWorkbook implementují toto rozhraní.
- XSSFPracovní sešit: Je třídní reprezentací souboru XLSX.
- Pracovní sešit HSSF: Je reprezentací třídy souboru XLS.
- List: Třídy XSSFSheet a HSSFSheet implementují toto rozhraní.
- XSSFSheet: Je třída reprezentující list v souboru XLSX.
- HSSFShelf: Je třída reprezentující list v souboru XLS.
- Řádek: Třídy XSSFRow a HSSFRow implementují toto rozhraní.
- XSSFrow: Je třída reprezentující řádek v listu souboru XLSX.
- HSSFRow: Je třída reprezentující řádek v listu souboru XLS.
- Mobil: Třídy XSSFCell a HSSFCell implementují toto rozhraní.
- XSSFCell: Je třída reprezentující buňku v řádku souboru XLSX.
- HSSFCell: Je třída představující buňku v řádku souboru XLS.
Číst psát Operavání
Pro náš příklad budeme uvažovat níže uvedený formát souboru Excel
Čtení dat ze souboru aplikace Excel
Kompletní příklad: Zde se snažíme číst data z Excelu v 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.
Konzole poté vypíše každý řádek, buňku po buňce.
Zápis dat do souboru Excelu
Kompletní příklad: Zde se pokoušíme zapsat data ze souboru aplikace Excel přidáním nového řádku do souboru aplikace 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); } }
Sešit pak obsahuje připojený řádek.
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: Můj návrh je nepoužívat JXL v žádném novém projektu, protože knihovna není od roku 2010 v aktivním vývoji – verze 2.6.12 je stále její nejnovější verze – a tato funkce chybí 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/
Demoverzi pro JXL si můžete stáhnout i v tomto zazipovaném souboru, např.tracníže uvedený obsah ukazuje.
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.










