Đọc file excel với Apache POI

Chào mừng các bạn đã quay trở lại với thachleblog. Bài viết hôm nay mình sẽ giới thiệu với các bạn cách đọc file excel với Apache POI. Thì tuần vừa rồi có làm cái tool import data từ excel hoặc csv. Vì chưa biết xài lib nào cho tiện nên cũng mất time để research. Do đó, hy vọng qua bài viết này có thể giúp các bạn tiết kiệm time khi làm việc với file excel. Rất đơn giản, nào chúng ta cùng bắt đầu nhé.

Đọc file excel với Apache POI

Mình cần import file User với các thông tin là account, name, và phone. Do đó, việc đầu tiên là mình tạo một class User.

Class User:

package thach.le.readexcel;
 
/**
 *
 * @author Thach Le
 */
public class User {
    private String acount;
    private String name;
    private String phone;
 
    public String getAcount() {
        return acount;
    }
 
    public void setAcount(String acount) {
        this.acount = acount;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPhone() {
        return phone;
    }
 
    public void setPhone(String phone) {
        this.phone = phone;
    }
 
    @Override
    public String toString() {
        return String.format("%s - %s - %s", acount, name, phone);
    }
 
}

Bước tiếp theo là tạo class để đọc file excel. Ở bước này mình cần các import poi và các dependences của nó. Các bạn có thể sử dụng maven hoặc tải poi tại đây (trong gói bin bao gồm đầy đủ các dependences).

Class ReadExcelModel:

package thach.le.readexcel;
 
import java.awt.print.Book;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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;
 
/**
 *
 * @author Thach Le
 */
public class ReadExcelModel {
 
    private Object getCellValue(Cell cell) {
        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                return cell.getStringCellValue();
 
            case Cell.CELL_TYPE_BOOLEAN:
                return cell.getBooleanCellValue();
 
            case Cell.CELL_TYPE_NUMERIC:
                return cell.getNumericCellValue();
        }
        return null;
    }
 
    public List<User> getListUsersFromFile(String excelFilePath) throws IOException {
        List<User> listUsers = new ArrayList<>();
        try (FileInputStream inputStream = new FileInputStream(new File(excelFilePath)); 
            Workbook workbook = new XSSFWorkbook(inputStream)) {
            Sheet firstSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = firstSheet.iterator();
 
            while (iterator.hasNext()) {
                Row nextRow = iterator.next();
                Iterator<Cell> cellIterator = nextRow.cellIterator();
                User user = new User();
 
                while (cellIterator.hasNext()) {
                    Cell nextCell = cellIterator.next();
                    int columnIndex = nextCell.getColumnIndex();
 
                    switch (columnIndex) {
                        case 0:
                            user.setAcount((String) getCellValue(nextCell));
                            break;
                        case 1:
                            user.setName((String) getCellValue(nextCell));
                            break;
                        case 2:
                            user.setPhone((String) getCellValue(nextCell));
                            break;
                    }
                }
                listUsers.add(user);
            }
        }
        return listUsers;
    }
}

 

Mình đọc data từ file thành List cho dễ xài, rất đơn giản phải không các bạn. Cũng như json hoặc xml thôi. Ở bước này, các bạn có thể debug từng bước để hiểu hơn về cấu trúc đọc file excel. (Ví dụ trong file excel có thể có 1 row tittle, trong lúc đọc object mình có thể bỏ row này đi hoặc bỏ đi object đầu tiên trong list).

Bước cuối cùng, chuẩn bị file excel và test:

File excel:

Đọc file excel với Apacha POI

Class Test:

package thach.le.readexcel;
 
import java.io.IOException;
import java.util.List;
 
/**
 *
 * @author Thach Le
 */
public class Test {
 
    public static void main(String[] args) throws IOException {
        String excelFilePath = "Users.xlsx";
        ReadExcelModel model = new ReadExcelModel();
        List<User> listBooks = model.getListUsersFromFile(excelFilePath);
        System.out.println(listBooks);
    }
 
}

 

Kết quả:

run:
[admin - Amin - 090 999 9999, thachlp - Thach Le - 0165 xxx xxxx, thanhv - Than Huynh - 098 xxx xxxx]

Vậy là phần đọc file excel đến đây là hết, thật đơn giản phải không các bạn. Trong task  liên quan đến excel của mình còn một bước nữa là tải file từ máy tính lên và lưu xuống server để đọc, mình sẽ trình bày ở một bài sau. Rất mong nhân được ý kiến đóng góp của các bạn. Cảm ơn.

Đọc thêm:

http://poi.apache.org/index.html
http://www.codejava.net/coding/how-to-read-excel-files-in-java-using-apache-poi

One thought on “Đọc file excel với Apache POI

  1. Pingback: Upload file sử dụng Ajax Jquery và Apache Commons FileUpload » Thach Le

Tham gia bình luận