Làm việc với MS Excel trong java bằng Apache POI

Работа с Excel в Java (JExcel API) - YouTube

Hi, chào các bạn. Mình vừa trải qua một dự án làm việc nhiều với excel. Mình xin tổng hợp kiếp thức mình đã học và làm để nhớ vào chia sẻ với các bạn nhé.

1. MS Excel

Hiện tại, trong thực tế có hai phiên bản excel. Một phiên bản được tạo bằng các bản ms office từ 2003 trở về trước, phiên bản này có đuôi là .xls. Một phiên bản khác mới hơn được tạo bởi các bản sau ms office 2003 đổ lại đây, phiên bản này có đuôi là .xlsx.

2. Apache POI

Để java có thể làm việc với excel, apache có cho ra một thư viện là apache POI. Đây là một thư viện cho phép ta có thể thao tác với các tài liệu của ms office. Hiện tại mình mới chỉ sử dụng để làm việc với excel nên mình chỉ xin trình bày vấn đề này.

Apache POI gọi một file excel là một workbook, trong một workbook có thể có nhiều sheet, chính là các sheet trong một file excel. Trong một sheet có nhiều row và column. Mỗi ô trong excel thì apache POI gọi là cell.

Một workbook có thể có nhiều sheetRow trong một file excelColumn trong một file excelCell trong một file excel

Apache POI cung cấp những công cụ cần thiết đề làm việc với excel. Với các file excel đuôi .xls, POI cung cấp các lớp HSSF, đối với các file excel đuôi .xlsx, POI cung cấp cho chúng ta các lớp XSSF. Trong bài viết này mình chỉ sử dụng file .xlsx, đối với các file xls thì tương tự, chỉ cần thay XSSF thành HSSF là được.

Apache POI maven
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

3. Đọc file excel

Đưới đây là ví dụ có comment đầy đủ của mình về cách đọc một file excel với apache POI.

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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;

import java.io.IOException;

public class ReadExcel {

    public static void main(String[] args) throws IOException, InvalidFormatException {
        // file path
        String path = "Data\\ApachePoi\\Example_Read_Write.xlsx";
        // create new XSSF work book with path
        Workbook workbook = new XSSFWorkbook(path);
        // get a sheet in work book with index 0 (first sheet)
        Sheet sheet = workbook.getSheetAt(0);
        // get first row in sheet 0
        Row row = sheet.getRow(0);
        // get first cell in row 0
        Cell cell = row.getCell(0);
        // print string cell value
        System.out.println("result: " + cell.getStringCellValue());
    }
}
// result : a

File excel demo

Một ví dụ khác

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;

import java.io.IOException;

public class ReadExcelRow {
    public static void main(String[] args) throws IOException {
        // file path
        String path = "Data\\ApachePoi\\Example_Read_Write.xlsx";
        // create new XSSF work book with path
        Workbook workbook = new XSSFWorkbook(path);
        // get a sheet in work book with name JanuarySalary
        Sheet sheet = workbook.getSheet("JanuarySalary");
        // get first row in sheet
        Row row = sheet.getRow(0);
        // print all cell value in row
        System.out.print("result: ");
        for (Cell cell :
                row) {
            System.out.print(cell.getStringCellValue() + " ");
        }
    }
}
// result: id name salary

File excel demo

Các loại dữ liệu đọc trong excel

Trong hai ví dụ trên ta có thể thấy để đọc giá trị từ trong cell value ta có thể sử dụng method: getStringCellValue(). Method này sẽ lấy giá trị string trong cell của chúng ta, nếu trong cell chứa giá trị không phải là string thì sẽ bị lỗi. Trong excel có các kiểu giá trị và cách lấy giá trị tương ứng sau:

Kiểu dữ liệuHàm lấy giá trịStringgetStringCellValue()NumericgetNumericCellValue()BooleangetBooleanCellValue()FormulaCó cách xử lý khácBlankLà cell rỗng, không chứa giá trịMột số kiểu dữ liệu của excel và hàm lấy giá trị trong apache poi

Cùng đến với một ví dụ đọc một bảng excel:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;

public class ReadExcelTable {
    public static void main(String[] args) throws IOException {
        // file path
        String path = "Data\\ApachePoi\\Example_Read_Write.xlsx";
        // create new XSSF work book with path
        Workbook workbook = new XSSFWorkbook(path);
        // get a sheet in work book with name JanuarySalary
        Sheet sheet = workbook.getSheet("JanuarySalary");
        // read table
        for (Row row :
                sheet) {
            for (Cell cell :
                    row) {
                switch (cell.getCellType()) {
                    case STRING:
                        System.out.print(cell.getStringCellValue() + " ");
                        break;
                    case NUMERIC:
                        System.out.print(cell.getNumericCellValue() + " ");
                        break;
                    case BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + " ");
                        break;
                    case BLANK:
                        System.out.print("_" + " ");
                        break;
                    // with formula
                    case FORMULA:
                        switch (cell.getCachedFormulaResultType()) {
                            case STRING:
                                System.out.print(cell.getStringCellValue() + " ");
                                break;
                            case NUMERIC:
                                System.out.print(cell.getNumericCellValue() + " ");
                                break;
                            case BOOLEAN:
                                System.out.print(cell.getBooleanCellValue() + " ");
                                break;
                        }
                        break;
                    default:
                        System.out.print(" ");
                        break;
                }
            }
            System.out.println();
        }
    }
}

Kết quả:

id name salary is male 
1.0 peter _ true 
2.0 mary 120.0 false 
3.0 pep 80.0 true 
sum _ 200.0 _ 

File excel Demo

Qua các ví dụ trên thì các bạn đã tìm hiểu khá rõ về việc đọc file trong java bằng apache POI rồi. Đây là những kiến thức căn bản từ đó ta có thể làm được mọi điều theo yêu cầu.

4. Ghi file excel

Mình chỉ biết ghi file excel cơ bản, đồng thời cũng có khá nhiều trang đã viết về ghi file excel cơ bản rồi, mình xin phép không trình bày lại nữa. Các bạn muốn tìm hiểu thêm có thể tham khảo tại đây

5. Tổng kết

Trên đây mình đã ôn tập lại cách đọc file excel bằng java khi qua một dự án. Tất nhiên là công việc bên trong dự án thì không chỉ đơn giản như vầy, nhưng đây là kiến thức nền tảng, nắm được kiến thức này thì chúng ta có thể biến đổi theo từng yêu cầu của dự án. Cảm ơn các bạn đã theo dõi.

Share this:

Thích bài này:

Thích

Đang tải…