Đề Xuất 3/2023 # Thao Tác Với Excel File Bằng Apache Poi # Top 10 Like | Beiqthatgioi.com

Đề Xuất 3/2023 # Thao Tác Với Excel File Bằng Apache Poi # Top 10 Like

Cập nhật nội dung chi tiết về Thao Tác Với Excel File Bằng Apache Poi mới nhất trên website Beiqthatgioi.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.

Khi lập trình với bất cứ hệ thống nào thì việc thao tác với các file excel luôn là điều bắt buộc mọi developer phải nắm được. Và để làm việc hiệu quả với excel file trong java thì tôi xin giới thiệu thư viện Apache POI trong bài viết này. POI là viết tắt của Poor Obfuscation Implementation, đó là một thư viện mã nguồn mở của Java, được cung cấp bởi Apache giúp chúng ta làm việc với các tài liệu của Microsoft như Word, Excel, PowerPoint…

Để thao tác với các file Excel thì POI cung cấp cho chúng ta các khái niệm chính sau:

Workbook: Đây là khái niệm đại diện cho một bảng tính, hay một file Excel.

Sheet: tương đương với các sheet trong file Excel, một workbook có thể có một hoặc nhiều sheet.

Row: đơn vị hàng trong một bảng tính

Cell: đại diện cho một cột trong bảng tính. Như vậy mỗi một ô trong file Excel sẽ được biểu diễn bằng một row và một cell.

Để làm việc với Excel thì chúng ta không cần quan tâm đến tất cả các class trong thư viện POI mà chỉ cần để ý đến 2 loại sau:

Các class có tiếp đầu ngữ là HSSF (Horrible SpreadSheet Format) : Các class giúp đọc và ghi file dang Microsoft Excel (XLS – dạng excel cũ). Ví dụ: HSSFWorkbook, HSSFSheet, HSSFCellStyle,…

Các class có tiếp đầu ngữ là XSSF (XML SpereadSheet Format) : Đọc và ghi định dạng file Open Office XML (XLSX – dạng excel mới).

Nếu bạn sử dụng Maven thì cần thêm dependency của POI vào file pom.xml:

Còn Gradle thì thêm vào build.gradle:

compile "org.apache.poi:poi:3.17"

Trước tiên, ta tạo một class model để có thể ghi các ra các row theo một List data:

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) { chúng tôi = name; this.email = email; this.dateOfBirth = dateOfBirth; this.daysOfWork = daysOfWork; this.salaryPerDay = salaryPerDay; this.totalSalary = totalSalary; }

Tiếp đến chuẩn bị data raw để ghi vào file excel:

Sau các bước chuẩn bị data, chúng ta tạo một workbook:

Có workbook rồi chúng ta tạo tiếp một sheet trong đó:

Có thể thêm một chút màu sắc font bạt cho đẹp mắt:

Font headerFont = workbook.createFont(); headerFont.setBold(true); headerFont.setFontHeightInPoints((short) 14); headerFont.setColor(IndexedColors.RED.getIndex());

Sau đó chúng ta tạo row đầu tiên chứa các tiêu đề của các cột:

Do trong phần model của chúng ta có loại dữ liệu khác đặc biệt là Date (dateOfBirth) nên chúng ta cần một format cho nó:

Tiếp đến là công việc chính, set data vào các ô trong file excel:

Chú ý rằng cột cuối cùng ta 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à FORMULA.

Cuối cùng là ghi tất cả ra một file Excel thật và kết thúc việc tạo một file Excel:

Nội dung file employee.xlsx 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 đó:

Duyệt các sheet trong một workbook:

Vì trong file excel ta vừa tạo chỉ có một sheet nên chúng ta sẽ get nó ra như sau:

Để duyệt các row trong sheet, ta làm như sau:

Sau khi duyệt xong nhớ đóng workbook lại:

Màn hình console sẽ trông như sau:

Từ đây ta có thể nhận thấy đối với kiểu là FORMULA thì khi in ra chúng ta sẽ nhận được công thức của field đó chứ không phải giá trị cuối cùng. Để nhận các giá trị cuối cùng của field thì chúng ta viết thêm hàm sau:

