Excelデータの読み書き方法 Selenium Apache POI を使用する

⚡ スマートサマリー

Excel ファイルのドライブ Selenium データ駆動型テスト、そしてApache POIは Java ファイルの読み書きを行うライブラリです。以下のセクションでは、依存関係、コアクラス、読み書きの例、およびJXLについて説明します。

  • 🔘 2 つの形式: HSSFクラスは.xlsファイルを扱い、XSSFクラスは.xlsxファイルを扱います。
  • コアインターフェース: ワークブック、シート、行、セルはスプレッドシートを反映しています。
  • 🧪 読書: FileInputStreamとgetLastRowNumは、すべての行とセルをループします。
  • 🛠️ 書き込み: createRowとsetCellValueはデータを追加し、FileOutputStreamはそれを保存します。
  • 📊 レガシー: JXLは古いワークブックは読み込めますが、XLSXは読み込めません。

Excel データの読み書き Selenium Apache POI を使用

ファイル IO は、あらゆるソフトウェア プロセスの重要な部分です。私たちは頻繁にファイルを作成したり、ファイルを開いて更新したり、コンピュータ内でファイルを削除したりします。の場合も同様です Selenium オートメーション。ファイルを操作するプロセスが必要です Selenium.

Java ファイル操作のためのさまざまなクラスを提供します Selenium。このチュートリアルでは、どのように読み書きできるかを学びます。 Excel の助けを借りてファイル Java IOパッケージと アパッチ POIライブラリ。

Apache POI で Selenium

その Apache POI で Selenium は広く使用されているAPIです Selenium データ駆動型テストこれは、POIライブラリです。 Java ユーザーに操作用のAPIを提供する Microsoft .xls や .xlsx などのドキュメント。ユーザーは Excel ファイルを簡単に作成、変更、読み書きできます。POI は「Poor Obfuscation Implementation(不十分な難読化実装)」の略です。

POI(Maven POM依存関係)を使用してExcelファイルを処理する方法

POIリンク Selenium 以下のワークブックでテストを行ってください。

Apache POI は、 Selenium テストとExcelワークブック

Excelファイルの読み込みと書き込み JavaApacheは非常に有名なライブラリであるPOIを提供しています。このライブラリは、ExcelのXLSファイル形式とXLSXファイル形式の両方を読み書きするのに十分な機能を備えています。

XLSファイルを読み込むために、POIライブラリにはHSSFの実装が提供されています。

XLSXファイルを読み込むには、POIライブラリのXSSF実装が適しています。これらの実装について詳しく見ていきましょう。

プロジェクトでMavenを使用している場合、以下に示すように、Mavenの依存関係がpom.xmlに追加されます。

Mavenプロジェクトのpom.xmlファイルにPOI依存関係エントリが追加されました。

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>

バージョンノート: 4.1.1 は元の例です。現在のプロジェクトでは、 poi-ooxml XLSXに必要なバージョン5.5.1。

または、最新バージョンの POI jar を以下からダウンロードすることもできます。 http://poi.apache.org/download.html 最新の zip ファイルをダウンロードします

Apache POIのダウンロードページには、バイナリおよびソース配布アーカイブの一覧が掲載されています。

この jar の zip ファイルをダウンロードしたら、それを解凍し、これらすべての jar をプロジェクトのクラス パスに追加する必要があります。

解凍された POI jar ファイルが追加されました Java プロジェクトのビルドパス

POIのクラスとインターフェース

以下はさまざまな Java POIにおけるXLSおよびXLSXファイル読み取り用のインターフェースとクラスを以下に示します。

POIクラスの階層構造は、ワークブックからシート、行、セルまで続きます。

  • ワークブック: XSSFWorkbook クラスと HSSFWorkbook クラスはこのインターフェースを実装しています。
  • XSSFワークブック: XLSXファイルのクラス表現です。
  • HSSFワークブック: XLSファイルのクラス表現です。
  • シート: XSSFSheet クラスと HSSFSheet クラスはこのインターフェースを実装しています。
  • XSSFシート: XLSXファイル内のシートを表すクラスです。
  • HSSFシート: これは、XLSファイル内のシートを表すクラスです。
  • 行: XSSFRowクラスとHSSFRowクラスはこのインターフェースを実装しています。
  • XSSFRow: XLSXファイルのシート内の行を表すクラスです。
  • HSSFRow: これは、XLSファイルのシート内の行を表すクラスです。
  • セル: XSSFCell クラスと HSSFCell クラスはこのインターフェースを実装しています。
  • XSSFCell: XLSXファイルの行内のセルを表すクラスです。
  • HSSFCell: XLS ファイルの行内のセルを表すクラスです。

