Trong bài viết này, bạn sẽ tìm hiểu cách sao chép các trang tính từ nhiều sổ làm việc Excel vào một sổ làm việc bằng C#. Bạn cũng sẽ học cách sao chép dữ liệu từ nhiều trang tính vào một trang tính. Hãy bắt đầu.

API C# để hợp nhất nhiều tệp Excel

Aspose.Cells for .NET là một API thao tác bảng tính nổi tiếng cho phép bạn tạo và xử lý các tệp Excel từ bên trong các ứng dụng .NET của mình. Bạn có thể tải xuống các tệp nhị phân của API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.Cells

Kết hợp nhiều tệp Excel thành một bằng C#

Đôi khi, bạn cần gộp nhiều file Excel thành một file. Bạn muốn sao chép các bảng tính từ sổ làm việc nguồn sang sổ làm việc đích như hình dưới đây. Tài liệu Excel có thể thuộc bất kỳ phiên bản nào như Excel 97, Excel 2010 hoặc Excel 2016.

Kết hợp nhiều tệp Excel thành một bằng C#

Hình 1: Kết hợp các tệp Excel

Mã mẫu sau đây cho biết cách kết hợp nhiều tệp Excel thành một bằng C#.

// Mở file excel đầu tiên.
Workbook SourceBook1 = new Workbook("Excel A.xlsx");

// Mở file excel thứ hai.
Workbook SourceBook2 = new Workbook("Excel B.xlsx");

// Mở tệp excel thứ ba.
Workbook SourceBook3 = new Workbook("Excel C.xlsx");

// Sao chép bảng tính của tệp Excel thứ hai vào sổ làm việc đầu tiên.
SourceBook1.Combine(SourceBook2);

// Sao chép bảng tính của tệp Excel thứ ba vào sổ làm việc đầu tiên.
SourceBook1.Combine(SourceBook3);

// Lưu tệp excel đầu tiên được cập nhật dưới dạng tệp mới.
SourceBook1.Save("CombinedFile.xlsx");

Kết hợp các bảng tính cụ thể của các tệp Excel bằng C#

Đoạn mã trên sao chép tất cả các bảng tính trong tệp nguồn sang tệp đích. Tuy nhiên, bạn có thể muốn sao chép các bảng tính cụ thể từ tệp nguồn sang tệp đích. Ví dụ: bạn có hai tệp Excel và mỗi tệp có ba trang tính có tên Bán hàng, Nhân viên và Chi phí. Bạn chỉ muốn sao chép bảng tính Bán hàng từ cả hai tệp sang tệp đích như trong hình dưới đây.

Kết hợp các bảng tính cụ thể của các tệp Excel bằng C#

Hình 2: Kết hợp các bảng tính cụ thể của các tệp Excel

Mã mẫu sau đây cho biết cách kết hợp các trang tính cụ thể của tệp nguồn vào tệp đích bằng C#.

// Mở tệp Excel A.
Workbook excelA = new Workbook("Excel A.xlsx");

// Mở tệp Excel B.
Workbook excelB = new Workbook("Excel B.xlsx");

// Tạo sổ làm việc đích.
Workbook destWorkbook = new Workbook();
// Theo mặc định, bảng tính đầu tiên được thêm vào Sổ làm việc. Thêm bảng tính thứ hai.
destWorkbook.Worksheets.Add();

// Sao chép bảng tính Bán hàng của tệp Excel A vào tệp đích.
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// Sao chép bảng tính Bán hàng của tệp Excel B vào tệp đích.
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// Theo mặc định, tên bảng tính lần lượt là "Sheet1" và "Sheet2".
// Hãy đặt cho chúng những cái tên có ý nghĩa.
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// Lưu tệp đích.
destWorkbook.Save("CombinedFile.xlsx");

Hợp nhất nhiều bảng tính thành một bằng C#

Đôi khi, bạn cần sao chép dữ liệu từ nhiều trang tính vào một trang tính. Ví dụ: bạn có một vài trang tính trong tệp Excel chứa thông tin về các sản phẩm khác nhau và bạn muốn hợp nhất các trang tính này thành một trang tính tóm tắt, như sau:

Hợp nhất nhiều bảng tính thành một bằng C#

Hình 3: Hợp nhất nhiều bảng tính thành một

Đoạn mã sau đây cho biết cách sao chép dữ liệu từ nhiều trang tính vào một trang tính bằng C#.

// Mở tệp Excel có chứa các bảng tính:
// Sản phẩm1, Sản phẩm2 và Sản phẩm3
Workbook workbook = new Workbook("Products.xlsx");

// Thêm một bảng tính có tên Summary_sheet
Worksheet summarySheet = workbook.Worksheets.Add("Summary_sheet");

// Lặp lại các bảng tính nguồn có dữ liệu bạn muốn sao chép vào
// bảng tóm tắt
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

foreach (string sheetName in nameOfSourceWorksheets)
{
    Worksheet sourceSheet = workbook.Worksheets[sheetName];

    Range sourceRange;
    Range destRange;
    // Trong trường hợp bảng tính Products1, hãy bao gồm tất cả các hàng và cột.
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // Trong trường hợp bảng tính Products2 và Products3,
    // loại trừ hàng đầu tiên (có chứa tiêu đề).
    else
    {
        int mdatarow = sourceSheet.Cells.MaxDataRow; // Zero-based
        int mdatacol = sourceSheet.Cells.MaxDataColumn; // Zero-based
        sourceRange = sourceSheet.Cells.CreateRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount -1,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }

    // Sao chép dữ liệu, định dạng, vẽ đối tượng, v.v. từ một
    // phạm vi nguồn đến phạm vi đích.
    destRange.Copy(sourceRange);
    totalRowCount = sourceRange.RowCount + totalRowCount;
}

// Lưu sổ làm việc 
workbook.Save("Summarized.xlsx");

Phần kết luận

Trong bài viết này, bạn đã học cách kết hợp nhiều tệp Excel thành một theo chương trình. Bạn có thể sao chép tất cả các trang tính của tệp nguồn hoặc các trang tính cụ thể vào tệp đích. Bạn cũng đã học cách kết hợp dữ liệu của nhiều trang tính vào một trang tính. Vui lòng kiểm tra tài liệu của Aspose.Cells for .NET để biết thêm thông tin. Nếu bạn có bất kỳ câu hỏi nào, vui lòng hỏi tại Diễn đàn hỗ trợ của chúng tôi. Chúng tôi sẽ trả lời họ sau vài giờ.

Xem thêm