Xu Hướng 11/2022 # Thao Tác Với File Excel Trong Java Sử Dụng Api Apache Poi / 2023 # Top 18 View | Hoisinhvienqnam.edu.vn

Xu Hướng 11/2022 # Thao Tác Với File Excel Trong Java Sử Dụng Api Apache Poi / 2023 # Top 18 View

Bạn đang xem bài viết Thao Tác Với File Excel Trong Java Sử Dụng Api Apache Poi / 2023 được cập nhật mới nhất trên website Hoisinhvienqnam.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Đôi điều về Apache POI

Nhiều khi trong một ứng dụng phần mềm cần thiết phải tạo ra các báo cáo trong định dạng file Microsoft Excel, hoặc sẽ nhận file Excel như dữ liệu đầu vào. Ví dụ, một ứng dụng được phát triển cho bộ phận Tài chính của một công ty sẽ được yêu cầu để tạo ra tất cả các kết quả đầu ra là file Excel. Bất kỳ lập trình viên Java nào muốn sản xuất các tập tin MS Office như đầu ra thì nên sử dụng một giao diện lập trình(API) để làm như vậy. Apache POI là một API cho phép lập trình viên tạo mới, sửa và hiển thị Microsoft Office file sử dụng Java. Apache POI là một thư viện mã nguồn mở được phát triển và xuất bản bởi Apache Software Foundation.

Cấu phần của Apache POI

Apache POI chứa các lớp và phương thức để làm việc trên các tài liệu dưới định dạng file MS Office. Danh sách các thành phần của API như sau.

POIFS (Poor Obfuscation Implementation File System) : This component is the basic factor of all other POI elements. It is used to read different files explicitly.

HPSF (Horrible Property Set Format) : Được sử dụng để trích xuất các thuộc tính của file MS-Office.

HWPF (Horrible Word Processor Format) : Được sử dụng để đọc ghi định dạng .doc của file MS-Office.

XWPF (XML Word Processor Format) : Được sử dụng để đọc ghi định dạng .docx của file MS-Office.

HSLF (Horrible Slide Layout Format) : Được sử dụng để đọc ghi file PowerPoint.

HDGF (Horrible DiaGram Format) : Được sử dụng cho file MS-Visio dưới dạng binary.

HPBF (Horrible PuBlisher Format) : Được sử dụng để đọc ghi file MS-Publisher.

Note

Các phiên bản cũ của Apache POI chỉ hỗ trợ các định dạng file binary như doc, xls, ppt, vv từ phiên bản 3.5 trở đi, POI hỗ trợ các định dạng file OOXML của MS-Office như docx, xlsx, pptx, vv

Làm việc với MS-Excel

Excel là định dạng file rất phổ biến được tạo bởi Microsoft. Mặc dù nó không phải là định dạng file mở nhưng ứng dụng Java vẫn có thể đọc, ghi Excel file bằng cách sử dụng giao diện lập trình Apache POI.

Cách thức lấy thư viện Apache POI Để sử dụng POI cho ứng dụng của bạn, có 2 cách:

Cho ứng dụng Maven: Thêm các dependency sau vào file pom.xml:

Chúng ta sẽ sử dụng entity Book để đọc ghi dữ liệu

package vuta.apache.poi.example; public class Book { private String title; private String author; private double price; public Book() { } public Book(String title, String author, double price) { super(); this.title = title; this.author = author; this.price = price; } public String toString() { return String.format("%s - %s - %f", title, author, price); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }

Đọc Ghi File Excel Bằng Java Sử Dụng Apache Poi / 2023

Đọc ghi file Excel bằng Java sử dụng Apache POI

Apache POI là một thư viện mã nguồn mở cung cấp bởi apache được sử dụng để xử lý các file office như word, excel, powerpoint…

1.1 Xử lý file Excel với Apache POI

Apache POI xử lý các thành phần trong excel theo đúng lập trình hướng đối tượng – mỗi thành phần trong Excel đều được coi như 1 đối tượng.

Các class cơ bản được dùng để đọc ghi file Excel

HSSF: các class có tên bắt đầu là HSSF được dùng để sử lý các file Microsoft Excel 2003 (.xls)

XSSF: các class có tên bắt đầu là XSSF được dùng để sử lý các file Microsoft Excel 2007 trở về sau (.xlsx)

XSSFWorkbook và HSSFWorkbook là các class xử lý với Excel Workbook

HSSFSheet và XSSFSheet là các class xử lý với Excel Worksheet

Row: định nghĩa một dòng trong excel

Cell: định nghĩa một ô trong excel

Ở đây mình sử dụng maven để lấy thư viện của Apache POI.

Cho các file Microsoft Excel 2003

Cho các file Microsoft Excel 2007 trở về sau

3.1 Ghi file Excel

Tạo 1 Worksheet có name là “Customer_Info”

dòng đầu tiên hiển thị “List Of Customer”

Các dòng tiếp theo hiển thị các thông tin của customer (id, name, email), mỗi thông tin ở 1 column.

package stackjava.com.apachepoiexcel.demo; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WriteFileExcel { public static void main(String[] args) { System.out.println("Create file excel"); XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Customer_Info"); int rowNum = 0; Row firstRow = sheet.createRow(rowNum++); Cell firstCell = firstRow.createCell(0); firstCell.setCellValue("List of Customer"); listOfCustomer.add(new Customer(1, "Sylvester Stallone", "abc@gmail.com")); listOfCustomer.add(new Customer(2, "Tom Cruise", "xyz@yahoo.com")); listOfCustomer.add(new Customer(3, "Vin Diesel", "abc@hotmail.com")); for (Customer customer : listOfCustomer) { Row row = sheet.createRow(rowNum++); Cell cell1 = row.createCell(0); cell1.setCellValue(customer.getId()); Cell cell2 = row.createCell(1); cell2.setCellValue(customer.getName()); Cell cell3 = row.createCell(2); cell3.setCellValue(customer.getEmail()); } try { FileOutputStream outputStream = new FileOutputStream("Demo-ApachePOI-Excel.xlsx"); workbook.write(outputStream); workbook.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Done"); } } package stackjava.com.apachepoiexcel.demo; public class Customer { private int id; private String name; private String email; }