private static Object getCellValue(Cell cell, FormulaEvaluator evaluator) { CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellTypeEnum()) { case BOOLEAN: return cellValue.getBooleanValue(); case NUMERIC: return cellValue.getNumberValue(); case STRING: return cellValue.getStringValue(); case BLANK: return ""; case ERROR: return cellValue.getError(cell.getErrorCellValue()).getStringValue();

Với một cell có kiểu FORMULA bạn có thể in 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 row như sau:

Kết quả nhận được sẽ như sau:

Để sửa một file Excel thì chúng ta cũng làm tương tự đọc một file Excel. Đầu tiên là tạo một workbook cho nó và một sheet tương ứng:

Workbook workbook = WorkbookFactory.create(new File("./employee.xlsx");

Xác định vị trí cần update lại và định vị nó. Cần chú ý nếu vị trí cần update chưa được tạo thì cần khởi tạo field đó trước, nếu không chương trình sẽ throw một Exception:

Update lại định dạng và giá trị của field đó:

Output ra một file Excel khác và đóng workbook:

https://github.com/tubean/apache-poi-tutorial.git

https://www.callicoder.com/java-write-excel-file-apache-poi/https://www.callicoder.com/java-read-excel-file-apache-poi/

Đọc Ghi File Ms Word Bằng Java Với Apache Poi

Đọc ghi file MS Word bằng Java với 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…

XWPFDocument:Được sử dụng để đọc ghi các file MS-Word với định dạng .docx (đọc, lưu file, thêm đoạn văn bản…)

XWPFParagraph: Được dùng để tạo đoạn paragraph trong tài liệu word. (Tùy chỉnh căn lề, border)

XWPFRun: Được sử dụng thể thêm text vào paragraph (Tùy chỉnh font, size…)

XWPFTable: Được dùng để thêm mới bảng vào file (Thêm cột, thêm dòng, cài đặt chiều rộng cho cột)

XWPFWordExtractor: Đây là class cơ bản được dùng để lấy text đơn giản từ tài liệu word (lấy tất cả text bên trong file word)

Thư viện sử dụng:

Ví dụ ghi file MS Word:

package stackjava.com.apachepoi.word.demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class DemoWrite { public static void main(String[] args) throws IOException { XWPFDocument document = new XWPFDocument(); XWPFParagraph paragraph1 = document.createParagraph(); XWPFRun run = paragraph1.createRun(); run.setText("Paragraph 1: stackjava.com"); XWPFParagraph paragraph2 = document.createParagraph(); run = paragraph2.createRun(); run.setText("Paragraph 2: demo read/write file MS-Word"); FileOutputStream out = new FileOutputStream(new File("demo-apache-apoi-word.docx")); document.write(out); out.close(); document.close(); System.out.println("successully"); } }

Kết quả:

package stackjava.com.apachepoi.word.demo; import java.io.FileInputStream; import java.util.List; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; public class DemoRead { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("demo-apache-apoi-word.docx"); XWPFDocument document = new XWPFDocument(OPCPackage.open(fis)); for (XWPFParagraph paragraph : paragraphList) { System.out.println(paragraph.getText()); } System.out.println("=============================="); System.out.println("Read file using XWPFWordExtractor "); XWPFWordExtractor wordExtractor = new XWPFWordExtractor(document); System.out.println(wordExtractor.getText()); wordExtractor.close(); document.close(); } catch (Exception ex) { ex.printStackTrace(); } } }

Kết quả:

Paragraph 1: stackjava.com Paragraph 2: demo read/write file MS-Word ============================== Read file using XWPFWordExtractor Paragraph 1: stackjava.com Paragraph 2: demo read/write file MS-Word

Okay, Done!

References:

https://poi.apache.org/document/

Hướng Dẫn Xuất Dữ Liệu Lớn Ra File Excel Với Thư Viện Apache Poi

Trong bài viết trước, tôi đã hướng dẫn đọc và ghi file excel trong Java sử dụng thư viện Apache POI. Với lượng dữ liệu ít khoảng vài nghìn dòng trở lại, khi xuất excel và .xlsx chúng ta có thể sử dụng các lớp có tiếp đầu ngữ HSSF, XSSF để xuất dữ liệu ra file excel mà không ảnh hưởng nhiều đến hiệu suất của chương trình. Tuy nhiên, với dữ liệu rất lớn khoảng vài chục nghìn dòng trở lên thì thời gian xử lý sẽ tương đối chậm, tốn nhiều bộ nhớ. May mắn là thư viện Apache POI còn thêm một class khác là SXSSF giúp chúng ta giải quyết vấn đề này.

SXSSF (Streaming version of XSSFWorkbook) là một phần mở rộng API của XSSF, được sử dụng khi xuất các file excel lớn và có bộ nhớ heap sapce hạn chế. Do SXSSF mở rộng từ XSSF nên chỉ hỗ trợ xuất file có phần mở rộng là .xlsx ( Microsoft Excel 2007 trở về sau).

