Hướng dẫn dọc file excel trong netbean

Một vấn đề mà tôi nhận được nhiều request nữa đó là làm sao để kết xuất dữ liệu ra Excel nhằm các mục đích báo cáo, tương tác cơ bản người dùng,…

Nhận thấy đó cũng là điều rất cần thiết nên tôi viết bài này nhằm hỗ trợ các bạn gặp khúc mắc vê vấn đề này.

Có rất nhiều kỹ thuật để làm được việc này. Tuy nhiên ở đây tôi chọn POI – một dự án open-source của Apache để sử dụng. Bạn cần phải download thư viện này tại poi.apache.org. Sau khi download về, giải nén và bạn có thư viện sẵn sàng cho việc export. Phiên bản tôi sử dụng ở đây là bản poi-3.8-beta4-20110826. Bạn có thể download các bản khác xài cũng được. Kích thước gói jar vào khoảng 1.8MB ( chỉ cần 1 file jar poi-3.8-beta4-20110826.jar là đủ nhé bạn).

Bạn có thể dùng Eclipse hay IDE nào đó cũng được miễn là bạn reference đến thư viện này. Ở đây tôi dùng Eclipse.

Trong ví dụ này tôi kết nối đến cơ sở dữ liệu Access(bạn có thể khác) để lấy dữ liệu sau đó kết xuất ra excel. Cơ sở dữ liệu này có cấu trúc như sau:

Chúng ta đều biết rằng, trong mỗi môi trường phát triển phần mềm, dữ liệu là một phần không thể thiếu. Khi phát triển, chúng ta thường lưu trữ dữ liệu trực tiếp trong các file chương trình, mỗi khi có sự thay đổi nào đó liên quan trực tiếp đến dữ liệu trong các file đó thì bắt buộc phải thực hiện biên dịch code và kiểm tra lại các kết quả biên dịch đó.

Vậy thì vấn đề đặt ra ở đây là, nếu như dữ liệu cần phải thay đổi nhiều lần, liên tục và hàng ngày thì chúng ta sẽ thực hiện thay đổi từng phần theo mỗi lần thay đổi đó và rồi lại biên dịch lại? Chỉ nghĩ thôi đã thấy khá là mệt mỏi rồi, chưa kể đến việc biên dịch lỗi và ngồi mần lại thì đúng là ác mộng.

Hướng dẫn dọc file excel trong netbean

Thế nên trải qua rất nhiều kinh nghiệm xương máu, người ta và người tây đã rút ra được rằng, việc phát triển code tốt nhất là nên tách rời với phần dữ liệu để khi hoạt động chúng không ảnh hưởng đến nhau đến các file chương trình. Đưa dữ liệu ra ngoài các file code của chương trình chính là cách duy nhất để làm việc đó, chúng ta có thể đưa dữ liệu vào trong các file excel, property file, config file, Json file, hay các XML file…

Apache POI giúp Java/ các công nghệ liên quan đến Java có thể đọc và ghi các file excel trên nhiều nền tảng khác nhau. Sử dụng Apache POI chúng ta có thể thực hiện các thao tác đọc, ghi trên cả định dạng file .xls hay .xlsx. Apache POI là một công cụ mã nguồn mở được cung cấp bởi apache.

Apache POI sẽ rất hữu ích khi thực hiện sửa đổi một lượng lớn nội dung dữ liệu. Dưới đây là các bước thực hiện download và sử dụng Apache POI nhé.

Các bước thực hiện download Apache POI

1. Truy cập link: https://poi.apache.org/download.html

2. Click vào link theo thứ tự như các hình phía dưới:

Hướng dẫn dọc file excel trong netbean

Hướng dẫn dọc file excel trong netbean

Hướng dẫn dọc file excel trong netbean

3. Lưu file zip về máy tính, sau đó giải nén ta được một folder và các thông tin tương tự như hình dưới:

Hướng dẫn dọc file excel trong netbean

Vậy là xong bước download bộ thư viện Apache POI.

Nếu bạn sử dụng Maven thì có thể sử dụng đoạn mã dưới này, thêm vào trong nội dung file POM là được nhé:

         org.apache.poi          poi          4.0.0

2. Tích hợp Apache POI và Selenium Webdriver

Chúng ta có thể sử dụng tích hợp Apache POI trong Selennium Webdriver để thực hiện đọc và ghi file excel và tạo một data drivent framework.

Các bước để thực hiện tích hợp Apache POI với project Selenium webdriver:

1. Mở project selenium webdriver trên Eclipse

2. Nhấn chuột phải vào tên project và chọn Properties > Java build path

3. Nhấn vào nút Add External jars

4. Thực hiện điều hướng đến thư mục chứa Apache POI vừa giản nén, chọn các file jars trong thư mục chính, các file jar trong thư mục lib, và trong thư mục ooxml-lib:

Hướng dẫn dọc file excel trong netbean

5. Nhấn nút OK > Hoàn tất việc thêm Apache POI vào trong project.

