Jak číst/zapisovat data ze souboru Excel: Selenium POI
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 testování řízené daty selenu. Je to knihovna POI zapsaná 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 excelových souborů. POI je zkratka pro „Poor Obfuscation Implementation“.
Export Excelu
Jak zacházet se souborem Excel pomocí POI (závislost Maven POM)
Chcete-li číst a zapisovat soubor Excel Java, Apache poskytuje velmi slavnou knihovnu POI. Tato knihovna je dostatečně schopná číst i zapisovat obojí XLS si XLSX formát souboru Excel.
Číst XLS soubory, an HSSF implementaci zajišťuje knihovna POI.
Číst XLSX, XSSF implementace POI knihovna bude volba. Pojďme si tyto implementace podrobně prostudovat.
Pokud ve svém projektu používáte Maven, závislost na Maven bude
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
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í XLS si XLSX filé-
- Cvičebnice: Třídy XSSFWorkbook a HSSFWorkbook implementují toto rozhraní.
- XSSFWorkbook: Představuje třídu souboru XLSX.
- Pracovní sešit HSSF: Představuje třídu souboru XLS.
- List: Třídy XSSFSheet a HSSFSheet implementují toto rozhraní.
- XSSFlist: Je třída představující list v souboru XLSX.
- HSSFS list: Je třída představující list v souboru XLS.
- Řádek: Třídy XSSFRow a HSSFRow implementují toto rozhraní.
- XSSFRow: Je třída představující řádek v listu souboru XLSX.
- HSSFRow: Je třída představující řádek v listu souboru XLS.
- Buňka: Třídy XSSFCell a HSSFCell implementují toto rozhraní.
- XSSFCell: Je třída představující buňku v řádku souboru XLSX.
- HSSFCell: Je třída představující buňku v řádku souboru XLS.
Operace čtení/zápisu
Pro náš příklad budeme uvažovat níže uvedený formát souboru Excel
Čtení dat ze souboru Excel
Úplný příklad: Zde se snažíme číst data z Excelu 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.
Zápis dat do souboru Excel
Úplný příklad: Zde se pokoušíme zapsat data ze souboru Excel přidáním nového řádku do souboru 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); } }
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: Navrhuji nepoužívat JXL v žádném novém projektu, protože knihovna není v aktivním vývoji od roku 2010 a chybí funkce 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/
Můžete také získat ukázkový příklad v tomto zazipovaném souboru pro JXL.
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.
Shrnutí
- Soubor Excel lze číst pomocí Java IO provoz. K tomu musíme použít Apache POI Jar.
- V souboru Excel existují dva druhy sešitu, XLSX si XLS soubory.
- POI má různá rozhraní sešit, list, řádek, buňku.
- Tato rozhraní jsou implementována odpovídajícími XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) a XLSX (XSSFWorkbook, XSSFSheet, XSSFrow, XSSFCell) třídy manipulace se soubory.
- JXL je další API pro zpracování Excelu Selenium.
- JXL neumí pracovat s formátem XLSX excelu.