Trong phần tiếp theo của bài này, tôi sẽ hướng dẫn các bạn đọc và ghi file excel sử dụng lớp có tiếp đầu ngữ là SXSSF. Nếu bạn chưa biết cách xuất dữ liệu ra file excel sử dụng thư viện Apache POI thì hãy xem bài viết Hướng dẫn đọc và ghi file excel trong Java sử dụng thư viện Apache POI.

Để tiện theo dõi, tôi sẽ sử dụng lại ví dụ của bài viết trước, chỉ thay đổi các lớp có tiếp đầu ngữ HSSF, XSSF bằng SXSSF.

Khởi tạo SXSSF

Trước khi đi vào phần ví dụ, chúng ta hãy tìm hiểu cách khởi tạo SXSSF:

SXSSFWorkbook workbook = new SXSSFWorkbook(); SXSSFWorkbook workbook = new SXSSFWorkbook(50); SXSSFWorkbook workbook = new SXSSFWorkbook(-1);

Lưu ý:

rowAccessWindowSize : xác định số lượng hàng (row) có thể được truy cập nhiều nhất thông qua SXSSFSheet.getRow. Khi một hàng (row) mới được tạo ra thông qua SXSSFSheet.createRow và nếu tổng số các bản ghi vượt quá giá trị được chỉ định (rowAccessWindowSize), khi đó hàng (row) với giá trị chỉ mục thấp nhất sẽ được làm mới (flushed) và không thể được truy cập thông qua SXSSFSheet.getRow nữa.

Các thao tác trên SXSSF như: createRow, getRow, autoSizeColumn, … chỉ ảnh hưởng đến các record trong phạm vi rowAccessWindowSize được chỉ định.

Phương thức autoSizeColumn: chỉ tự động điều chỉnh cỡ trong phạm vi rowAccessWindowSize được chỉ định. Để có thể autoSizeColumn đúng trên tất cả các record, cần đánh dấu theo dõi các cột trong bảng để tự động điều chỉnh định cỡ. Việc xác định độ rộng phù hợp nhất cho một ô rất đắt, điều này có thể ảnh hưởng đến hiệu suất chương trình.

sheet.trackColumnForAutoSizing(columnIndex); sheet.trackAllColumnsForAutoSizing();

Ví dụ sử dụng SXSSF

Book.java

