Comment lire/écrire des données à partir d'un fichier Excel : Selenium POI
Les E/S de fichiers sont un élément essentiel de tout processus logiciel. Nous créons fréquemment un fichier, l'ouvrons et mettons à jour quelque chose ou le supprimons sur nos ordinateurs. Il en est de même avec Selenium Automatisation. Nous avons besoin d'un processus pour manipuler les fichiers avec Selenium.
Java nous fournit différentes classes pour la manipulation de fichiers avec Selenium. Dans ce tutoriel, nous allons apprendre comment lire et écrire sur Excel fichier à l'aide de Java Paquet IO et Apache Bibliothèque de POI.
POI Apache dans Selenium
Vue d'ensemble POI Apache dans Selenium est une API largement utilisée pour les tests pilotés par les données Selenium. Il s'agit d'une bibliothèque POI écrite en Java qui donne aux utilisateurs une API pour manipuler Microsoft des documents comme .xls et .xlsx. Les utilisateurs peuvent facilement créer, modifier et lire/écrire dans des fichiers Excel. POI signifie « Mauvaise mise en œuvre de l’obscurcissement ».
Exporter Excel
Comment gérer un fichier Excel à l'aide de POI (dépendance Maven POM)
Pour lire et écrire un fichier Excel dans Java, Apache fournit une bibliothèque POI très connue. Cette bibliothèque est suffisamment capable de lire et d'écrire à la fois XLS et XLSX format de fichier Excel.
Lire XLS fichiers, un CSSS la mise en œuvre est assurée par la bibliothèque POI.
Lire XLSX, XSSF implémentation de POI bibliothèque sera le choix. Étudions ces implémentations en détail.
Si vous utilisez Maven dans votre projet, la dépendance Maven sera
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Ou vous pouvez simplement télécharger la dernière version des pots POI à partir de http://poi.apache.org/download.html & téléchargez le dernier fichier zip
Lorsque vous téléchargez le fichier zip de ce fichier jar, vous devez le décompresser et ajouter tous ces fichiers jar au chemin de classe de votre projet.
Classes et interfaces dans POI
Voici une liste de différents Java Interfaces et classes dans POI a lire XLS et XLSX déposer-
- Classeur: Les classes XSSFWorkbook et HSSFWorkbook implémentent cette interface.
- XSSFClasseur: Est une représentation de classe du fichier XLSX.
- Cahier d'exercices HSSF: Est une représentation de classe du fichier XLS.
- feuille: Les classes XSSFSheet et HSSFSheet implémentent cette interface.
- Feuille XSSF: Est une classe représentant une feuille dans un fichier XLSX.
- HSSFFeuille: Est une classe représentant une feuille dans un fichier XLS.
- Rangée: Les classes XSSFRow et HSSFRow implémentent cette interface.
- XSSFLigne: Est une classe représentant une ligne dans la feuille du fichier XLSX.
- Ligne HSSFR: Est une classe représentant une ligne dans la feuille du fichier XLS.
- Cellule: Les classes XSSFCell et HSSFCell implémentent cette interface.
- XSSFCellule: Est une classe représentant une cellule dans une ligne du fichier XLSX.
- Cellule HSSFC : Est une classe représentant une cellule dans une ligne d'un fichier XLS.
Opération de lecture/écriture
Pour notre exemple, nous considérerons ci-dessous le format de fichier Excel donné
Lire les données d'un fichier Excel
Exemple complet : ici, nous essayons de lire des données d'Excel dans 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"); } }
Remarque : Nous n'utilisons pas le Tester cadre ici. Exécutez la classe comme Java Application utilisant la fonction lire Excel dans Selenium comme le montre l'exemple ci-dessus.
Écrire des données sur un fichier Excel
Exemple complet : ici, nous essayons d'écrire des données à partir d'un fichier Excel en ajoutant une nouvelle ligne dans le fichier 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); } }
Manipulation d'Excel à l'aide de l'API JXL
JXL est également un autre pot célèbre pour lire un fichier Excel Java et écrire des fichiers. De nos jours, POI est utilisé dans la plupart des projets, mais avant POI, JXL n'était que Java API pour la manipulation d'Excel. Il s'agit d'une API très petite et simple pour la lecture d'Excel dans Selenium.
CONSEILS : Ma suggestion est de ne pas utiliser JXL dans un nouveau projet car la bibliothèque n'est pas en développement actif depuis 2010 et manque de fonctionnalité par rapport à l'API POI.
Téléchargez JXL :
Si vous souhaitez travailler avec JXL, vous pouvez le télécharger à partir de ce lien
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Vous pouvez également obtenir un exemple de démonstration dans ce fichier zippé pour JXL.
Quelques fonctionnalités:
- JXL est capable de lire un fichier Excel dans Selenium pour le classeur 95, 97, 2000, XP, 2003.
- Nous pouvons travailler en anglais, français, espagnol et allemand.
- La copie d'un graphique et l'insertion d'images dans Excel sont possibles
Inconvénient:
- Nous pouvons écrire Excel 97 et versions ultérieures uniquement (l'écriture dans Excel 95 n'est pas prise en charge).
- JXL ne prend pas en charge le format XLSX du fichier Excel.
- Il génère une feuille de calcul au format Excel 2000.
Résumé
- Le fichier Excel peut être lu par Java Opération d'E/S. Pour cela, nous devons utiliser Pot de POI Apache.
- Il existe deux types de classeur dans un fichier Excel, XLSX et XLS fichiers.
- POI a différentes interfaces : classeur, feuille, ligne et cellule.
- Ces interfaces sont implémentées par correspondant XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) et XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) classes de manipulation de fichiers.
- JXL est une autre API pour la gestion d'Excel dans Selenium.
- JXL ne peut pas fonctionner avec le format XLSX d'Excel.