ไฟล์เก็บถาวร ZIP สามารถมีหลายไฟล์ ซึ่งมักใช้เพื่อลดขนาดไฟล์ ในเวลาเดียวกัน แต่ละไฟล์จะบีบอัดทีละไฟล์ ซึ่งช่วยในการแตกไฟล์และเพิ่มไฟล์ใหม่โดยไม่ต้องบีบอัดหรือขยายขนาดไฟล์ Zip ทั้งหมด ปัจจุบัน การใช้สเปรดชีต Excel (XLSX หรือ XLS) เพิ่มขึ้นในกิจกรรมทางธุรกิจในแต่ละวัน บางครั้งไฟล์ Excel อาจมีขนาดค่อนข้างใหญ่ แต่เราสามารถลดขนาดลงได้ด้วยการบีบอัดเป็นไฟล์ ZIP ในบทความนี้ คุณจะได้เรียนรู้วิธีบีบอัดไฟล์ Excel ไปยังไฟล์ ZIP ใน C# โดยไม่ต้องเขียนโค้ดที่ซับซ้อน นอกจากนั้น คุณจะเห็นวิธีรับรายงานความคืบหน้าในการบีบอัดขณะซิปไฟล์ Excel ขนาดใหญ่
บทความนี้จะกล่าวถึงประเด็นต่อไปนี้:
- C# .NET API เพื่อบีบอัดไฟล์ Excel ไปยังไฟล์ ZIP
- เพิ่มไฟล์ XLS หรือ XLSX ลงใน ZIP ใน C#
- รับรายงานความคืบหน้าของการบีบอัดใน C#
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:
- ขั้นแรก สร้างอ็อบเจ็กต์ของคลาส FileStream สำหรับไฟล์ ZIP เอาท์พุต
- ประการที่สอง สร้างออบเจ็กต์ของ FileStream สำหรับไฟล์ Excel ที่จะบีบอัด
- จากนั้น เริ่มต้นคลาส Archive และส่งผ่านอินสแตนซ์ของคลาส ArchiveEntrySettings
- หลังจากนั้น เพิ่มออบเจ็กต์ FileStream ที่สร้างในขั้นตอนที่ 2 โดยใช้เมธอด Archive.CreateEntry
- สุดท้าย ให้เรียกใช้เมธอด 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)
โปรดปฏิบัติตามขั้นตอนที่ระบุไว้ด้านล่าง:
- สร้างวัตถุของคลาส FileStream สำหรับไฟล์ ZIP เอาต์พุต
- สร้างออบเจ็กต์ของ FileInfo สำหรับไฟล์ Excel ที่จะบีบอัด
- เริ่มต้นคลาส Archive และส่งผ่านอินสแตนซ์ของคลาส ArchiveEntrySettings
- เพิ่มวัตถุ FileStream ที่สร้างในขั้นตอนที่ 2 โดยใช้วิธี Archive.CreateEntry
- หากต้องการบีบอัดไฟล์ ให้เรียกใช้เมธอด 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
ถามคำถาม
คุณสามารถแจ้งให้เราทราบคำถามหรือข้อสงสัยของคุณได้ใน ฟอรั่ม ของเรา