Cách nén tệp Excel thành ZIP trong C#

Cách nén tệp Excel thành ZIP trong C#

Kho lưu trữ ZIP có thể chứa nhiều tệp, thường được sử dụng để giảm kích thước tệp. Đồng thời, mỗi tệp nén riêng lẻ, giúp giải nén chúng và thêm tệp mới mà không cần nén hoặc giải nén toàn bộ kho lưu trữ Zip. Ngày nay, việc sử dụng bảng tính Excel (XLSX hoặc XLS) ngày càng tăng trong hoạt động kinh doanh hàng ngày. Đôi khi, các tệp Excel có thể khá lớn nhưng chúng ta có thể giảm kích thước của chúng bằng cách nén chúng vào kho lưu trữ ZIP. Trong bài viết này, bạn sẽ tìm hiểu cách nén tệp Excel vào kho lưu trữ ZIP trong C# mà không cần viết mã phức tạp. Ngoài ra, bạn sẽ biết cách lấy báo cáo về tiến trình nén trong khi nén các tệp excel lớn.

Các điểm sau đây sẽ được đề cập trong bài viết này:

API C# .NET để nén tệp Excel vào kho lưu trữ ZIP

Để nén các tệp Excel vào kho lưu trữ ZIP, chúng tôi sẽ sử dụng Aspose.ZIP for .NET. API bao gồm nhiều tính năng lưu trữ. Do đó, bạn có thể tải xuống DLL hoặc cài đặt nó bằng NuGet.

Install-Package Aspose.ZIP

Thêm tệp XLS hoặc XLSX vào ZIP trong C#

Giả sử bạn có nhiều tệp Excel (XLSX hoặc XLS) để nén vào kho lưu trữ ZIP. Bạn có thể chọn một trong các cách sau để thực hiện công việc.

C# nén tệp Excel thành ZIP bằng FileStream

Bằng cách này, chúng ta sẽ sử dụng lớp FileStream để thêm tệp vào kho lưu trữ ZIP bằng cách gọi hàm Archive.CreateEntry(String, FileStream).

Sau đây là các bước để nén bảng tính Excel thành ZIP bằng FileStream:

  1. Đầu tiên, tạo một đối tượng của lớp FileStream cho kho lưu trữ ZIP đầu ra.
  2. Thứ hai, tạo đối tượng FileStream để nén tệp Excel.
  3. Sau đó, khởi tạo lớp Archive và chuyển cho nó một phiên bản của lớp ArchiveEntrySettings.
  4. Sau đó, thêm các đối tượng FileStream được tạo ở bước 2 bằng phương thức Archive.CreateEntry.
  5. Cuối cùng, gọi phương thức Archive.Save và sử dụng các đối tượng của FileStream(được tạo ở bước 1) và phiên bản của ArchiveSaveOptions làm tham số.

Đoạn mã sau đây cho biết cách nén tệp Excel thành ZIP bằng FileStream.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
            {
                // File1 sẽ được nén
                using (FileStream excel_file1 = File.Open("data1.xlsx", FileMode.Open, FileAccess.Read))
                {
                   // File2 sẽ được nén
                   using (FileStream excel_file2 = File.Open("data2.xlsx" , FileMode.Open, FileAccess.Read))
                    {
                        using (var archive = new Archive())
                        {
                            //Thêm tập tin vào kho lưu trữ.
                            archive.CreateEntry("data1.xlsx", excel_file2);
                            archive.CreateEntry("data2.xlsx", excel_file2);
                            // Nén các tập tin vào kho lưu trữ ZIP
                            archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "Two files are compressed in this archive." });
                        }
                    }
                }
            }

C# nén các tệp XLSX hoặc XLS thành ZIP bằng FileInfo

Ngoài ra, chúng ta có thể sử dụng lớp FileInfo để thêm tệp vào kho lưu trữ ZIP. Trong trường hợp này, các tệp sẽ được tải bằng lớp FileInfo và được thêm vào kho lưu trữ ZIP bằng cách gọi phương thức Archive.CreateEntry(String, FileInfo).

