Cách đọc nhiều cột từ excel trong java

Trong hướng dẫn này, chúng tôi sẽ trình bày cách sử dụng API Apache POI và JExcel để làm việc với bảng tính Excel

Cả hai thư viện đều có thể được sử dụng để đọc, viết và sửa đổi nội dung của bảng tính Excel một cách linh hoạt và cung cấp một cách hiệu quả để tích hợp Microsoft Excel vào Ứng dụng Java

đọc thêm

Chèn một hàng trong Excel bằng Apache POI

Tìm hiểu cách chèn một hàng mới giữa hai hàng trong tệp Excel bằng thư viện Apache POI

Đọc thêm →

Thêm cột vào trang tính Excel bằng Apache POI

Tìm hiểu cách thêm cột vào trang tính Excel bằng Java với thư viện Apache POI

Đọc thêm →

Đọc các giá trị từ Excel trong Java

Tìm hiểu cách truy cập các giá trị ô khác nhau bằng Apache POI

Đọc thêm →

2. Phụ thuộc Maven

Để bắt đầu, chúng ta sẽ cần thêm các phụ thuộc sau vào pom của mình. tập tin xml


    org.apache.poi
    poi
    5.2.0


    org.apache.poi
    poi-ooxml
    5.2.0

Các phiên bản mới nhất của và có thể được tải xuống từ Maven Central

3. POI của Apache

Thư viện Apache POI hỗ trợ cả hai. xls và. xlsx và là một thư viện phức tạp hơn các thư viện Java khác để làm việc với các tệp Excel

Nó cung cấp giao diện Sổ làm việc để lập mô hình tệp Excel và các giao diện Trang tính, Hàng và Ô để mô hình hóa các thành phần của tệp Excel, cũng như triển khai từng giao diện cho cả hai định dạng tệp

Khi làm việc với cái mới hơn. xlsx, chúng tôi sẽ sử dụng các lớp XSSFWorkbook, XSSFSheet, XSSFRow và XSSFCell

Làm việc với người lớn tuổi hơn. xls, chúng tôi sử dụng các lớp HSSFWorkbook, HSSFSheet, HSSFRow và HSSFCell

3. 1. Đọc từ Excel

Hãy tạo một phương thức mở một. xlsx và sau đó đọc nội dung từ trang đầu tiên của tệp

Phương pháp đọc nội dung ô khác nhau tùy thuộc vào loại dữ liệu trong ô. Loại nội dung ô có thể được xác định bằng phương thức getCellType() của giao diện Ô

Trước tiên, hãy mở tệp từ một vị trí nhất định

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);

Tiếp theo, hãy truy xuất trang tính đầu tiên của tệp và lặp qua từng hàng

Sheet sheet = workbook.getSheetAt(0);

Map> data = new HashMap<>();
int i = 0;
for (Row row : sheet) {
    data.put(i, new ArrayList());
    for (Cell cell : row) {
        switch (cell.getCellType()) {
            case STRING: .. break;
            case NUMERIC: .. break;
            case BOOLEAN: .. break;
            case FORMULA: .. break;
            default: data.get(new Integer(i)).add(" ");
        }
    }
    i++;
}

Apache POI có các phương pháp khác nhau để đọc từng loại dữ liệu. Hãy mở rộng nội dung của từng trường hợp chuyển đổi ở trên

Khi giá trị enum của loại ô là CHUỖI, nội dung sẽ được đọc bằng phương thức getRichStringCellValue() của giao diện Ô

data.get(new Integer(i)).add(cell.getRichStringCellValue().getString());

Các ô có kiểu nội dung SỐ có thể chứa ngày hoặc số và được đọc theo cách sau

if (DateUtil.isCellDateFormatted(cell)) {
    data.get(i).add(cell.getDateCellValue() + "");
} else {
    data.get(i).add(cell.getNumericCellValue() + "");
}

Đối với các giá trị BOOLEAN, chúng ta có phương thức getBooleanCellValue()

data.get(i).add(cell.getBooleanCellValue() + "");

Và khi loại ô là CÔNG THỨC, chúng ta có thể sử dụng phương thức getCellFormula()

data.get(i).add(cell.getCellFormula() + "");

3. 2. Ghi vào Excel

