Việc tách các workbook Excel lớn thành các sheet riêng lẻ là nhu cầu phổ biến khi bạn muốn xử lý hoặc phân phối dữ liệu theo từng worksheet. Khả năng tách Excel Workbook trong Java cho phép các nhà phát triển cô lập mỗi sheet để xử lý hoặc báo cáo riêng. Conholdate.Total for Java cung cấp một SDK mạnh mẽ giúp công việc này trở nên đơn giản trong các ứng dụng Java. Trong hướng dẫn này, bạn sẽ thấy một ví dụ mã hoàn chỉnh, học cách thiết lập thư viện, hiểu các cân nhắc về hiệu năng, và nhận các mẹo thực tế để xử lý các tệp XLSX lớn một cách hiệu quả.

Ví dụ Hoạt Động Đầy Đủ cho Việc Tách Sổ làm việc Excel trong Java

Ví dụ này minh họa cách tách một sổ làm việc Excel thành các tệp riêng biệt bằng cách sử dụng Conholdate.Total.

import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.SaveFormat;
import java.io.File;

public class ExcelSplitter {
    public static void main(String[] args) {
        String sourceFile = "input.xlsx";
        String outputDir = "splitted";

File dir = new File(outputDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

try {
            Workbook sourceWorkbook = new Workbook(sourceFile);
            int sheetCount = sourceWorkbook.getWorksheets().getCount();

for (int i = 0; i < sheetCount; i++) {
                Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
                Workbook splitWorkbook = new Workbook();

splitWorkbook.getWorksheets().addCopy(sheet);
                if (splitWorkbook.getWorksheets().getCount() > 1) {
                    splitWorkbook.getWorksheets().removeAt(0);
                }

String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
                String outPath = outputDir + File.separator + safeName + ".xlsx";

splitWorkbook.save(outPath, SaveFormat.XLSX);
                splitWorkbook.dispose();
            }

sourceWorkbook.dispose();
        } catch (Exception e) {
            System.err.println("Error during splitting: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Lưu ý: Ví dụ mã này minh họa chức năng cốt lõi. Trước khi sử dụng trong dự án của bạn, hãy chắc chắn cập nhật mọi đường dẫn tệp và giá trị cấu hình để phù hợp với môi trường thực tế của bạn, xác minh rằng tất cả các phụ thuộc cần thiết đã được cài đặt đúng cách, và kiểm tra kỹ lưỡng trong môi trường phát triển. Nếu bạn gặp bất kỳ vấn đề nào, vui lòng tham khảo tài liệu chính thức hoặc liên hệ với đội hỗ trợ để được trợ giúp.

Các lớp chính được sử dụng

Đoạn mã này dựa vào ba lớp cốt lõi từ thư viện Aspose.Cells được cung cấp cùng với Conholdate.Total:

  • Workbook - đại diện cho một tệp Excel toàn bộ và cung cấp các phương thức để tải, lưu và thao tác với các workbook. Xem Workbook class API reference.
  • Worksheet - cho phép truy cập vào một sheet riêng lẻ trong workbook.
  • SaveFormat - kiểu liệt kê xác định định dạng đầu ra; SaveFormat.XLSX ghi tệp dưới dạng container XLSX hiện đại.

Các lớp này nhẹ, nhưng chúng cấp phát tài nguyên gốc, vì vậy việc giải phóng chúng kịp thời (như đã minh họa) là cần thiết cho Quản lý bộ nhớ cho các tệp Excel lớn.

Phân tích tách sổ làm việc Excel trong Java

Chương trình tuân theo một chuỗi lệnh rõ ràng mà bạn có thể áp dụng cho bất kỳ quy trình làm việc Excel Split Java nào.

Giải thích từng bước

  1. Tải workbook nguồn - new Workbook(sourceFile) đọc tệp XLSX đầu vào.
Workbook sourceWorkbook = new Workbook(sourceFile);
  1. Tạo thư mục đầu ra - Kiểm tra xem thư mục đích có tồn tại hay không và tạo nó nếu cần.

    File dir = new File(outputDir);
    if (!dir.exists()) {
        dir.mkdirs();
    }
    
  2. Lặp qua các worksheet - sourceWorkbook.getWorksheets().getCount() trả về số lượng sheet, và vòng lặp xử lý mỗi sheet.

for (int i = 0; i < sheetCount; i++) {
    Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
}
  1. Sao chép trang hiện tại vào một workbook mới - addCopy(sheet) sao chép trang, sau đó trang trống mặc định sẽ bị xóa nếu có.
Workbook splitWorkbook = new Workbook();
splitWorkbook.getWorksheets().addCopy(sheet);
if (splitWorkbook.getWorksheets().getCount() > 1) {
    splitWorkbook.getWorksheets().removeAt(0);
}
  1. Save the split workbook - Tạo tên tệp an toàn và ghi trang tính dưới dạng tệp XLSX.
String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
String outPath = outputDir + File.separator + safeName + ".xlsx";
splitWorkbook.save(outPath, SaveFormat.XLSX);
  1. Giải phóng tài nguyên - Gọi dispose() trên cả workbook tạm thời và workbook nguồn để giải phóng bộ nhớ và tránh rò rỉ gốc.

Toàn bộ quy trình là một Ví dụ mã Java để tách các trang tính Excel có thể được nhúng vào các pipeline xử lý dữ liệu lớn hơn.

Yêu cầu trước và Cài đặt - Bắt đầu với Conholdate.Total

Trước khi bạn có thể biên dịch và chạy ví dụ, hãy đảm bảo môi trường phát triển của bạn đáp ứng các yêu cầu sau.

Cấu hình Maven

Thêm kho Maven của Conholdate và phụ thuộc SDK vào tệp pom.xml của bạn:

<repositories>
    <repository>
        <id>conholdate-repo</id>
        <name>Conholdate Maven Repository</name>
        <url>https://repository.conholdate.com/repo/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.conholdate</groupId>
    <artifactId>conholdate-total</artifactId>
    <version>24.9</version>
    <type>pom</type>
</dependency>

Tải xuống gói SDK mới nhất từ trang tải xuống chính thức: Conholdate.Total for Java tải xuống. Thư viện yêu cầu Java 8 hoặc mới hơn và chạy trên bất kỳ JVM tiêu chuẩn nào.

Cấu hình giấy phép

Cần có giấy phép hợp lệ để sử dụng trong môi trường sản xuất. Bạn có thể nhận giấy phép tạm thời để thử nghiệm từ trang giấy phép tạm thời. Đối với các dự án dài hạn, hãy xem các tùy chọn giá trên trang giá. Khi đã có tệp giấy phép, hãy thiết lập nó trong mã khởi động ứng dụng của bạn (không được hiển thị ở đây) như mô tả trong tài liệu.

Mẹo Thực Tiễn Để Tách Excel Hiệu Quả

Làm việc với các workbook lớn đòi hỏi việc xử lý tài nguyên cẩn thận. Các khuyến nghị sau giúp bạn duy trì quá trình nhanh chóng và đáng tin cậy.

Khuyến nghị quản lý bộ nhớ

  • Giải phóng mỗi workbook tạm thời sau khi lưu để giải phóng tài nguyên gốc và giữ mức sử dụng bộ nhớ thấp.
  • Tái sử dụng các đối tượng khi có thể - tạo một thể hiện Workbook duy nhất cho nguồn và tái sử dụng cùng một đối tượng File cho thư mục đầu ra sẽ giảm áp lực lên bộ thu gom rác.
  • Xem xét chế độ streaming nếu phiên bản Conholdate.Total của bạn hỗ trợ; streaming sẽ đọc các hàng theo yêu cầu thay vì tải toàn bộ workbook vào bộ nhớ.

Các sai lầm phổ biến và cách tránh chúng

Triệu chứngNguyên nhân có thểCách khắc phục
java.lang.OutOfMemoryErrorGiữ mọi workbook đã tách trong bộ nhớĐảm bảo gọi splitWorkbook.dispose() bên trong vòng lặp, như đã minh họa.
Illegal file name errorTên sheet chứa các ký tự như `\ / : * ? " < >`
Missing output filesĐường dẫn thư mục đầu ra không đúng hoặc không thể ghiXác minh rằng outputDir trỏ tới vị trí có quyền ghi.

Các công cụ tăng hiệu suất

  • Log progress - in việc in tên sheet trước khi lưu giúp bạn xác định điểm lỗi trong các batch lớn.
  • Increase JVM heap - đối với các workbook cực lớn, khởi động JVM với -Xmx2g (hoặc cao hơn) để cung cấp thêm bộ nhớ cho quá trình.
  • Parallel processing - nếu workbook không phụ thuộc lẫn nhau, bạn có thể chia công việc thành nhiều luồng, nhưng nhớ rằng thư viện gốc không phải lúc nào cũng thread‑safe; hãy kiểm tra kỹ.

Bằng cách làm theo các mẹo này, bạn có thể hiệu quả phân tách sổ làm việc Excel trong Java ngay cả khi phải xử lý hàng nghìn trang tính hoặc các sổ làm việc có kích thước hàng trăm megabyte.

Kết luận

Việc tách một workbook Excel thành các tệp XLSX riêng lẻ bằng Conholdate.Total for Java là một kỹ thuật đơn giản nhưng mạnh mẽ dành cho các nhà phát triển Java cần truy cập chi tiết vào dữ liệu của các worksheet. Mã được cung cấp hiển thị quy trình làm việc đầy đủ, từ việc tải workbook nguồn đến việc giải phóng tài nguyên sau khi mỗi sheet được lưu. Sử dụng cách tiếp cận này để tách Workbook Excel trong Java cho phép bạn kiểm soát chi tiết từng sheet và dễ dàng tích hợp vào các pipeline xử lý dữ liệu lớn hơn. Nhớ lấy giấy phép phù hợp cho việc sử dụng trong môi trường sản xuất; bạn có thể khám phá các tùy chọn giá trên trang giá hoặc yêu cầu giấy phép tạm thời từ trang giấy phép tạm thời. Với SDK đã được cài đặt và các khuyến nghị thực hành tốt nhất đã được áp dụng, bạn đã sẵn sàng xử lý ngay cả những kịch bản tách Excel Java khó khăn nhất.

Câu hỏi thường gặp

Làm thế nào để tách Workbook Excel trong Java bằng Conholdate.Total?
Sử dụng lớp ExcelSplitter được hiển thị trong ví dụ đầy đủ. Nó tải workbook nguồn, lặp qua từng worksheet, tạo một workbook mới cho mỗi sheet và lưu nó dưới dạng tệp XLSX riêng lẻ. Phương pháp này cũng hoạt động khi bạn cần tách tệp XLSX bằng Java cho bất kỳ kích thước workbook nào.

SDK có tương thích với tất cả các phiên bản Java không?
SDK hỗ trợ Java 8 trở lên. Đảm bảo dự án của bạn nhắm tới một JDK tương thích.

Tôi có cần thiết lập giấy phép trước khi chạy mã không?
Giấy phép là bắt buộc cho các triển khai sản xuất. Bạn có thể lấy giấy phép tạm thời để thử nghiệm từ temporary license page và xem đầy đủ bảng giá trên pricing page.

Nếu workbook của tôi chứa hàng ngàn sheet thì sao?
Xử lý workbook theo từng lô, giải phóng mỗi workbook tạm thời ngay lập tức, và cân nhắc tăng kích thước heap của JVM nếu cần. Ghi lại tên của mỗi sheet giúp bạn nhanh chóng xác định sheet gây vấn đề.

Read More