Trong Java, việc đọc tệp excel và ghi tệp excel có hơi khó khăn vì trang tính Excel có các ô để lưu trữ dữ liệu. Java không cung cấp API trực tiếp để đọc hoặc viết tài liệu Microsoft Excel hoặc Word. Ta phải dựa vào thư viện của bên thứ ba là Apache POI. Trong phần này, chúng ta sẽ học cách tạo tệp excel bằng Java và cách ghi hoặc chèn dữ liệu vào tệp excel bằng thư viện Apache POI Java
1. Thư viện POI Java Apache
Apache POI [Thực tế giải mã kém] là một API Java để đọc và ghi Tài liệu Microsoft. Nó chứa các lớp và giao diện. Thư viện Apache POI cung cấp hai cách khai thác để đọc hoặc ghi tệp excel
Khi thiết lập chương trình với bất kỳ hệ thống nào thì thao tác với các tệp excel luôn là điều kiện bắt buộc mọi nhà phát triển phải nắm bắt được. Và để làm việc hiệu quả với file excel trong java thì tôi xin giới thiệu thư viện
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
2 trong bài viết này. POI là viết tắt của Triển khai Obfuscation kém, đó là một thư viện mã nguồn mở của Java, được cung cấp bởi Apache giúp chúng tôi làm việc với các tài liệu của public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
3 như Word, Excel, PowerPoint…2. Các thuật ngữ trong Apache POIĐể thao tác với các tệp Excel, POI cung cấp cho chúng ta các khái niệm chính sau
4. Đây là khái niệm đại diện cho một bảng tính, hoặc một tệp Excelpublic class Employee { private String name; private String email; private Date dateOfBirth; private double daysOfWork; private double salaryPerDay; private Double totalSalary; public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] { this.name = name; this.email = email; this.dateOfBirth = dateOfBirth; this.daysOfWork = daysOfWork; this.salaryPerDay = salaryPerDay; this.totalSalary = totalSalary; } // Getter and Setter
5. tương đương với các sheet trong file Excel, một workbook có thể có một hoặc nhiều sheetpublic class Employee { private String name; private String email; private Date dateOfBirth; private double daysOfWork; private double salaryPerDay; private Double totalSalary; public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] { this.name = name; this.email = email; this.dateOfBirth = dateOfBirth; this.daysOfWork = daysOfWork; this.salaryPerDay = salaryPerDay; this.totalSalary = totalSalary; } // Getter and Setter
6. đơn vị hàng trong một bảng tínhpublic class Employee { private String name; private String email; private Date dateOfBirth; private double daysOfWork; private double salaryPerDay; private Double totalSalary; public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] { this.name = name; this.email = email; this.dateOfBirth = dateOfBirth; this.daysOfWork = daysOfWork; this.salaryPerDay = salaryPerDay; this.totalSalary = totalSalary; } // Getter and Setter
7. đại diện cho một cột trong bảng tính. Vì vậy, mỗi một ô trong tệp Excel sẽ được biểu diễn bằng một hàng và một ôpublic class Employee { private String name; private String email; private Date dateOfBirth; private double daysOfWork; private double salaryPerDay; private Double totalSalary; public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] { this.name = name; this.email = email; this.dateOfBirth = dateOfBirth; this.daysOfWork = daysOfWork; this.salaryPerDay = salaryPerDay; this.totalSalary = totalSalary; } // Getter and Setter
Để làm việc với Excel thì chúng ta không cần quan tâm đến tất cả các lớp trong thư viện POI mà chỉ cần để ý đến 2 loại sau
- Các lớp có tên tiếp theo là HSSF [Định dạng bảng tính khủng khiếp]. Các lớp giúp đọc và ghi tệp dang Microsoft Excel [XLS - excel format cũ]. Ví dụ. HSSFWorkbook, HSSFSheet, HSSFCellStyle,…
- Các class có tiếp đầu ngữ là XSSF [Định dạng XML SpereadSheet]. Read and write format file Open Office XML [XLSX - format excel new]
Nếu bạn sử dụng Maven thì cần thêm phụ thuộc của POI vào tệp
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
8
org.apache.poi
poi
3.17
org.apache.poi
poi-ooxml
3.17
Còn
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
9 thì thêm vào public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
0public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
0Trước tiên, ta tạo một mô hình lớp để có thể ghi các hàng theo một dữ liệu danh sách
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
Next to standard data raw to write to file excel
public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
Sau bước chuẩn bị dữ liệu, chúng ta tạo một sổ làm việc
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
3Có sổ làm việc rồi chúng ta tạo tiếp một trang tính trong đó
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
4Có thể thêm một chút phông bạt màu sắc cho đẹp mắt
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
5Sau đó chúng ta tạo hàng đầu tiên chứa tiêu đề của các cột
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
6Do trong phần mô hình của chúng ta có loại dữ liệu khác, đặc biệt là Ngày [dateOfBirth] nên chúng ta cần định dạng cho nó
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
7Tiếp đến là công việc chính, đặt dữ liệu vào các ô trong file excel
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
8Chú ý rằng cột cuối cùng ta sử dụng công thức để tính tổng lương của mỗi nhân viên nên CellType ở đây sẽ là
public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
1Cuối cùng là ghi tất cả ra một tệp Excel thật và kết thúc việc tạo một tệp Excel
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
00Nội dung file
public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
2 sẽ như sau. Để đọc một file Excel có sẵn, đầu tiên chúng ta cũng tạo một workbook cho file đó
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
01Duyệt các trang tính trong sổ làm việc
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
02Vì trong file excel ta vừa tạo chỉ có một sheet nên chúng ta sẽ lấy nó ra như sau
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
03Để duyệt các hàng trong trang tính, ta làm như sau
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
04Sau khi duyệt xong, hãy nhớ đóng sổ làm việc lại
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
05Màn hình console sẽ trông như sau.
Từ đây ta có thể nhận thấy đối với kiểu là
public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
1, khi ra chúng ta sẽ nhận được công thức của trường đó chứ không phải giá trị cuối cùng. Để nhận các giá trị cuối cùng của trường thì chúng ta viết thêm hàm saupublic class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
06Với một ô có kiểu
public class ExcelWriter {
private static String[] columns = {"Name", "Email", "Date of birth", "Days of work", "Salary Per Day", "Total Salary"};
private static List employees = new ArrayList[];
// Initializing employees data to insert into the excel file
static {
Calendar dateOfBirth = Calendar.getInstance[];
dateOfBirth.set[1995, 0, 8]; // 0 means January
employees.add[new Employee["Tubean", "tubean@github.com", dateOfBirth.getTime[], 22d, 100d, null]];
dateOfBirth.set[1998, 2, 15];
employees.add[new Employee["Quynh", "vivichan@gmail.com", dateOfBirth.getTime[], 21d, 120d, null]];
}
}
1, bạn có thể đưa ra công thức của nó và sử dụng FormulaEvaluator để tính toán giá trị của ô cho bởi công thức đó. Sau đó sửa lại đoạn duyệt hàng như saupublic class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
07Kết quả nhận được sẽ như sau.
Để sửa một tệp Excel, chúng ta cũng làm tương tự như vậy để đọc một tệp Excel. Đầu tiên là tạo một workbook cho nó và một sheet tương ứng
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
08Specify the position to update back and the position of it. Cần chú ý nếu vị trí cần cập nhật chưa được tạo thì cần khởi động trường đó trước đó, nếu không chương trình sẽ ném một ngoại lệ
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
09Cập nhật lại định dạng và giá trị của trường đó
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
0Xuất ra một tệp Excel khác và đóng sổ làm việc
public class Employee {
private String name;
private String email;
private Date dateOfBirth;
private double daysOfWork;
private double salaryPerDay;
private Double totalSalary;
public Employee[String name, String email, Date dateOfBirth, double daysOfWork, double salaryPerDay, Double totalSalary] {
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.daysOfWork = daysOfWork;
this.salaryPerDay = salaryPerDay;
this.totalSalary = totalSalary;
}
// Getter and Setter
1Mã nguồnhttps. //github. com/tubean/apache-poi-tutorial. git
Tham khảohttps. //www. bộ gọi mã. com/java-write-excel-file-apache-poi/ https. //www. bộ gọi mã. com/java-read-excel-file-apache-poi/