วิธีบีบอัดไฟล์ Excel เป็น ZIP ใน C#

วิธีบีบอัดไฟล์ Excel เป็น ZIP ใน C#

ไฟล์เก็บถาวร ZIP สามารถมีหลายไฟล์ ซึ่งมักใช้เพื่อลดขนาดไฟล์ ในเวลาเดียวกัน แต่ละไฟล์จะบีบอัดทีละไฟล์ ซึ่งช่วยในการแตกไฟล์และเพิ่มไฟล์ใหม่โดยไม่ต้องบีบอัดหรือขยายขนาดไฟล์ Zip ทั้งหมด ปัจจุบัน การใช้สเปรดชีต Excel (XLSX หรือ XLS) เพิ่มขึ้นในกิจกรรมทางธุรกิจในแต่ละวัน บางครั้งไฟล์ Excel อาจมีขนาดค่อนข้างใหญ่ แต่เราสามารถลดขนาดลงได้ด้วยการบีบอัดเป็นไฟล์ ZIP ในบทความนี้ คุณจะได้เรียนรู้วิธีบีบอัดไฟล์ Excel ไปยังไฟล์ ZIP ใน C# โดยไม่ต้องเขียนโค้ดที่ซับซ้อน นอกจากนั้น คุณจะเห็นวิธีรับรายงานความคืบหน้าในการบีบอัดขณะซิปไฟล์ Excel ขนาดใหญ่

บทความนี้จะกล่าวถึงประเด็นต่อไปนี้:

C# .NET API เพื่อบีบอัดไฟล์ Excel ไปยังไฟล์ ZIP

ในการบีบอัดไฟล์ Excel ลงในไฟล์ ZIP เราจะใช้ Aspose.ZIP for .NET API ประกอบด้วยคุณสมบัติการเก็บถาวรมากมาย ดังนั้น คุณสามารถ ดาวน์โหลด DLL หรือติดตั้งโดยใช้ NuGet

Install-Package Aspose.ZIP

เพิ่มไฟล์ XLS หรือ XLSX ลงใน ZIP ใน C#

สมมติว่าคุณมีไฟล์ Excel (XLSX หรือ XLS) หลายไฟล์สำหรับการบีบอัดลงในไฟล์ ZIP คุณสามารถเลือกวิธีใดวิธีหนึ่งต่อไปนี้ในการทำงาน

C# บีบอัดไฟล์ Excel เป็น ZIP โดยใช้ FileStream

ด้วยวิธีนี้ เราจะใช้คลาส FileStream เพื่อเพิ่มไฟล์ลงในไฟล์ ZIP โดยการเรียกใช้ฟังก์ชัน Archive.CreateEntry(String, FileStream)

ต่อไปนี้เป็นขั้นตอนในการบีบอัดสเปรดชีต Excel เป็น ZIP โดยใช้ FileStream:

  1. ขั้นแรก สร้างอ็อบเจ็กต์ของคลาส FileStream สำหรับไฟล์ ZIP เอาท์พุต
  2. ประการที่สอง สร้างออบเจ็กต์ของ FileStream สำหรับไฟล์ Excel ที่จะบีบอัด
  3. จากนั้น เริ่มต้นคลาส Archive และส่งผ่านอินสแตนซ์ของคลาส ArchiveEntrySettings
  4. หลังจากนั้น เพิ่มออบเจ็กต์ FileStream ที่สร้างในขั้นตอนที่ 2 โดยใช้เมธอด Archive.CreateEntry
  5. สุดท้าย ให้เรียกใช้เมธอด Archive.Save และใช้อ็อบเจ็กต์ของ FileStream(สร้างขึ้นในขั้นตอนที่ 1) และอินสแตนซ์ของ ArchiveSaveOptions เป็นพารามิเตอร์

รหัสต่อไปนี้แสดงวิธีบีบอัดไฟล์ Excel เป็น ZIP โดยใช้ FileStream

// สร้าง FileStream สำหรับไฟล์ ZIP เอาท์พุต
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
            {
                // File1 ที่จะบีบอัด
                using (FileStream excel_file1 = File.Open("data1.xlsx", FileMode.Open, FileAccess.Read))
                {
                   // File2 ที่จะบีบอัด
                   using (FileStream excel_file2 = File.Open("data2.xlsx" , FileMode.Open, FileAccess.Read))
                    {
                        using (var archive = new Archive())
                        {
                            //เพิ่มไฟล์เพื่อเก็บ.
                            archive.CreateEntry("data1.xlsx", excel_file2);
                            archive.CreateEntry("data2.xlsx", excel_file2);
                            // บีบอัดไฟล์ลงในไฟล์ ZIP
                            archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "Two files are compressed in this archive." });
                        }
                    }
                }
            }

C# บีบอัดไฟล์ XLSX หรือ XLS ลงใน ZIP โดยใช้ FileInfo

อีกทางหนึ่ง เราสามารถใช้คลาส FileInfo เพื่อเพิ่มไฟล์ลงในไฟล์ ZIP ในกรณีนี้ ไฟล์จะถูกโหลดโดยใช้คลาส FileInfo และเพิ่มลงในไฟล์ ZIP โดยการเรียกเมธอด Archive.CreateEntry(String, FileInfo)

