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ố 8Cuố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];
04. 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];
14. 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];
2Tiế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];
3Vớ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];
55. 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