NỘI DUNG BÀI HỌC

Đọc File Excel để lấy data test và ghi data mới vào file Excel

Cài đặt thư viện Apache Poi

Sử dụng Maven để cài thưu viện POI apache trong pom.xml của dự án maven của bạn. Hiện Anh Tester đang sử dụng java poi phiên bản 5.x, tất cả các phiên bản mới nhất có thể được tìm thấy tại đây

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.0.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>


Tạo class để lưu các hàm xử lý Excel. Cụ thể An đặt là ExcelUtil.

Tiếp theo sẽ là

Hàm Gọi Excel file và Sheet cần dùng

Tại đây đặt tên hàm là setExcelFile với 2 đối số là đường dẫn đến File Excel và Tên Sheet

package excel;

import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.ss.usermodel.*;

public class ExcelUtil {

    private FileInputStream fis;
    private FileOutputStream fileOut;
    private Workbook wb;
    private Sheet sh;
    private Cell cell;
    private Row row;
    private CellStyle cellstyle;
    private Color mycolor;
    private String excelFilePath;
    private Map<String, Integer> columns = new HashMap<>();

    public void setExcelFile(String ExcelPath, String SheetName) throws Exception {
        try {
            File f = new File(ExcelPath);

            if (!f.exists()) {
                f.createNewFile();
                System.out.println("File doesn't exist, so created!");
            }

            fis = new FileInputStream(ExcelPath);
            wb = WorkbookFactory.create(fis);
            sh = wb.getSheet(SheetName);
            //sh = wb.getSheetAt(0); //0 - index of 1st sheet
            if (sh == null) {
                sh = wb.createSheet(SheetName);
            }

            this.excelFilePath = ExcelPath;

            //adding all the column header names to the map 'columns'
            sh.getRow(0).forEach(cell ->{
                columns.put(cell.getStringCellValue(), cell.getColumnIndex());
            });

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}


Tiếp theo sẽ là 

Hàm đọc data từ Excel File

Hàm getCellData(String columnName, int rownum) là hàm chúng ta sẽ gọi ra để dùng. Còn hàm getCellData(int rownum, int colnum) để xử lý thôi. Kiểu viết lại cho nó gọn ý mà.

public String getCellData(int rownum, int colnum) throws Exception{
    try{
        cell = sh.getRow(rownum).getCell(colnum);
        String CellData = null;
        switch (cell.getCellType()){
            case STRING:
                CellData = cell.getStringCellValue();
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell))
                {
                    CellData = String.valueOf(cell.getDateCellValue());
                }
                else
                {
                    CellData = String.valueOf((long)cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                CellData = Boolean.toString(cell.getBooleanCellValue());
                break;
            case BLANK:
                CellData = "";
                break;
        }
        return CellData;
    }catch (Exception e){
        return"";
    }
}

//Gọi ra hàm này nè
public String getCellData(String columnName, int rownum) throws Exception {
    return getCellData(rownum, columns.get(columnName));
}


Gọi ra dùng lại thì quá dễ dàng:

Chuẩn bị file Excel như sau:

[Selenium Java] Bài 24: Đọc File Excel để lấy data test | Anh Tester

Ví dụ đọc từ file testData.xlsx tại Sheet1 với các giá trị bên dưới (nhớ chú ý link kẻo sai)

  • cột username dòng 1 (dòng và cột bắt đầu từ 0) nghĩa là thứ tự 2 của excel á
  • cột password dòng 1
  • cột pin dòng 1

public static void main(String []args) throws Exception {
    ExcelUtil excel = new ExcelUtil();
    excel.setExcelFile("./testData.xlsx", "Sheet1");
    
    System.out.println(excel.getCellData("userName", 1));
    System.out.println(excel.getCellData("password", 1));
    System.out.println(excel.getCellData("pin", 1));
}


Hàm ghi data vào lại Excel File

Bạn chỉ cần truyển tham số tuần tự cho hàm setCellData(String text, int rownum, int colnum)
(giá trị cần ghi - vị trí dòng - vị trí cột)

public void setCellData(String text, int rownum, int colnum) throws Exception {
        try{
            row  = sh.getRow(rownum);
            if(row ==null)
            {
                row = sh.createRow(rownum);
            }
            cell = row.getCell(colnum);

            if (cell == null) {
                cell = row.createCell(colnum);
            }
            cell.setCellValue(text);

            fileOut = new FileOutputStream(excelFilePath);
            wb.write(fileOut);
            fileOut.flush();
            fileOut.close();
        }catch(Exception e){
            throw (e);
        }
    }


Gọi lại dùng càng dễ nữa =))

public static void main(String []args) throws Exception {
    ExcelUtil excel = new ExcelUtil();
    excel.setExcelFile("./testData.xlsx", "Sheet1");

    //Ghi giá trị "pass" vào dòng 1 cột 3 (dòng và cột bắt đầu tính từ 0)
    excel.setCellData("pass", 1, 3);
}


Kết quả đây:

[Selenium Java] Bài 24: Đọc File Excel để lấy data test | Anh Tester

Rồi. Xong. Nghỉ nào =))

Teacher

Teacher

Anh Tester

Software Tester

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:


🌱 Zalo
Automation Testing:   https://zalo.me/g/lsxswc560
🌱 Facebook Group: Cộng đồng Automation Testing Việt Nam (Website, Desktop, Mobile)
🌱 Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học