ZIP 档案可以包含多个文件,通常用于减小文件的大小。同时,每个文件单独压缩,这有助于提取它们并添加新文件,而无需压缩或解压缩整个 Zip 存档。如今,Excel(XLSX 或 XLS)电子表格在日常业务活动中的使用有所增加。有时,Excel 文件可能会变得很大,但我们可以通过将它们压缩成 ZIP 存档来减小它们的大小。在本文中,您将了解如何在 C# 中将 Excel 文件压缩为 ZIP 存档,而无需编写复杂的代码。除此之外,您还将了解如何在压缩大型 Excel 文件时获取 压缩进度报告。
本文将涵盖以下几点:
用于将 Excel 文件压缩为 ZIP 存档的 C# .NET API
要将 Excel 文件压缩成 ZIP 存档,我们将使用 Aspose.ZIP for .NET。 API 包含许多归档功能。因此,您可以下载 DLL 或使用NuGet 安装它。
Install-Package Aspose.ZIP
在 C# 中将 XLS 或 XLSX 文件添加到 ZIP
假设您有多个 Excel(XLSX 或 XLS)文件要压缩成 ZIP 存档。您可以选择以下方法之一来完成这项工作。
C# 使用 FileStream 将 Excel 文件压缩为 ZIP
这样,我们将使用 FileStream 类通过调用 Archive.CreateEntry(String, FileStream) 函数将文件添加到 ZIP 存档中。
以下是使用 FileStream 将 Excel 电子表格压缩为 ZIP 的步骤:
- 为输出 ZIP 存档创建一个 FileStream 类的对象。
- 为要压缩的 Excel 文件创建 FileStream 对象。
- 初始化 Archive 类并将 ArchiveEntrySettings 类的实例传递给它。
- 使用 Archive.CreateEntry 方法添加在步骤 2 中创建的 FileStream 对象。
- 要压缩文件,请调用 Archive.Save 方法并使用 FileStream 的对象(在步骤 1 中创建)和 ArchiveSaveOptions 的实例作为参数。
以下代码显示如何使用 FileStream 将 Excel 文件压缩为 ZIP。
// Create FileStream for output ZIP archive | |
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create)) | |
{ | |
// File1 to be compressed | |
using (FileStream excel_file1 = File.Open("data1.xlsx", FileMode.Open, FileAccess.Read)) | |
{ | |
// File2 to be compressed | |
using (FileStream excel_file2 = File.Open("data2.xlsx" , FileMode.Open, FileAccess.Read)) | |
{ | |
using (var archive = new Archive()) | |
{ | |
//Add files to archive. | |
archive.CreateEntry("data1.xlsx", excel_file2); | |
archive.CreateEntry("data2.xlsx", excel_file2); | |
// Compress the files into ZIP archive | |
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "Two files are compressed in this archive." }); | |
} | |
} | |
} | |
} |
C# 使用 FileInfo 将 XLSX 或 XLS 文件压缩成 ZIP
或者,我们可以使用 FileInfo 类将文件添加到 ZIP 存档中。在这种情况下,文件将使用 FileInfo 类加载,并通过调用 Archive.CreateEntry(String, FileInfo) 方法添加到 ZIP 存档中。
请按照以下步骤操作:
- 为输出 ZIP 存档创建一个 FileStream 类的对象。
- 为要压缩的 Excel 文件创建 FileInfo 对象。
- 初始化 Archive 类并将 ArchiveEntrySettings 类的实例传递给它。
- 使用 Archive.CreateEntry 方法添加在步骤 2 中创建的 FileStream 对象。
- 要压缩文件,请调用 Archive.Save 方法并使用 FileStream 的对象(在步骤 1 中创建)和 ArchiveSaveOptions 的实例作为参数。
以下代码显示如何使用 FileInfo 将 XLSX 或 XLS 文件压缩为 ZIP。
//Create FileStream for output ZIP archive | |
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create)) | |
{ | |
// Files to be compressed | |
FileInfo fi1 = new FileInfo("data1.xlsx"); | |
FileInfo fi2 = new FileInfo("data2.xlsx"); | |
using (var archive = new Archive()) | |
{ | |
//Add files to archive | |
archive.CreateEntry("data1.xlsx", fi1); | |
archive.CreateEntry("data2.xlsx", fi2); | |
// Compress the files into ZIP archive | |
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII }); | |
} | |
} |
使用文件路径将 Excel 电子表格压缩为 ZIP
最简单的方法是直接在Archive.CreateEntry方法中添加一个Excel文件路径:
以下是使用文件路径将 Excel 电子表格压缩为 ZIP 的步骤:
- 初始化 Archive 类。
- 使用 Archive.CreateEntry 方法添加 excel 文件。
- 要压缩数据,请调用 Archive.Save 方法并将输出文件的名称用作参数。
以下代码演示了如何使用文件路径将 Excel 电子表格文件压缩为 ZIP。
//Create an instance of Archive class | |
using (var archive = new Archive()) | |
{ | |
//Add files using Archive.CreateEntry method | |
archive.CreateEntry("entry_name1.dat", "input_file1.dat"); | |
archive.CreateEntry("entry_name2.dat", "input_file2.dat"); | |
//Zip the files. | |
archive.Save("result_archive.zip"); | |
} |
C#获取压缩进度报告
对于大型 Excel 文件,压缩过程可能需要很长时间才能完成。为了解决这个问题,C# ZIP 压缩库 提供了 [CompressionProgressed] 事件来持续发布更新。
下面是在C#中获取压缩进度报告的步骤:
- 为大型 Excel 文件创建一个 FileStream 对象。
- 初始化 Archive 类并将 ArchiveEntrySettings 类的实例传递给它。
- 从 Archive.CreateEntry 方法调用中获取 ArchiveEntry 的对象。
- 将 [CompressionProgressed] 附加到 ArchiveEntry 对象。
- 调用 Archive.Save 并使用输出文件的名称作为参数。
以下代码示例显示了如何在 C# 中获取压缩进度报告:
// Create large Excel file | |
using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read)) | |
{ | |
using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings()))) | |
{ | |
// Add and file to archive | |
ArchiveEntry entry = archive.CreateEntry("huge.bin", source); | |
int percentReady = 0; | |
// Attach CompressionProgress event | |
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; | |
} | |
}; | |
// Zip the file | |
archive.Save(zipFile); | |
} | |
} |
获得免费许可证
您可以获得 免费临时许可证 来测试 API,而没有评估限制。
结论
在本文中,您学习了如何使用C# ZIP 压缩库** 在 C# 中将 Excel 文件压缩为 ZIP 存档**。除此之外,您还获得了有关在压缩大型 Excel 文件时获取 压缩进度报告 的足够知识。您可以访问 文档 来探索 C# ZIP 压缩 API 的其他功能。
问一个问题
您可以在我们的论坛 上让我们知道您的问题或疑问。