Kết quả:

Bây giờ mình sẽ thực hiện đọc lại file Excel vừa tạo ở trên:

package stackjava.com.apachepoiexcel.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadFileExcel { public static void main(String[] args) { try { FileInputStream excelFile = new FileInputStream(new File("Demo-ApachePOI-Excel.xlsx")); Workbook workbook = new XSSFWorkbook(excelFile); Sheet datatypeSheet = workbook.getSheetAt(0); DataFormatter fmt = new DataFormatter(); Row firstRow = iterator.next(); Cell firstCell = firstRow.getCell(0); System.out.println(firstCell.getStringCellValue()); while (iterator.hasNext()) { Row currentRow = iterator.next(); Customer customer = new Customer(); customer.setId(Integer.parseInt(fmt.formatCellValue(currentRow.getCell(0)))); customer.setName(currentRow.getCell(1).getStringCellValue()); customer.setEmail(currentRow.getCell(2).getStringCellValue()); listOfCustomer.add(customer); } for (Customer customer : listOfCustomer) { System.out.println(customer); } workbook.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

*Lưu ý: id của customer là integer nên khi ghi vào file excel nó sẽ là kiểu numeric, do đó khi đọc ra thì nó sẽ đọc là numeric và chuyển thành double, ví dụ 1 sẽ là 1.0. Do đó ta dùng DataFormatter để định dạng nó về kiểu string và parse lại thành integer.

Kết quả:

List of Customer Customer [id=1, name=Sylvester Stallone, email=abc@gmail.com] Customer [id=2, name=Tom Cruise, email=xyz@yahoo.com] Customer [id=3, name=Vin Diesel, email=abc@hotmail.com]

Okay, Done!

Đọc ghi file Excel bằng Java sử dụng Apache POI

Reference:

Đọc Ghi Excel File Sử Dụng Apache Poi / 2023

Do vậy, trong bài viết này, mình đã giới thiệu về Apache POI là một thư viện mã nguồn mở cho phép chúng ta thao tác với các tập tin định dạng microsoft office. Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách đọc và ghi excel file sử dụng Apache POI.

Maven denpendency

Để thao tác được với Excel file, chúng ta cần thêm các denpendency cần thiết.

Một số lưu ý khi sử dụng Apache POI

Bài viết này sẽ hướng dẫn các bạn cách đọc và ghi file excel sử dụng thư viện Apache POI. Tuy nhiên có một số lưu ý sau các bạn cần chú ý để có thể triển khai cho từng trường hợp của mình.

Tiền tố HSSF được đặt trước các tên class dùng để thao tác với các file định dạng Microsoft Excel 2003.

Tiền tố XSFF được đặt trước các tên class dùng để thao tác với các file định dạng Microsoft Excel 2007.

XSSFWorkbook và HSSFWorkbook là các class đại diện cho một excel workbook.

HSSFSheet và XSSFSheet là các class đại diện cho một excel WorkSheet.

Row đại diện cho một dòng.

Cell đại diện cho một ô trong một hàng xác định.

Trong bài hướng dẫn này, các bạn sẽ được hướng dẫn cách đọc ghi file excel Microsoft Excel 2007 có đôi là xlsx, có nghĩa là chúng ta sẽ sử dụng các class có tiền tố là XSFF để đọc file exel.

Ghi excel file

Để ghi một excel file cần qua những bước cơ bản sau:

Tạo workbook.

Tạo một sheet trong workbook.

Tạo một dòng trong sheet.

Thêm một cột trong sheet.

import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileOutputStream; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class Main { public static void main(String[] args) { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("student Details"); data.put("1", new Object[]{"ID", "NAME", "LASTNAME"}); data.put("2", new Object[]{1, "Pankaj", "Kumar"}); data.put("3", new Object[]{2, "Prakashni", "Yadav"}); data.put("4", new Object[]{3, "Ayan", "Mondal"}); data.put("5", new Object[]{4, "Virat", "kohli"}); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); Object[] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { Cell cell = row.createCell(cellnum++); if (obj instanceof String) cell.setCellValue((String) obj); else if (obj instanceof Integer) cell.setCellValue((Integer) obj); } } try { FileOutputStream out = new FileOutputStream(new File("gfgcontribute.xlsx")); workbook.write(out); out.close(); System.out.println("gfgcontribute.xlsx written successfully on disk."); } catch (Exception e) { e.printStackTrace(); } } }

Đọc file excel

Để đọc một excel file chúng ta cũng có các bước sau:

Khởi tạo một workbook instance từ excel file.

Lấy sheet từ workbook.

Đọc từng dòng, mỗi dòng lấy giá trị từ từng cột.

import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.util.Iterator; public class Main { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(new File("gfgcontribute.xlsx")); XSSFWorkbook workbook = new XSSFWorkbook(file); XSSFSheet sheet = workbook.getSheetAt(0); while (rowIterator.hasNext()) { Row row = rowIterator.next(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "t"); break; } } System.out.println(""); } file.close(); } catch (Exception e) { e.printStackTrace(); } } }