Apache POI sử dụng cùng một giao diện được trình bày trong phần trước để ghi vào tệp Excel và hỗ trợ tạo kiểu tốt hơn JExcel

Hãy tạo một phương thức ghi danh sách những người vào một trang tính có tiêu đề “Người”

Đầu tiên, chúng ta sẽ tạo và tạo kiểu cho một hàng tiêu đề có chứa các ô “Tên” và “Tuổi”

Workbook workbook = new XSSFWorkbook();

Sheet sheet = workbook.createSheet("Persons");
sheet.setColumnWidth(0, 6000);
sheet.setColumnWidth(1, 4000);

Row header = sheet.createRow(0);

CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

XSSFFont font = ((XSSFWorkbook) workbook).createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 16);
font.setBold(true);
headerStyle.setFont(font);

Cell headerCell = header.createCell(0);
headerCell.setCellValue("Name");
headerCell.setCellStyle(headerStyle);

headerCell = header.createCell(1);
headerCell.setCellValue("Age");
headerCell.setCellStyle(headerStyle);

Tiếp theo, hãy viết nội dung của bảng với một phong cách khác

________số 8

Cuối cùng, hãy viết nội dung vào một “temp. xlsx” trong thư mục hiện tại và đóng sổ làm việc

File currDir = new File(".");
String path = currDir.getAbsolutePath();
String fileLocation = path.substring(0, path.length() - 1) + "temp.xlsx";

FileOutputStream outputStream = new FileOutputStream(fileLocation);
workbook.write(outputStream);
workbook.close();

Hãy kiểm tra các phương pháp trên trong bài kiểm tra JUnit ghi nội dung vào tạm thời. xlsx và sau đó đọc cùng một tệp để xác minh tệp có chứa văn bản chúng tôi đã viết

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
0

4. JExcel

Thư viện JExcel là một thư viện gọn nhẹ có ưu điểm là dễ sử dụng hơn Apache POI nhưng có nhược điểm là nó chỉ hỗ trợ xử lý các tệp Excel trong. định dạng xls (1997-2003)

Tại thời điểm này,. tệp xlsx không được hỗ trợ

4. 1. Đọc từ Excel

Để làm việc với các tệp Excel, thư viện này cung cấp một loạt các lớp đại diện cho các phần khác nhau của tệp Excel. Lớp Workbook đại diện cho toàn bộ tập hợp các trang tính. Lớp Sheet đại diện cho một trang tính và lớp Cell đại diện cho một ô duy nhất của bảng tính

Hãy viết một phương thức tạo một sổ làm việc từ một tệp Excel đã chỉ định, lấy trang đầu tiên của tệp rồi duyệt qua nội dung của nó và thêm từng hàng trong HashMap

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
1

4. 2. Ghi vào Excel

Để ghi vào tệp Excel, thư viện JExcel cung cấp các lớp tương tự như các lớp được sử dụng ở trên, mô hình hóa tệp bảng tính. WritableWorkbook, WritableSheet và WritableCell

Lớp WritableCell có các lớp con tương ứng với các loại nội dung khác nhau có thể viết. Nhãn, Ngày giờ, Số, Boolean, Trống và Công thức

Thư viện này cũng cung cấp hỗ trợ cho định dạng cơ bản, chẳng hạn như kiểm soát phông chữ, màu sắc và chiều rộng ô

Hãy viết một phương thức tạo một sổ làm việc có tên là “temp. xls” trong thư mục hiện tại và sau đó viết nội dung giống như chúng tôi đã viết trong phần Apache POI

Đầu tiên, hãy tạo sổ làm việc

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
2

Tiếp theo, hãy tạo trang tính đầu tiên và viết tiêu đề của tệp excel, chứa các ô “Tên” và “Tuổi”

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
3

Với một style mới, chúng ta hãy viết nội dung của bảng vừa tạo

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
4

Điều rất quan trọng cần nhớ là ghi vào tệp và đóng tệp ở cuối để các quy trình khác có thể sử dụng tệp bằng cách sử dụng các phương thức write() và close() của lớp Workbook

FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
5

5. Phần kết luận

Bài viết này đã minh họa cách sử dụng Apache POI API và JExcel API để đọc và ghi một tệp Excel từ một chương trình Java