[Java] Đọc ghi file Excel trong Java với jxl – Read write Excel file in Java with jxl

Trong quá trinh làm việc và xử lý dữ liệu chúng ta thường phải tương tác với các file đặc biệt là File Excel. Hôm nay mình sẽ hướng dẫn các bạn các bước đơn giản để đọc ghi file Excel với jxl. Jxl là một gói thư viện cho phép chúng ta tương tác gới Excel như đọc, ghi,.., về thông tin chi tiết gói jxl các bạn xem tại đây.

Trước tiên các bạn download Jxl (hoặc tại đây), giải nén sau đó copy file *.jar vừa vào project, ấn chuột phải chọn Build Path / Add to Build Path để có thể sử dụng thư viện này. Bây giờ chúng ta lần lượt tìm hiểu:
Cách tạo và ghi file Excel với Jxl
Cách đọc file Excel với Jxl
Cách mở và ghi tiếp file Excel đã có với Jxl
Code minh họa

Tạo và ghi file Excel với Jxl

Bước 1: Tạo đối tượng WritableWorkbook “trỏ” đến file của bạn. Lưu ý là nếu file của bạn đã tồn tại thì nó sẽ bị xóa đi và tạo lại.

WritableWorkbook workbook = Workbook.createWorkbook(new File(fileName));

Bước 2: Tạo WritableSheet – sheet bạn cần ghi dữ liệu:

WritableSheet sheet = workbook.createSheet("name sheet", 0);

Lưu ý: trong hàm createSheet có 2 đối số, đối số thứ nhất là chuỗi tên sheet, đối số thứ 2 là một số nguyên chỉ vị trí của sheet, vị trí sheet bắt đầu bằng 0.

Bước 3: Tiếp theo chúng ta sẽ thêm các dạng dữ liệu vào các ô bằng phương thức addCell. Để viết dữ liệu vào các ô, chúng ta sẽ có 3 dạng chính: Chuỗi, Số và Công thức lần lượt được tạo bằng Label, Number, Formula. Ví dụ:

sheet.addCell(new Label(0, 0, "Add a String to cell")); // add a String to cell A1
sheet.addCell(new Number(0, 1, 100)); // add number 100 to cell A2
sheet.addCell(new Formula(0, 3, "IF(A1=1,"one", "two")")); // add number 100 to cell A3

Bước 4: Sau khi chúng ta đã thực hiện xong bước 3, chúng ta cần thực hiện lệnh writeclose để hoàn tất việc ghi dữ liệu

workbook.write();
workbook.close();

Đọc file Excel với Jxl

Bước 1: Tạo Workbook “trỏ” đến file của bạn.

Workbook workbook = Workbook.getWorkbook(new File(fileName));

Bước 2: Lấy Sheet bạn muốn đọc. Bạn có thể lấy theo vị trí sheet hoặc tên Sheet

Sheet sheet = workbook.getSheet(0);

Bước 3: Đọc nội dung từng ô trong bảng tính. Nếu bạn muốn lấy nội dung của một ô nào đó bạn có thể làm như sau: sheet.getCell(col, row).getContents(). Tuy nhiên nếu bạn muốn đọc toàn bộ các ô trong bảng tính hãy lấy hàng và cột cuối cùng chứa dữ liệu bằng sheet.getRows()sheet.getColumns(), và dùng vòng lặp for để đọc từng ô. Sau khi đọc xong, chúng ta cũng cần close workbook như khi viết dữ liệu

for (int row = 0; row < rows; row++) {
	for (int col = 0; col < cols; col++) {
		Cell cell = sheet.getCell(col, row);
		System.out.print(cell.getContents() + "t");
	}
	System.out.println("n");
}
workbook.close();

Mở và ghi thêm dữ liệu vào Excel với Jxl

Để mở và ghi thêm dữ liệu vào file Excel, trước tiên chúng ta cần lấy Workbook từ file Excel cần viết thêm giống như khi chúng ta đọc. Sau đó tạo một WritableWorkbook đến chính workbook vừa lấy và chúng ta sẽ làm việc với WritableWorkbook này bình thường.

Workbook workbook = Workbook.getWorkbook(new File(fileName));
WritableWorkbook writeWorkbook = Workbook.createWorkbook(new File(fileName), workbook);

Demo code

read wirte Excel file in java

package vietSource.net.IOFile;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * ----------------- @author nguyenvanquan7826 -----------------
 * ---------------nguyenvanquan7826.wordpress.com --------------
 */
public class ReadWriteExcel {

	private final String fileName = "/home/nguyenvanquan7826/Desktop/nguyenvanquan7826.xls";