読み書き Opera生産

この例では、以下の Excel ファイル形式を考慮します。

Excel を使用したサンプル ExportExcel ワークブックGuru両方の例で使用されているデモシート99

Excelファイルからデータを読み取る

完全な例: ここでは、Excelからデータを読み込もうとしています。 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");

    }

}

注意: 私たちは TestNG フレームワークはこちら。クラスを次のように実行します Java Excelの読み取り機能を使用するアプリケーション Selenium 上の例に示すように。

するとコンソールは、各行をセルごとに表示します。

コンソール出力には、各Excel行のセル値がパイプ記号で区切られて表示されます。

Excelファイルにデータを書き込む

完全な例: ここでは、Excelファイルに新しい行を追加することで、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);

    }

}

すると、ワークブックには追加された行が反映されます。

E氏とノイダに関する新しい行が追加された後のExcelシート

JXL APIを使用したExcel操作

JXLはExcelファイルを読むためのもう一つの有名なjarです。 Java ファイルの書き込みと書き込み。現在ではほとんどのプロジェクトでPOIが使用されていますが、POI以前はJXLは Java Excel操作用のAPI。Excelの読み取り用の非常に小さくシンプルなAPIです。 Selenium.

プロジェクトライブラリの中にJXL jarファイルがリストされています

みんなが読んでいる 私の提案は、JXLを新しいプロジェクトで使用しないことです。なぜなら、このライブラリは2010年以降活発に開発されておらず(2.6.12が最新リリース)、POI APIと比較して機能が不足しているからです。

JXL をダウンロード:

JXL を使用したい場合は、このリンクからダウンロードできます。

https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/

この圧縮ファイル内には、JXL のデモ例も含まれています。trac以下に、ted の内容を示します。

ExtracJXLアーカイブには、jarファイル、ドキュメント、デモフォルダが含まれています。

いくつかの機能:

  • JXLはExcelファイルを読み取ることができます Selenium 95、97、2000、XP、2003 ワークブック用。
  • 英語、フランス語、スペイン語、ドイツ語で作業できます。
  • Excelへのチャートのコピーや画像挿入が可能

欠点:

  • Excel 97 以降のみ書き込み可能です (Excel 95 での書き込みはサポートされていません)。
  • JXL は Excel ファイルの XLSX 形式をサポートしていません。
  • Excel 2000形式のスプレッドシートを生成します。

よくあるご質問

宣言する poi-ooxml単独の poi ではありません。推移的に poi を取り込み、XLSX が必要とする XSSF クラスを提供します。最新バージョンは 5.5.1 です。

POIのOOXML部分が欠落しているか、または一致していません。poi-ooxmlを追加し、すべてのPOIアーティファクトを単一のバージョンに統一してください。複数のバージョンが混在すると、スキーマクラスがパスから外れてしまいます。

getStringCellValue はテキストセルでのみ機能します。任意のセルを文字列として読み込むには DataFormatter を使用するか、getCellType を確認して数式に対して FormulaEvaluator を呼び出してください。

行またはセルが欠落している場合は null が返されるため、ループは NullPointerException をスローします。最初に null または CellType.BLANK をチェックするか、空白の場合は空のセルを返すように MissingCellPolicy を設定してください。

機械学習モデルは現実的な行を生成し、重複をフラグ付けし、欠陥を最もよく明らかにする組み合わせをランク付けし、肥大化したデータを削減します。 データ駆動型テスト シート。

GitHubコパイロット コメントから読者と執筆者の定型文を作成する。 Revよく古いPOIリリースからの非推奨のセル型定数を提案するので、注意してください。

SXSSFWorkbook はワークブックをメモリに保持するのではなく、行をディスクにストリーミングするため、大規模なエクスポート時に OutOfMemoryError が発生しなくなります。読み込み時には、ループ内で行を処理してください。

src/test/resources の下に置き、System.getProperty(“user.dir”) からパスを構築してください。絶対パスは、スイートが別の場所で実行されるか、 Jenkins エージェント。