Vui lòng làm theo các bước được đề cập dưới đây:

  1. Tạo một đối tượng của lớp FileStream cho kho lưu trữ ZIP đầu ra.
  2. Tạo đối tượng FileInfo để nén file Excel.
  3. Khởi tạo lớp Lưu trữ và chuyển cho nó một phiên bản của lớp ArchiveEntrySettings.
  4. Thêm các đối tượng FileStream được tạo ở bước 2 bằng phương thức Archive.CreateEntry.
  5. Để nén các tập tin, hãy gọi phương thức Archive.Save và sử dụng các đối tượng của FileStream(được tạo ở bước 1) và phiên bản của ArchiveSaveOptions làm tham số.

Đoạn mã sau đây cho biết cách Nén tệp XLSX hoặc XLS thành ZIP bằng FileInfo.

//Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
      {
               // Các tập tin sẽ được nén
               FileInfo fi1 = new FileInfo("data1.xlsx");
                FileInfo fi2 = new FileInfo("data2.xlsx");

                using (var archive = new Archive())
                {
                    //Thêm tập tin vào lưu trữ
                    archive.CreateEntry("data1.xlsx", fi1);
                    archive.CreateEntry("data2.xlsx", fi2);
                    // Nén các tập tin vào kho lưu trữ ZIP
                    archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
                }
       }

Nén bảng tính Excel thành ZIP bằng đường dẫn tệp

Cách đơn giản nhất là thêm trực tiếp đường dẫn tệp Excel vào phương thức Archive.CreateEntry:

Sau đây là các bước để nén bảng tính Excel thành ZIP bằng đường dẫn tệp:

  • Khởi tạo lớp Lưu trữ.
  • Thêm tệp excel bằng phương thức Archive.CreateEntry.
  • Để nén dữ liệu, hãy gọi phương thức Archive.Save và sử dụng tên của tệp đầu ra làm tham số.

Đoạn mã sau đây trình bày cách Nén tệp bảng tính Excel thành ZIP bằng đường dẫn tệp.

//Tạo một thể hiện của lớp Lưu trữ
using (var archive = new Archive())
{
  //Thêm tệp bằng phương thức Archive.CreateEntry
   archive.CreateEntry("entry_name1.dat", "input_file1.dat");
   archive.CreateEntry("entry_name2.dat", "input_file2.dat");
   //Nén các tập tin.
   archive.Save("result_archive.zip");
}

Nhận báo cáo tiến trình nén trong C#

Trong trường hợp file Excel có dung lượng lớn, quá trình nén có thể mất nhiều thời gian để hoàn thành. Để giải quyết vấn đề này, Thư viện nén ZIP C# cung cấp sự kiện [CompressionProgressed] để đăng các bản cập nhật liên tục.

Sau đây là các bước để nhận báo cáo về tiến trình nén trong C#:

Mẫu mã sau đây cho biết cách nhận báo cáo về tiến trình nén trong C#:

// Tạo file Excel lớn
using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
{
    using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
    {
        // Thêm và tập tin vào kho lưu trữ
        ArchiveEntry entry = archive.CreateEntry("huge.bin", source);
        int percentReady = 0;
        // Đính kèm sự kiện CompressionProgress
        entry.CompressionProgressed += (s, e) =>
             {
                 int percent = (int)((100 * (long)e.ProceededBytes) / source.Length);
                 if (percent > percentReady)                 
                 {
                     Console.WriteLine(string.Format("{0}% compressed", percent));
                     percentReady = percent;
                 }       
             };
        // Nén tập tin
        archive.Save(zipFile);
    }
}

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để kiểm tra API mà không bị giới hạn về đánh giá.

Phần kết luận

Trong bài viết này, bạn đã học cách nén tệp Excel vào kho lưu trữ ZIP trong C# bằng cách sử dụng thư viện nén ZIP C#. Ngoài ra, bạn còn có đủ kiến thức về cách nhận báo cáo tiến trình nén trong khi nén các tệp excel lớn. Bạn có thể truy cập tài liệu để khám phá các tính năng khác của API nén C# ZIP.

Đặt một câu hỏi

Bạn có thể cho chúng tôi biết câu hỏi hoặc thắc mắc của bạn trên diễn đàn của chúng tôi.

Xem thêm