	// data to write file
	private Object[][] data = { { "STT", "Họ và tên", "Điểm", "Xếp loại" },
			{ "1", "Nguyễn Văn Quân", "9.0", "" },
			{ "2", "Phạm Thị Hà", "8.0", "" },
			{ "3", "Nguyễn Bá Cường", "8.5", "" },
			{ "4", "Vũ Công Tịnh", "9.0", "" },
			{ "5", "Phạm Trọng Khang", "8", "" },
			{ "6", "Mai Văn Tài", "8", "" } };

	// create and write new file *.xls
	private void writeFileExcel() {
		WritableWorkbook workbook;
		// create workbook
		try {
			workbook = Workbook.createWorkbook(new File(fileName));

			// create sheet
			WritableSheet sheet1 = workbook.createSheet("KTPM K10B", 0);

			// create Label and add to sheet
			sheet1.addCell(new Label(0, 0, "DANH SÁCH SINH VIÊN TIÊU BIỂU"));

			// row begin write data
			int rowBegin = 2;
			int colBegin = 0;

			for (int row = rowBegin, i = 0; row < data.length + rowBegin; row++, i++) {
				for (int col = colBegin, j = 0; col < data[0].length + colBegin; col++, j++) {
					Object obj = data[i][j];
					sheet1.addCell(new Label(col, row, (String) data[i][j]));
				}
			}
			// write file
			workbook.write();

			// close
			workbook.close();
		} catch (IOException e) {
			System.out.println("Error create file\n" + e.toString());
		} catch (RowsExceededException e) {
			System.out.println("Error write file\n" + e.toString());
		} catch (WriteException e) {
			System.out.println("Error write file\n" + e.toString());
		}
		System.out.println("create and write success");
	}

	// open and read file *.xls
	private void readFileExcel() {
		Workbook workbook;
		try {
			// create workbook to open file
			workbook = Workbook.getWorkbook(new File(fileName));
			// get sheet want read
			Sheet sheet = workbook.getSheet(0);
			// get number row and col contain data
			int rows = sheet.getRows();
			int cols = sheet.getColumns();

			System.out.println("Data in file:");
			// read data in each cell
			for (int row = 0; row < rows; row++) {
				for (int col = 0; col < cols; col++) {
					Cell cell = sheet.getCell(col, row);
					System.out.print(cell.getContents() + "\t");
				}
				System.out.println("\n");
			}
			// close
			workbook.close();
		} catch (BiffException e) {
			System.out.println("File not found\n" + e.toString());
		} catch (IOException e) {
			System.out.println("File not found\n" + e.toString());
		}
	}

	// open and write file is exists
	private void openAndWriteFileExcel() {
		Workbook workbook;
		WritableWorkbook writeWorkbook;
		try {
			// open file
			workbook = Workbook.getWorkbook(new File(fileName));
			// create file copy of root file to write file
			writeWorkbook = Workbook.createWorkbook(new File(fileName),
					workbook);

			// get sheet to write
			WritableSheet sheet1 = writeWorkbook.getSheet(0);
			int col = 3;
			int rowBegin = 3;
			// write data (formula)
			for (int row = rowBegin; row < data.length + rowBegin - 1; row++) {
				Formula f = new Formula(col, row, "IF(C" + (row + 1)
						+ ">8, \"Xuất sắc\", \"Giỏi\")");
				sheet1.addCell(f);
			}
			writeWorkbook.write();

			// close
			writeWorkbook.close();
		} catch (IOException e) {
			System.out.println("File not found\n" + e.toString());
		} catch (RowsExceededException e) {
			System.out.println("File not found\n" + e.toString());
		} catch (WriteException e) {
			System.out.println("File not found\n" + e.toString());
		} catch (BiffException e) {
			System.out.println("File not found\n" + e.toString());
		}
		System.out.println("open and write success");
	}

	private void showMenu() {
		System.out.println();
		System.out.println("Select an integer for process:");
		System.out.println("1 - Create new file and wrire data");
		System.out.println("2 - Read file exits");
		System.out.println("3 - Open and write to file exits");
	}

	public static void main(String[] args) {
		ReadWriteExcel rwExcel = new ReadWriteExcel();
		while (true) {
			rwExcel.showMenu();
			Scanner scan = new Scanner(System.in);
			int select = Integer.parseInt(scan.nextLine());
			switch (select) {
			case 1:
				rwExcel.writeFileExcel();
				break;
			case 2:
				rwExcel.readFileExcel();
				break;
			case 3:
				rwExcel.openAndWriteFileExcel();
				break;
			default:
				scan.close();
				break;
			}
		}
	}
}

Đọc thêm (read more): Java Excel API Tutorial