package com.gpcoder.apachepoi; public class Book { private Integer id; private String title; private Integer quantity; private Double price; private Double totalMoney; public Book() { super(); } public Book(Integer id, String title, Integer quantity, double price) { super(); this.id = id; this.title = title; this.quantity = quantity; this.price = price; } @Override public String toString() { return "Book [id=" + id + ", title=" + title + ", quantity=" + quantity + ", price=" + price + ", totalMoney=" + totalMoney + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Integer getQuantity() { return quantity; } public void setQuantity(Integer quantity) { this.quantity = quantity; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Double getTotalMoney() { return totalMoney; } public void setTotalMoney(Double totalMoney) { this.totalMoney = totalMoney; } }

WriteExcelUsingSXSSF.java

package com.gpcoder.apachepoi; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.BuiltinFormats; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class WriteExcelUsingSXSSF { public static final int COLUMN_INDEX_ID = 0; public static final int COLUMN_INDEX_TITLE = 1; public static final int COLUMN_INDEX_PRICE = 2; public static final int COLUMN_INDEX_QUANTITY = 3; public static final int COLUMN_INDEX_TOTAL = 4; private static CellStyle cellStyleFormatNumber = null; public static void main(String[] args) throws IOException { final String excelFilePath = "C:/demo/books_large.xlsx"; writeExcel(books, excelFilePath); } SXSSFWorkbook workbook = new SXSSFWorkbook(); SXSSFSheet sheet = workbook.createSheet("Books"); sheet.trackAllColumnsForAutoSizing(); int rowIndex = 0; writeHeader(sheet, rowIndex); rowIndex++; for (Book book : books) { SXSSFRow row = sheet.createRow(rowIndex); writeBook(book, row); rowIndex++; } writeFooter(sheet, rowIndex); int numberOfColumn = 5; autosizeColumn(sheet, numberOfColumn); createOutputFile(workbook, excelFilePath); System.out.println("Done!!!"); } Book book; for (int i = 1; i <= 5; i++) { book = new Book(i, "Book " + i, i * 2, i * 1000); listBook.add(book); } return listBook; } private static void writeHeader(SXSSFSheet sheet, int rowIndex) { CellStyle cellStyle = createStyleForHeader(sheet); SXSSFRow row = sheet.createRow(rowIndex); SXSSFCell cell = row.createCell(COLUMN_INDEX_ID); cell.setCellStyle(cellStyle); cell.setCellValue("Id"); cell = row.createCell(COLUMN_INDEX_TITLE); cell.setCellStyle(cellStyle); cell.setCellValue("Title"); cell = row.createCell(COLUMN_INDEX_PRICE); cell.setCellStyle(cellStyle); cell.setCellValue("Price"); cell = row.createCell(COLUMN_INDEX_QUANTITY); cell.setCellStyle(cellStyle); cell.setCellValue("Quantity"); cell = row.createCell(COLUMN_INDEX_TOTAL); cell.setCellStyle(cellStyle); cell.setCellValue("Total money"); } private static void writeBook(Book book, SXSSFRow row) { if (cellStyleFormatNumber == null) { short format = (short) BuiltinFormats.getBuiltinFormat("#,##0"); SXSSFWorkbook workbook = row.getSheet().getWorkbook(); cellStyleFormatNumber = workbook.createCellStyle(); cellStyleFormatNumber.setDataFormat(format); } SXSSFCell cell = row.createCell(COLUMN_INDEX_ID); cell.setCellValue(book.getId()); cell = row.createCell(COLUMN_INDEX_TITLE); cell.setCellValue(book.getTitle()); cell = row.createCell(COLUMN_INDEX_PRICE); cell.setCellValue(book.getPrice()); cell.setCellStyle(cellStyleFormatNumber); cell = row.createCell(COLUMN_INDEX_QUANTITY); cell.setCellValue(book.getQuantity()); cell = row.createCell(COLUMN_INDEX_TOTAL, CellType.FORMULA); cell.setCellStyle(cellStyleFormatNumber); int currentRow = row.getRowNum() + 1; String columnPrice = CellReference.convertNumToColString(COLUMN_INDEX_PRICE); String columnQuantity = CellReference.convertNumToColString(COLUMN_INDEX_QUANTITY); cell.setCellFormula(columnPrice + currentRow + "*" + columnQuantity + currentRow); } private static CellStyle createStyleForHeader(Sheet sheet) { Font font = sheet.getWorkbook().createFont(); font.setFontName("Times New Roman"); font.setBold(true); font.setFontHeightInPoints((short) 14); font.setColor(IndexedColors.WHITE.getIndex()); CellStyle cellStyle = sheet.getWorkbook().createCellStyle(); cellStyle.setFont(font); cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); cellStyle.setBorderBottom(BorderStyle.THIN); return cellStyle; } private static void writeFooter(SXSSFSheet sheet, int rowIndex) { SXSSFRow row = sheet.createRow(rowIndex); SXSSFCell cell = row.createCell(COLUMN_INDEX_TOTAL, CellType.FORMULA); cell.setCellFormula("SUM(E2:E6)"); } private static void autosizeColumn(SXSSFSheet sheet, int lastColumn) { for (int columnIndex = 0; columnIndex < lastColumn; columnIndex++) { sheet.autoSizeColumn(columnIndex); } } private static void createOutputFile(SXSSFWorkbook workbook, String excelFilePath) throws IOException { try (OutputStream os = new FileOutputStream(excelFilePath)) { workbook.write(os); } } }

Thực thi chương trình trên, một file books_large.xlsx được tạo ra trong thư mục C:/demo như sau:

So sánh hiệu xuất chương trình khi sử dụng SXSSF và XSSF

Để so sánh hiệu suất của chương trình khi sử dụng SXSSF và XSSf, tôi sử dụng lại ví dụ WriteExcelUsingSXSSF ở trên, và ví dụ WriteExcelExample ở bài viết trước.

Trong ví dụ bên dưới, tôi sử dụng lớp StopWatch của thư viện Apache Common Lang để đo thời gian thực thi của chương trình

Bây giờ, hãy tăng số lượng dữ liệu cần xuất ra khoảng 100.000 dòng (thay đổi trong phương thức getBooks). Xem kết quả thực thi của 2 chương trình như sau:

Bây giờ hãy thử xóa bỏ các đoạn code autoresize column ở 2 chương trình, vẫn kiểm tra 100.000 record.

WriteExcelUsingSXSSF:

Kết quả thực thi chương trình trên:

Kết quả thực thi chương trình trên:

Khi cần xuất dữ liệu lớn ra file .xlsx và không có yêu cầu về autoresize column thì nên sử dụng SXSSF để đạt được hiệu suất tốt hơn.

Cám ơn các bạn đã quan tâm và theo dõi bài viết, hẹn gặp lại ở các bài viết tiếp theo.

Thao Tác Với Workbook Và Worksheet Trong Excel