โปรดปฏิบัติตามขั้นตอนที่ระบุไว้ด้านล่าง:

  1. สร้างวัตถุของคลาส FileStream สำหรับไฟล์ ZIP เอาต์พุต
  2. สร้างออบเจ็กต์ของ FileInfo สำหรับไฟล์ Excel ที่จะบีบอัด
  3. เริ่มต้นคลาส Archive และส่งผ่านอินสแตนซ์ของคลาส ArchiveEntrySettings
  4. เพิ่มวัตถุ FileStream ที่สร้างในขั้นตอนที่ 2 โดยใช้วิธี Archive.CreateEntry
  5. หากต้องการบีบอัดไฟล์ ให้เรียกใช้เมธอด Archive.Save และใช้อ็อบเจ็กต์ของ FileStream(สร้างขึ้นในขั้นตอนที่ 1) และอินสแตนซ์ของ ArchiveSaveOptions เป็นพารามิเตอร์

รหัสต่อไปนี้แสดงวิธีบีบอัดไฟล์ XLSX หรือ XLS ลงใน ZIP โดยใช้ FileInfo

//สร้าง FileStream สำหรับไฟล์ ZIP เอาท์พุต
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
      {
               // ไฟล์ที่จะบีบอัด
               FileInfo fi1 = new FileInfo("data1.xlsx");
                FileInfo fi2 = new FileInfo("data2.xlsx");

                using (var archive = new Archive())
                {
                    //เพิ่มไฟล์เพื่อเก็บ
                    archive.CreateEntry("data1.xlsx", fi1);
                    archive.CreateEntry("data2.xlsx", fi2);
                    // บีบอัดไฟล์ลงในไฟล์ ZIP
                    archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
                }
       }

บีบอัดสเปรดชีต Excel เป็น ZIP โดยใช้เส้นทางไฟล์

วิธีที่ง่ายที่สุดคือการเพิ่มเส้นทางไฟล์ Excel ไปยังเมธอด Archive.CreateEntry โดยตรง:

ต่อไปนี้เป็นขั้นตอนในการบีบอัดสเปรดชีต Excel เป็น ZIP โดยใช้เส้นทางไฟล์:

  • เริ่มต้นคลาส Archive
  • เพิ่มไฟล์ Excel โดยใช้วิธี Archive.CreateEntry
  • หากต้องการบีบอัดข้อมูล ให้เรียกใช้เมธอด Archive.Save และใช้ชื่อของไฟล์เอาต์พุตเป็นพารามิเตอร์

รหัสต่อไปนี้สาธิตวิธีการบีบอัดไฟล์สเปรดชีต Excel เป็น ZIP โดยใช้เส้นทางของไฟล์

//สร้างอินสแตนซ์ของคลาส Archive
using (var archive = new Archive())
{
  //เพิ่มไฟล์โดยใช้วิธี Archive.CreateEntry
   archive.CreateEntry("entry_name1.dat", "input_file1.dat");
   archive.CreateEntry("entry_name2.dat", "input_file2.dat");
   //ซิปไฟล์
   archive.Save("result_archive.zip");
}

รับรายงานความคืบหน้าของการบีบอัดใน C#

ในกรณีของไฟล์ Excel ขนาดใหญ่ กระบวนการบีบอัดอาจใช้เวลานานจึงจะเสร็จสิ้น เพื่อจัดการกับมัน ไลบรารีการบีบอัด C# ZIP จัดให้มีเหตุการณ์ [CompressionProgressed] เพื่อโพสต์การอัปเดตอย่างต่อเนื่อง

ต่อไปนี้เป็นขั้นตอนในการรับรายงานความคืบหน้าของการบีบอัดใน C#:

  • สร้างวัตถุของ FileStream สำหรับไฟล์ Excel ขนาดใหญ่
  • เริ่มต้นคลาส Archive และส่งผ่านอินสแตนซ์ของคลาส ArchiveEntrySettings
  • รับวัตถุของ ArchiveEntry จากการเรียกเมธอด Archive.CreateEntry
  • แนบ [CompressionProgressed] กับวัตถุ ArchiveEntry
  • เรียก Archive.Save และใช้ชื่อของไฟล์เอาต์พุตเป็นพารามิเตอร์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรับรายงานความคืบหน้าของการบีบอัดใน C#:

// สร้างไฟล์ Excel ขนาดใหญ่
using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
{
    using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
    {
        // เพิ่มและไฟล์เพื่อเก็บถาวร
        ArchiveEntry entry = archive.CreateEntry("huge.bin", source);
        int percentReady = 0;
        // แนบเหตุการณ์ 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;
                 }       
             };
        // ซิปไฟล์
        archive.Save(zipFile);
    }
}

รับใบอนุญาตฟรี

คุณสามารถรับ [ใบอนุญาตชั่วคราวฟรี] เพื่อทดสอบ API โดยไม่มีข้อจำกัดในการประเมิน

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีบีบอัดไฟล์ Excel ไปยังไฟล์ ZIP ใน C# โดยใช้ ไลบรารีการบีบอัด C# ZIP นอกจากนั้น คุณยังมีความรู้เพียงพอเกี่ยวกับการรับรายงานความคืบหน้าในการบีบอัดขณะซิปไฟล์ Excel ขนาดใหญ่ คุณสามารถไปที่ เอกสาร เพื่อสำรวจคุณสมบัติอื่นๆ ของ C# ZIP Compression API

ถามคำถาม

คุณสามารถแจ้งให้เราทราบคำถามหรือข้อสงสัยของคุณได้ใน ฟอรั่ม ของเรา

ดูสิ่งนี้ด้วย