6. Để kiểm tra việc thêm này đã thành công hay chưa, ta có thể gõ thử từ khóa Workbook sau đó nhấn tổ hợp Ctrl + Space để xem gợi ý, nếu nó hiển thị tương tự như hình phía dưới thì bạn có thể sử dụng thoải mái nhé!

Hướng dẫn dọc file excel trong netbean

3. Một số thuật ngữ quan trọng thường dùng trong Apache POI

Thư viện của Apache POI xoay quanh 4 từ khóa quen thuộc trong một file excel:

Workbook: 1 workbook đại diện cho 1 file excel

Sheet: 1 workbook có thể bao gồm nhiều sheet, chúng ta có thể truy cập vào các sheet này dựa theo tên hoặc chỉ số (index) của sheet đó trong workbook.

Row: như tên gọi của nó, đại diện cho một hàng của 1 sheet.

Cell: một cell sẽ đại diện cho một ô trong sheet.

4. Đọc dữ liệu file excel với Apache POI

Trước tiên chúng ta sẽ cùng thực hiện đọc dữ liệu từ 1 file excel và in ra màn hình nội dung đó.

1. Tạo project, và class trong Eclipse

2. Tạo 1 file excel có tên là testData.xlsx, có 1 sheet tên là Sheet1 và nội dung của ô A1 = Hello. Lưu lại trong một thư mục ở máy tính của bạn.

3. Tạo một đối tượng cho FileInputStream chứa đường dẫn đến nơi lưu trữ file data excel:

Workbook wb = WorkbookFactory.create(fis);

5

4. Tạo đối tượng workbook bằng cách sử dụng method create() trong WorkbookFactory class và truyền vào đó tham số đầu vào là đối tượng fis file excel ta vừa tạo ở bước 3:

Workbook wb = WorkbookFactory.create(fis);

5. Tạo đối tượng sheet từ đối tượng workbook (wb) vừa tạo ở bước 4, ở đây ta sẽ truyền tham số đầu vào chính xác tên của sheet trong file excel ta đã chuẩn bị ở bước 2 là Sheet1:

Sheet sheet = wb.getSheet("Sheet1");

6. Tạo đối tượng Row từ sheet vừa có ở bước 5, tham số đầu vào là chỉ số hàng – bắt đầu từ 0

Row row = sheet.getRow(0);

7. Ta cũng có thể tạo 1 đối tượng cell từ đối tượng row ở bước 6, tham số đầu vào ở đây cũng là chỉ số cell:

Cell cell = row.getCell(0);  

8. Để lấy ra giá trị của ô trong file excel ta có thể gọi method getStringCellValue() trong cell class:

System.out.println(cell.getStringCellValue());

5. Ghi dữ liệu vào file excel trong Selenium Webdriver

Ta cũng thực hiện các bước 1, 2, 3, 4, 5, 6 tương tự như thao tác đọc dữ liệu để khởi tạo đầu vào file excel liên quan đến: Workbook, sheet, row.

FileInputStream fis = new FileInputStream("C:pathXdata-write.xlsx");
Workbook wb = WorkbookFactory.create(fis);
Sheet sheet = wb.getSheet("Sheet1");
Row row = sheet.getRow(0);

7. Tạo một cell thuộc row với tham số đầu vào là chỉ số của cell muốn thêm:

Workbook wb = WorkbookFactory.create(fis);

0

8. Thực hiện gán giá trị cho cell đó bằng cách sử dụng method setCellValue() trong Cell Class:

Workbook wb = WorkbookFactory.create(fis);

1

9. Tạo đối tượng để lưu thông tin file output với FileOutputStream :

Workbook wb = WorkbookFactory.create(fis);

2

10. Method write() sẽ giúp chúng ta thực hiện lưu thông tin giá trị vừa gán vào trong file với đối tượng fos:

Workbook wb = WorkbookFactory.create(fis);

3

Vậy là xong rồi đó :D, ngoài ra các bạn cũng có thể tham khảo thêm tại đây nhé.

Trên đây là mấy bước và mấy hàm cơ bản để chúng ta làm quen với Apache POI và Excel trong Selnium. Và tất nhiên với những bài toán cụ thể thì nó sẽ chẳng thể nào đơn giản từng dòng, từng chữ như ví dụ trên này được. Nó có thể có rất nhiều các dòng, cột dữ liệu, yêu cầu ta cần phải xử lý tỉ mỉ, chi tiết hơn rất nhiều.

Để đọc thì đơn giản là ta sẽ cần sử dụng vòng lặp for với biến i,j tương ứng cho hàng và cột cứ thế thì sẽ ra thôi. Kaka. Nói thì dễ nhưng làm rồi mới thấy dễ hơn =)))

Thông thường, đọc và ghi dữ liệu file excel mình sẽ viết thành một hàm và cho nó vào 1 file common nào đó, khi nào cần thì sẽ gọi ra và dùng thôi.

Các bạn có thể tham khảo đoạn phía dưới này về hàm đọc và ghi dữ liệu excel của mình, nếu có vấn đề gì cần trao đổi hay góp ý các bạn thoải mái để lại phía dưới bình luận nhé!