Các tùy chọn của nút Open trong hộp thoại Open: Open (mở bình thường), Open Read-Only (Không lưu đè được những thay đổi), Open as Copy (Tạo bản sao của tập tin và mở ra), Open in Browser (Mở tập tin bằng trình duyệt web mặc định), Open and Repair (Rất hữu dụng trong trường hợp tập tin bị lỗi).

Để bảo mật tập tin, chúng ta có thể gán mật mã bảo vệ, khi đó cần phải biết mật mã mới được phép mở tập tin

B3. Nhập mật mã mở và hiệu chỉnh workbook (hai mật mã này nên khác nhau để tăng bảo mật). Sau đó nhấn nút OK

B4. Xác nhận lại mật mã mở workbook. Sau đó nhấn nút OK

B5. Xác nhận lại mật mã hiệu chỉnh workbook. Sau đó nhấn nút OK

B6. Nhấn nút Save để hoàn tất.

Các tùy chọn trong hộp General Options: Always create backup (tạo bản sao có đuôi *.xlk trước khi gán mật mã), Password to Open (mật mã để mở workbook), Password to modify (mật mã để cập nhật nội dung workbook), Read-only recommended (mở dưới dạng chỉ đọc).

II. Thao tác với WorkSheet

1. Chèn thêm worksheet mới vào workbook

Có nhiểu cách thực hiện:

Cách 1: Nhấn vào nút

trên thanh sheet tab

Cách 2: Nhấp phải chuột lên thanh sheet tab và chọn Insert…, hộp thoại Insert hiện ra, chọn Worksheet và nhấn nút OK. Sheet mới sẽ chèn vào trước sheet hiện hành.

Nhấp phải chuột lên tên sheet cần đổi tên ở thanh sheet tab, chọn Rename, gõ tên mới vào, xong nhấn phím Enter. Tên sheet có thể dài tới 31 ký tự và có thể dùng khoảng trắng, tuy nhiên không được dùng các ký hiệu để đặt tên như: : / ? *

Nhấp phải chuột lên tên sheet muốn xóa sau đó chọn Delete, xác nhận xóa OK.

4. Sắp xếp thứ tự các worksheet

Có nhiều cách thực hiện sắp xếp worksheet như:

1. Nhấp trái chuột lên tên sheet cần sắp xếp và giữ chuột kéo đến vị trí mới và thả chuột.

2. Khi có quá nhiều sheet thì dùng cách này, nhấp phải chuột lên tên sheet cần sắp xếp, chọn Move or Copy…. hộp thoại Move or Copy hiện ra. Hãy nhấp chọn lên tên sheet trong danh sách mà bạn muốn di chuyển sheet đến trước nó, sau đó nhấn OK.

– Để chép một hay nhiều sheet sang một workbook khác, bạn hãy mỡ workbook đó lên sau đó thực hiện lệnh Move or Copy… và nhớ chọn tên workbook đích tại To book (nếu chọn workbook đích (new book) thì sẽ sao chép các sheet đến một workbook mới).

Việc tô màu giúp quản lý thanh sheet tab được tốt hơn. Để tô màu cho các sheet tab bạn chỉ cần nhấp phải chuột lên tên sheet cần tô màu, tiếp theo hãy chọn Tab Color và chọn màu thích hợp.

Khi bạn không muốn ngưới khác thấy một hay nhiều sheet nào đó thì bạn có thể ẩn nó đi. Không thể ẩn hết các sheet trong workbook mà phải còn lại ít nhất một sheet không bị ẩn. Muốn ẩn sheet bạn chỉ cần nhấp phải chuột lên tên sheet muốn ần và chọn Hide thế là sheet đã được ẩn. Khi muốn cho hiện trở lại một sheet, bạn nhấp phải chuột lên thanh Sheet tab và chọn Unhide … sau đó chọn tên sheet cần cho hiện và nhấn nút OK.

III. Sử dụng các chế độ hiển thị trong quá trình thao tác

1. Xem và so sánh worksheet trong nhiều cửa sổ

2. Chia khung bảng tính làm nhiều phần và cố định vùng tiêu đề

Tính năng rất hay được dùng khi thao tác trên các danh sách dài hoặc trong tính toán cần phải thực hiện nhiều việc tham chiếu.

+ Freeze Panes: Sẽ cố định dòng phía trên và cột bên trái ô hiện hành

+ Freeze Top Row: Cố định dòng đầu tiên đang nhìn thấy của danh sách

+ Freeze First Column: Cố định cột đầu tiên đang nhìn thấy của danh sách

Bạn đang đọc nội dung bài viết Thao Tác Với Excel File Bằng Apache Poi trên website Beiqthatgioi.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết 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. Chúc bạn một ngày tốt lành!