Output:

IDtNAMEtLASTNAMEt1.0tPankajtKumart2.0tPrakashnitYadavt3.0tAyantMondalt4.0tVirattkohlit

Note: Nếu bạn muốn đọc một file tại một đường dẫn khác, thì bạn chỉ việc thay

FileInputStream file = new FileInputStream(new File("gfgcontribute.xlsx"));

thành đường dẫn bạn mong muốn.

Thêm dữ liệu vào sheet

Nếu bạn đã có một excel sẵn và muốn ghi thêm dự liệu vào đó, thì chỉ cần lấy sheet đó ra từ workbook, đi đến dòng cuối cùng và bắt đầu ghi thêm dữ liệu vào.

private static final String FILE_NAME = "C:\Users\pankaj\Desktop\projectOutput\blo.xlsx"; public static void write() throws IOException, InvalidFormatException { InputStream inp = new FileInputStream(FILE_NAME); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); int num = sheet.getLastRowNum(); Row row = sheet.createRow(++num); row.createCell(0).setCellValue("xyz"); ..... .. FileOutputStream fileOut = new FileOutputStream(FILE_NAME); wb.write(fileOut); fileOut.close(); }

Nguồn tham khảo

https://www.geeksforgeeks.org/reading-writing-data-excel-file-using-apache-poi/

Đọc Ghi File Excel Trong Java Với Jxl / 2023

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")); sheet.addCell(new Number(0, 1, 100)); sheet.addCell(new Formula(0, 3, "IF(A1=1,"one", "two")"));

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 write và close để 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() và 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

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; /** */ public class ReadWriteExcel { private final String fileName = "/home/nguyenvanquan7826/Desktop/nguyenvanquan7826.xls"; 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", "" } }; private void writeFileExcel() { WritableWorkbook workbook; try { workbook = Workbook.createWorkbook(new File(fileName)); WritableSheet sheet1 = workbook.createSheet("KTPM K10B", 0); sheet1.addCell(new Label(0, 0, "DANH SÁCH SINH VIÊN TIÊU BIỂU")); 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])); } } workbook.write(); workbook.close(); } catch (IOException e) { System.out.println("Error create file " + e.toString()); } catch (RowsExceededException e) { System.out.println("Error write file " + e.toString()); } catch (WriteException e) { System.out.println("Error write file " + e.toString()); } System.out.println("create and write success"); } private void readFileExcel() { Workbook workbook; try { workbook = Workbook.getWorkbook(new File(fileName)); Sheet sheet = workbook.getSheet(0); int rows = sheet.getRows(); int cols = sheet.getColumns(); System.out.println("Data in file:"); 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() + " "); } System.out.println(" "); } workbook.close(); } catch (BiffException e) { System.out.println("File not found " + e.toString()); } catch (IOException e) { System.out.println("File not found " + e.toString()); } } private void openAndWriteFileExcel() { Workbook workbook; WritableWorkbook writeWorkbook; try { workbook = Workbook.getWorkbook(new File(fileName)); writeWorkbook = Workbook.createWorkbook(new File(fileName), workbook); WritableSheet sheet1 = writeWorkbook.getSheet(0); int col = 3; int rowBegin = 3; for (int row = rowBegin; row < data.length + rowBegin - 1; row++) { Formula f = new Formula(col, row, "IF(C" + (row + 1) sheet1.addCell(f); } writeWorkbook.write(); writeWorkbook.close(); } catch (IOException e) { System.out.println("File not found " + e.toString()); } catch (RowsExceededException e) { System.out.println("File not found " + e.toString()); } catch (WriteException e) { System.out.println("File not found " + e.toString()); } catch (BiffException e) { System.out.println("File not found " + 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ập nhật thông tin chi tiết về Thao Tác Với File Excel Trong Java Sử Dụng Api Apache Poi / 2023 trên website Hoisinhvienqnam.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!